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.
请大神帮忙解答一下~ 展开
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.
请大神帮忙解答一下~ 展开
1个回答
展开全部
主要错误:
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.--')
拟合结果与初值关系很大,我选择的这组初值也不算太理想,只能说是差强人意。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询