一、LM算法伪代码
二、Matlab代码实现
clear all
%x=[1,1.5,2.3,3.1,5.3,6.2,7];
% y=[3.03,2.36,1.58,1.06,0.35,0.23,0.15];
% y=5*exp(-0.5.*x);
%%%%%%%原始数据%%%%%%%%%
x_origin=[1,1.5,2.3,3.1,5.3,6.2,7];
y_origin=[3.03,2.36,1.58,1.06,0.35,0.23,0.15];
k_max=150;%最大迭代次数
E=[1,0;0,1];%单位矩阵
v=0.001;%阻尼系数
a_0=0.01;%初始迭代系数
b_0=0.01;
a_it=a_0;%为迭代系数赋值
b_it=b_0;
[m,n]=size(y_origin);%维度
J=zeros(n,2);%构造雅可比矩阵
for k=1:k_max
%%%%%%%%计算雅可比矩阵%%%%%%%%
for i=1:n
J(i,1)=exp(b_it*x_origin(i));
J(i,2)=a_it*x_origin(i)*exp(b_it*x_origin(i));
end
%计算第一次计算结果
y_res=a_it*exp(b_it.*x_origin);
d=y_origin-y_res;%计算第一次迭代误差
A=J'*J;%Hessian矩阵
if(k==1)
e=dot(d,d);
end
step=inv(A+v*E)*