当前位置: 首页 > news >正文

【高斯函数拟合】高斯-牛顿法与梯度下降法的 Python 实现

高斯函数广泛应用于数据分析、信号处理等领域,其形式为 f ( x ) = A exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x) = A \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right) f(x)=Aexp(2σ2(xμ)2),其中 A A A 是幅度, μ \mu μ 是均值, σ \sigma σ 是标准差。本文通过 Python 实现高斯-牛顿法和梯度下降法来拟合高斯函数,并比较两种方法的性能。

背景

给定一组带噪声的数据,我们的目标是通过优化参数 A , μ , σ A, \mu, \sigma A,μ,σ 使高斯函数尽可能拟合数据。优化目标是最小化残差平方和:

S = ∑ i = 1 n ( y i − f ( x i , θ ) ) 2 , θ = [ A , μ , σ ] S = \sum_{i=1}^n (y_i - f(x_i, \theta))^2, \quad \theta = [A, \mu, \sigma] S=i=1n(yif(xi,θ))2,θ=[A,μ,σ]

我们将使用:

  • 高斯-牛顿法:利用雅可比矩阵,快速收敛,适合非线性最小二乘问题。
  • 梯度下降法:基于梯度更新,简单但收敛较慢。

代码实现

以下是完整的 Python 代码,使用 numpy 进行数值计算, `

matplotlib` 进行可视化。

核心代码

import numpy as np
import matplotlib.pyplot as plt# 高斯函数
def gaussian(x, A, mu, sigma):return A * np.exp(-(x - mu)**2 / (2 * sigma**2))# 雅可比矩阵
def jacobian(x, A, mu, sigma):n = len(x)J = np.zeros((n, 3))exp_term = np.exp(-(x - mu)**2 / (2 * sigma**2))J[:, 0] = exp_termJ[:, 1] = A * exp_term * (x - mu) / (sigma**2)J[:, 2] = A * exp_term * (x - mu)**2 / (sigma**3)return J# 高斯-牛顿法
def gauss_newton(x, y, params_init, max_iter=100, tol=1e-6):params = np.array(params_init, dtype=float)for i in range(max_iter):y_pred = gaussian(x, 
http://www.xdnf.cn/news/506413.html

相关文章:

  • Python集合运算:从基础到进阶全解析
  • 无线信道的噪声与干扰
  • 长三角、珠三角、成渝、京津冀四大城市群的区域与分布
  • 生产者 - 消费者模式实现方法整理
  • Ubuntu 添加系统调用
  • 给你的matplotlib images添加scale Bar
  • Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
  • 学习深度学习是否要先学习机器学习?
  • C语言| 指针变量的定义
  • 现货黄金跌破 3160 美元,市场行情剧烈波动​
  • 数据库故障排查指南:从紧急响应到根因分析【DeepSeek创作】
  • AUTOSAR图解==>AUTOSAR_SRS_WatchdogDriver
  • 基于单片机的防盗报警器设计与实现
  • 专题四:综合练习(括号组合算法深度解析)
  • 一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)
  • ARM-Linux 完全入门
  • Word文档图片排版与批量处理工具推荐
  • 在 Linux 上安装 MATLAB:完整指南与疑难解决方案
  • Autosar Nvm下电存储实现方式-基于ETAS工具
  • 小demo:选中树结构最后层级拿到所有层级中的deviceName并按照要求拼接
  • 嵌入式培训之数据结构学习(五)栈与队列
  • C语言:gcc 如何调用 Win32 打开文件对话框 ?
  • 543.二叉树的直径
  • CT重建笔记(五)—2D平行束投影公式
  • 5.15 学习日志
  • Java 面向对象详解和JVM底层内存分析
  • 图表制作-基础雷达图
  • 代码随想录算法训练营第60期第三十九天打卡
  • 2025.5.17 字符串hash
  • 如何利用Redis实现延迟队列?