MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [MATLAB数学相关] 新手请教,函数拟合问题 (https://www.labfans.com/bbs/showthread.php?t=9919)

paultant 2009-10-18 15:27

新手请教,函数拟合问题
 
M 文件:function y=myfun(x,xdata)
y=x(1)+x(2)./xdata+x(3).*xdata;
然后在命令窗口输入:
xdata=[3.220 4.896 6.326 7.763 9.227 10.38];
ydata=[0.00179 0.00176 0.00192 0.00228 0.00247 0.0063];
x0=[0 0 0];
[x,resnorm]=lsqcurvefit(@myfun,x0,xdata,ydata)

结果出现:
Optimization terminated: first-order optimality less than OPTIONS.TolFun,
and no negative/zero curvature detected in trust region model.
请教高手怎么解决?

slgu 2009-10-18 16:31

回复: 新手请教,函数拟合问题
 
有几点注意:
1)lsqcurvefit (或nlinfit) 需提供合适的初值,用[0,0,0]作为初值不太合适;
2)对此组数据用此模型不太恰当,用y=x(1)+x(2)*xdata.^x(3)可能更加合适(当然也需提供合适的初值);
3)数据点太少了点,且第5个数据是否存在测定上的问题,看似偏小了点;
4)用lsqcurvefit (或nlinfit) 可反复多次进行(用循环实现)。

paultant 2009-10-18 16:56

回复: 新手请教,函数拟合问题
 
感谢你的帮助,这个数据是我同学化学实验测得的,函数的形式一定是这样的,她跟我说3个系数表示阻力,一定是大于0,而且第一个数应该接近于0.我拟合出来偏差较大,而且第一个系数小于0了。
另外请教如何实现实现循环使用?我今天去图书馆找了,一般书都没有讲到非线性拟合这一块,不知如何实现?还有,奇怪的是我不断变换初值,结果竟一点也没有变化,以致我实在没有办法了...

slgu 2009-10-18 18:35

回复: 新手请教,函数拟合问题
 
用模型:
y=x(1)+x(2)./xdata+x(3)*xdata;
拟合,得到的有关参数如下:
x=[-0.0109689299822, 0.0286004630521, 0.00128072224121];
RSS(残差平方和)=0.000004326884942
R^2(决定系数)=0.72071

但若用模型:
y=x(1)+x(2)*xdata.^x(3);
拟合,得到的有关参数如下:
x=[0.00191938250542, 2.52653911648*10^(-20), 16.9638928812];
RSS(残差平方和)=0.0000001522266213
R^2(决定系数)=0.99017

以上拟合,可以以我的结果作为初值(当然也是全局最优结果)。


你将其两者作图看看,拟合的效果差别是显而易见的。


所有时间均为北京时间。现在的时间是 12:11

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.