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?