- 1、本文档共2页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
高斯牛顿法做非线性拟合
高斯牛顿算法程序,仅供参考。
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
三者结果差别很小,计算结果都相当准确。
文档评论(0)