Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-10-18, 15:27   #1
paultant
初级会员
 
注册日期: 2009-10-18
年龄: 36
帖子: 2
声望力: 0
paultant 正向着好的方向发展
默认 新手请教,函数拟合问题

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.
请教高手怎么解决?
paultant 当前离线   回复时引用此帖
旧 2009-10-18, 16:31   #2
slgu
高级会员
 
注册日期: 2007-06-24
年龄: 70
帖子: 188
声望力: 21
slgu 正向着好的方向发展
默认 回复: 新手请教,函数拟合问题

有几点注意:
1)lsqcurvefit (或nlinfit) 需提供合适的初值,用[0,0,0]作为初值不太合适;
2)对此组数据用此模型不太恰当,用y=x(1)+x(2)*xdata.^x(3)可能更加合适(当然也需提供合适的初值);
3)数据点太少了点,且第5个数据是否存在测定上的问题,看似偏小了点;
4)用lsqcurvefit (或nlinfit) 可反复多次进行(用循环实现)。
slgu 当前离线   回复时引用此帖
旧 2009-10-18, 16:56   #3
paultant
初级会员
 
注册日期: 2009-10-18
年龄: 36
帖子: 2
声望力: 0
paultant 正向着好的方向发展
默认 回复: 新手请教,函数拟合问题

感谢你的帮助,这个数据是我同学化学实验测得的,函数的形式一定是这样的,她跟我说3个系数表示阻力,一定是大于0,而且第一个数应该接近于0.我拟合出来偏差较大,而且第一个系数小于0了。
另外请教如何实现实现循环使用?我今天去图书馆找了,一般书都没有讲到非线性拟合这一块,不知如何实现?还有,奇怪的是我不断变换初值,结果竟一点也没有变化,以致我实在没有办法了...
paultant 当前离线   回复时引用此帖
旧 2009-10-18, 18:35   #4
slgu
高级会员
 
注册日期: 2007-06-24
年龄: 70
帖子: 188
声望力: 21
slgu 正向着好的方向发展
默认 回复: 新手请教,函数拟合问题

用模型:
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

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


你将其两者作图看看,拟合的效果差别是显而易见的。
slgu 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 17:19


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