matlab nlinfit中的拟合问题

x=[5101520253035404550556065707580859095100105]y=[143343600400000000000000]拟合如图所示函数,除... x=[5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105]
y=[14 33 43 6 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

拟合如图所示函数,除x,p(x)外都为参数,请问用nlinfit怎么拟合
myfunc=inline('beta(4)/beta(3)*e^(-x/beta(3))+(1-beta(4))/sqrt(2*pi*beta(2))*e^(-(x-beta(1)^2)/(2*beta(2)^2))','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
我写的是这样,但是提示错误
??? Error using ==> nlinfit at 113
Error evaluating inline model function.

Caused by:
Error using ==> inlineeval at 15
Error in inline expression ==>
beta(4)/beta(3)*e^(-x/beta(3))+(1-beta(4))/sqrt(2*pi*beta(2))*e^(-(x-beta(1)^2)/(2*beta(2)^2))
Index exceeds matrix dimensions.
请大神帮忙解答一下~
展开
 我来答
tianxiawulang
2014-05-10 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2654万
展开全部

主要错误:

 

1、拟合参数的初值不对,有4个参数,却只提供了3个初值。而且,初值也不宜选为0,因为有部分参数在分母中,初值为0会导致第一步计算就出现inf或NaN,算法无法启动。

 

2、指数函数为exp,不能写成e^x。

 

3、高斯函数写错了,指数的分子-(x-beta(1)^2) 应为 -(x-beta(1)).^2

 

参考代码:

x=[5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105];
y=[14 33 43 6 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
myfunc=inline('beta(4)/beta(3)*exp(-x/beta(3))+(1-beta(4))/sqrt(2*pi*beta(2))*exp(-(x-beta(1)).^2/(2*beta(2)^2))','beta','x');
beta=nlinfit(x,y,myfunc,[15 1 1 1])
plot(x,y','o',x,myfunc(beta,x),'r.--')

拟合结果与初值关系很大,我选择的这组初值也不算太理想,只能说是差强人意。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式