【高斯拟合最终篇】Levenberg-Marquardt(LM)算法
Levenberg-Marquardt(LM)算法是一种结合高斯-牛顿法和梯度下降法的优化方法,特别适合非线性最小二乘问题,如高斯函数拟合。它通过引入阻尼因子(damping factor)平衡高斯-牛顿法的快速收敛和梯度下降法的稳定性。以下是基于之前的 gaussian_fit.py
,加入 LM 算法实现高斯拟合的 Python 示例,包含计算公式、代码和可视化结果,与高斯-牛顿法和梯度下降法的结果对比。
计算公式
高斯函数
高斯函数形式为:
f ( x ; A , μ , σ ) = A exp ( − ( x − μ ) 2 2 σ 2 ) f(x; A, \mu, \sigma) = A \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right) f(x;A,μ,σ)=Aexp(−2σ2(x−μ)2)
- A A A: 幅度,控制曲线高度。
- μ \mu μ: 均值,控制曲线中心。
- σ \sigma σ: 标准差,控制曲线宽度。
优化目标
最小化残差平方和:
S ( θ ) = ∑ i = 1 n ( y i − f ( x i , θ ) ) 2 , θ = [ A , μ , σ ] S(\theta) = \sum_{i=1}^n (y_i - f(x_i, \theta))^2, \quad \theta = [A, \mu, \sigma] S(θ)=i=1∑n(yi−f(xi,θ))2,θ=[A,μ,σ]
- y i y_i yi: 观测数据。
- f ( x i , θ ) f(x_i, \theta) f(xi,θ): 模型预测值。
- r i = y i − f ( x i , θ ) r_i = y_i - f(x_i, \theta) ri=yi−f(xi,θ): 残差。
雅可比矩阵
雅可比矩阵 ( J ) 包含高斯函数对参数 θ = [ A , μ , σ ] \theta = [A, \mu, \sigma] θ=[A,μ,σ] 的偏导数:
J = [ ∂ f ( x 1 ) ∂ A ∂ f ( x 1 ) ∂ μ ∂ f ( x 1 ) ∂ σ ⋮ ⋮ ⋮ ∂ f ( x n ) ∂ A ∂ f ( x n ) ∂ μ ∂ f ( x n ) ∂ σ ] J = \begin{bmatrix} \frac{\partial f(x_1)}{\partial A} & \frac{\partial f(x_1)}{\partial \mu} & \frac{\partial f(x_1)}{\partial \sigma} \\ \vdots & \vdots & \vdots \\ \frac{\partial f(x_n)}{\partial A} & \frac{\partial f(x_n)}{\partial \mu} & \frac{\partial f(x_n)}{\partial \sigma} \end{bmatrix} J= ∂A∂f(x1)⋮∂A∂f(xn