最小二乘法拟合的问题。

用MATLAB软件进行计算.
1)编写函数M-文件 nongdu.m
function f = nongdu(x,tdata)
f = x(1)+x(2)*exp(-0.02*x(3)*tdata);
其中 x(1) = a;x(2) = b;x(3) = k;
2) 在工作空间中执行以下命令(test1.m)
tdata = linspace(100,1000,10);
cdata =[4.54 4.99 5.35 5.65 5.90 6.10 ...
6.26 6.39 6.50 6.59];
x0 = [0.2,0.05,0.05];
x=lsqcurvefit (‘nongdu’,x0,tdata,cdata)
3) 输出结果: x = 0.007 -0.003 0.1012
即 k = 0.1012, a = 0.007, b = -0.003,
为啥我得到的结果是:x = -85.9771 90.3988 -0.0014
并提示
Solver stopped prematurely.
lsqcurvefit stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 300 (the default value).
该如何解决?谢谢

 Risposta accettata

neviw
neviw il 19 Nov 2022

0 voti

首先,这个初值我测试过是可行的;
其次,需要提醒你一下,根据你的拟合函数以及数据,来看你给出的输出结果应该是错的。很容易发现,当t趋于无穷时,f=x(1),换句话说,x(1)>6.59,而你的输出结果显示x(1)=0.007,感觉应该是你的单位有问题;
最后,要改次数的话可以按如下方式:
lb=[0 -10 -10];%x的下限
ub=[10 0 10];%x的上限
options=optimset('MaxFunEval',1e3);%设置MaxFunEval的值,这里设为1000
x=lsqcurvefit ('nongdu',x0,tdata,cdata,lb,ub,options)

Più risposte (0)

Categorie

Scopri di più su 数学 in Centro assistenza e File Exchange

Tag

Richiesto:

il 19 Nov 2022

Risposto:

il 19 Nov 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!