高斯牛顿法做非线性拟合.docx

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

159****1944 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档