当前位置:编程学习 > Matlab >>

求助matlab高手,用nlinfit曲线拟合时报错!??? Error using ==> mrdivide Matrix dimensions must agree.

函数原型为y=(b1-b2)/(1+e^((x-x0)/d))+b2 我的程序:b1,b2,x0,d 为四个待拟合参数 y=[-1.5000 -1.9000 -2.0000 -2.1000 -2.4000 -2.6000 -2.4000 -2.2000 -2.1000 -1.8000 -2.9000 -3.1000 -3.8000 -4.0000 -4.4000 -5.8000 -6.1000 -6.4000 -4.0000 -5.2000 -6.1000 -7.5000 -6.3000 -6.9000 -7.3000 -7.7000 -5.8000]; x=-32.1:30:747.9; >> myfunc=inline('beta(2)+(beta(1)-beta(2))/(1+exp((x-beta(3))/beta(4)))','beta','x'); beta=nlinfit(x,y,myfunc,[5 5 5 5]);
答案:x=x';y=y';
myfunc=inline('beta(2)+(beta(1)-beta(2))./(1+exp((x-beta(3))/beta(4)))','beta','x');
beta=nlinfit(x,y,myfunc,[5 1 5 5]);
beta

beta =

   -1.8795   -6.8170  377.0127   81.2053
其他:Error using == 我试了一下,好像是不能用inline函数来描述你要拟合的函数,你必须编一个函数M文件,因为inline函数建立的函数,如果myfunc([1 2 3 4],x),其中的x必须是一个标量,才能计算得到值。如果x是向量,myfunc([1 2 3 4],x)不能计算出每一个x(i)对应的值,而在nlinfit中必须要求函数能一次计算出一个向量x的每一个元素对应的函数值。所以不行,我的处理如下,y=(b1-b2)/(1+e^((x-x0)/d))+b2的函数M文件为:
function y=myfunc(beta,x)
y=beta(2)+(beta(1)-beta(2))./(1+exp((x-beta(3))./beta(4)));
end

然后就是beta=nlinfit(x,y,@myfunc,[5 5 5 5]);
可以计算出beta=[-1.8795   -6.8170  377.0128   81.2054]

hehe!

上一个:matlab要算一个除法 y=12.5*x-12.5*125^4/x^3 代码该怎么写???
下一个:matlab!!!!

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,