高斯牛顿法做非线性拟合.docx
- 文档编号:1921260
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:2
- 大小:13.43KB
高斯牛顿法做非线性拟合.docx
《高斯牛顿法做非线性拟合.docx》由会员分享,可在线阅读,更多相关《高斯牛顿法做非线性拟合.docx(2页珍藏版)》请在冰点文库上搜索。
高斯牛顿法做非线性拟合
高斯牛顿算法程序,仅供参考。
clear;clc;
M=1000;
Te=20;
%模型
t=Te*(1:
M)';
loadnoise;%噪音可自己添加
Et1=0.4*exp(-t/50)+0.6*exp(-t/200);
Et2=0.4*exp(-(t/50).^2)+0.6*exp(-t/200);
Et3=0.3*exp(-t/50)+0.4*exp(-t/200)+0.3*exp(-t/800);
Et4=0.3*exp(-(t/50).^2)+0.4*exp(-t/200)+0.3*exp(-t/800);
Et=Et4+noise;
%%
%选择合适的初始值很重要
%p0=[0.5,10,0.5,100];
p0=[0.5,50,0.5,100,0.5,500]';
%迭代过程
fori=1:
M
[J,dF]=GNA(p0,t,Et);
p=p0+(J'*J)\J'*dF;
ifnorm(p-p0)/norm(p0)<1e-6
break;
end
p0=p;
end
disp(p);
fit=p
(1)*exp(-(t/p
(2)).^2)+p(3)*exp(-t/p(4))+p(5)*exp(-t/p(6));
plot(t,Et,t,fit)
xlabel('Measuredtime(\mus)');
ylabel('Amplitude');
title('ModelsVSFitting');
legend('Model','Fitting')
function[J,dE]=GNA(p,t,Et)
%计算Jacobi矩阵和拟合误差
%p为未知参数
p1=p
(1);
p2=p
(2);
p3=p(3);
p4=p(4);
p5=p(5);
p6=p(6);
f=p1*exp(-(t/p2).^2)+p3*exp(-t/p4)+p5*exp(-t/p6);%拟合函数表达式
fp1=exp(-t.^2/p2^2);
fp2=(2*p1*t.^2.*exp(-t.^2/p2^2))/p2^3;
fp3=exp(-t/p4);
fp4=(p3*t.*exp(-t/p4))/p4^2;
fp5=exp(-t/p6);
fp6=(p5*t.*exp(-t/p6))/p6^2;
J=[fp1,fp2,fp3,fp4,fp5,fp6];
dE=Et-f;
计算结果如下:
0.303048.88010.3971198.67670.3057791.1436
仅7次迭代就能出结果,结果精度高,速度非常快。
对比Matlab自带函数nlinfit和lsqcurvefit的计算结果:
Nlinfit:
0.303048.88010.3971198.67680.3057791.1437
Lsqcurvefit:
0.303048.87950.3970198.66150.3057791.1156
三者结果差别很小,计算结果都相当准确。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 牛顿 非线性 拟合