matalab用lsqcurvefit拟合不出结果

函数functionf=expfn(x,xdate)f=x(1)+x(2)*exp(-(xdate-x(3))/x(4));程序xdate=[18.120.823.225... 函数

function f=expfn(x,xdate)
f=x(1)+x(2)*exp(-(xdate-x(3))/x(4));
程序

xdate=[18.1 20.8 23.2 25.6 28.4 30.4 32.9 35.7 37.9 41.1 44.2];
ydate=[1160 820 590 524 462 387 358 311 247 228 158];
plot(xdate,ydate);
x0=[100.0;2;-10;0.5];
[x,resnorm]=lsqcurvefit(@expfn,x0,xdate,ydate)
运行结果
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to

its initial value is less than the default value of the function tolerance.
<stopping criteria details>

x =

476.8182

2.0000
-10.0000
0.5000
resnorm =

8.6582e+05

哪位大神帮忙看看问题在哪?
x和初值x0后面的无论参数怎么变都是一样的
展开
 我来答
lhmhz
高粉答主

2013-09-08 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:17001

向TA提问 私信TA
展开全部

一、从散点图可以看到你的拟合函数有点问题(几乎是一条直线),应为x(1)+x(2)*exp(-xdate*x(3))比较合理。

二、初值选取x0=[400, 2300, 0.5],其拟合系数为x1=192.4, x2=11155.6, x3=0.1368。

三、散点图与拟合点图的比较,其拟合度是非常高的。

五味子芊
2013-09-06 · TA获得超过452个赞
知道小有建树答主
回答量:285
采纳率:100%
帮助的人:214万
展开全部
由于不同的初值有时会使函数陷入局部极小点而停止搜索,所以加上while用计算的方差进行判断,但这并不是一个好的方法。我在写这段的时候,程序已经运行了半个小时了,所以结果还没出来。

function f=zhidao97(x,xdate)
f=x(1)+x(2)*exp(-(xdate-x(3))/x(4));

xdate=[18.1 20.8 23.2 25.6 28.4 30.4 32.9 35.7 37.9 41.1 44.2];
ydate=[1160 820 590 524 462 387 358 311 247 228 158];
x0=[468.6277 10.1822 30.7198 2.9725];resnorm=11;
while(resnorm>10)
[x0,resnorm]=lsqcurvefit(@zhidao97,x0,xdate,ydate);
end
x0
resnorm
追问
resnorm返回值大于10.。肯定循环不止啊。。。
你再看看
谢谢啊!
追答
我又使用了别的软件进行了计算,
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判断标准
均方差(RMSE): 240.252620084726
残差平方和(SSE): 865819.821863636
可见拟合函数不满足数据分布的规律,应该选择其他的函数式。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式