目录

一、LM算法简介:

二、特点与优势:

三、代码及注释

四、获取拟合函数系数及效果图

五、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~


一、LM算法简介:

        LM(Levenberg-Marquardt)算法是一种结合梯度下降法高斯-牛顿法优点的非线性优化算法,专门用于求解非线性最小二乘问题。它通过动态调整阻尼因子(λ)在两种方法之间平衡,兼顾了收敛速度和数值稳定性,广泛应用于参数估计、曲线拟合、机器学习等领域。

二、特点与优势:

        1、收敛速度快

                在接近最优解时,利用高斯-牛顿法的二阶信息加速收敛;在远离最优解时,通过梯度下降保证稳定性。

        2、数值稳定

                通过阻尼因子 λλ 避免雅可比矩阵 JJ 的病态问题(如奇异矩阵),减少发散风险。

        3、适用场景

                非线性最小二乘问题:如实验数据拟合、模型参数估计。

                机器学习:神经网络训练、正则化优化。

                工程领域:图像处理、机器人路径规划、信号处理等。

三、代码及注释

        本例程使用Python编程,直接调用scipy第三方库中的LM算法API实现对应功能,如果没有安装scipy库,请先使用pip命令安装——pip install scipy

import matplotlib                       #导入matplotlib库
matplotlib.use('TkAgg')                 #使用TkAgg终端来显示图片
from scipy.optimize import curve_fit    #导入curve_fit库,内含LM非线性优化算法
import matplotlib.pyplot as plt         
import numpy as np                      #导入矩阵库

#样本数据集,(x,y)二维坐标点
x = [425, 495.4, 493, 686, 893.2, 892.3, 1227.2, 1235.6, 1560, 1750.2, 1741.8]
y = [100, 150, 150, 250, 350, 350, 500, 500, 625, 750, 750]

#需要使用哪个拟合函数,就解注释
def func(x,k1,k2,k3,k4,k5,b):				#定义5次多项式拟合函数
    return k1*x**5 + k2*x**4 + k3*x**3 + k4*x**2 +k5*x +b

# def func(x,k1,k2,k3,k4,b):				#定义4次多项式拟合函数
#     return k1*x**4 + k2*x**3 + k3*x**2 + k4*x +b

# def func(x,k1,k2,k3,b):					# 定义3次多项式拟合函数
#     return k1*x**3 + k2*x**2 + k3*x + b

# def func(x,k1,k2,b):						#定义2次多项式拟合函数
#     return k1*x**2 + k2*x + b

# def func(x, a, b):						#定义1次多项式拟合函数
#     return a * x + b

# def func(x, a, b, c):						#定义指数拟合函数
#     return a * np.exp(b * x) + c

#调用LM算法实现数据拟合
popt, pcov = curve_fit(func, x, y)
print("Optimized parameters:", popt)

#设置横纵坐标轴范围
x_fit = np.linspace(min(x), max(x), 5000)
y_fit = func(x_fit, *popt)

#开始画图,输出拟合函数参数
plt.scatter(x, y, label='Data')
plt.plot(x_fit, y_fit, 'r-', label='Fitted Curve')
plt.legend()
plt.show()

四、获取拟合函数系数及效果图

        1、使用二次多项式函数对样本数据进行拟合:

        图中输出的 Optimized parameter: 即对应二次多项式  k1*x**2 + k2*x + b  中的k1、k2、b三个系数。

        2、使用五次多项式函数对样本数据进行拟合:

         可以看到,相较于2次多项式,5次多项式对变化曲线的拟合效果更好,在实际应用时,根据自己的样本数据变化特点选择合适的拟合函数,也可以自己设计拟合函数来进行曲线拟合,并获取拟合参数。

五、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐