列文伯格马夸尔特算法_LM算法——列文伯格-马夸尔特算法

列文伯格-马夸尔特算法(LM算法)结合了牛顿法的快速局部收敛与全局稳定性的优点。在模拟实验中,通过随机生成数据并引入噪声,利用LM算法进行参数拟合,18步迭代即达到停止准则,展示了其高效的收敛速度。最终得到的拟合曲线与残差分析验证了算法的优秀性能。
摘要由CSDN通过智能技术生成
reference: https://blog.csdn.net/wolfcsharp/article/details/89674973

优点:

具有牛顿法的快速局部收敛性,又具有理想的总体收敛性。

迭代公式为:

数据准备:

1.随机产生了100个input_data,设定正确的参数a和b,然后按照我要拟合的公式a×np.exp(b×input_data)加上一些高斯噪声计算出了100个对应的output_data, 作为观察。

2.初始化参数a和b,使之不要与真实值太离谱

3.用LM算法对其优化拟合,画出拟合曲线和迭代误差曲线。

代码如下:

'''
#Implement LM algorithm only using basic python
#Author:Leo Ma
#For csmath2019 assignment4,ZheJiang University
#Date:2019.04.28
'''
import numpy as np
import matplotlib.pyplot as plt

#input data, whose shape is (num_data,1)
#data_input=np.array([[0.25, 0.5, 1, 1.5, 2, 3, 4, 6, 8]]).T
#data_output=np.array([[19.21, 18.15, 15.36, 14.10, 12.89, 9.32, 7.45, 5.24, 3.01]]).T


tao = 1e-3
threshold_stop = 1e-15
threshold_step = 1e-15
threshold_residual = 1e-15
residual_memory = []

#construct a user function
def my_Func(params,input_data):
    a = params[0,0]
    b = params[1,0]
    #c = params[2,0]
    #d = params[3,0]
    return a*np.exp(b*input_data)
    #return a*np.sin(b*input_data[:,0])+c*np.cos(d*input_data[:,1])

#generating the input_data and output_data,whose s
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值