nlinfit matlab函数,求解
x=[0.560.570.580.590.600.610.620.630.64];y=[0.0700.1020.1370.1890.2470.4150.6750.9861...
x=[0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64];
y=[0.070 0.102 0.137 0.189 0.247 0.415 0.675 0.986 1.532];
myfunc=inline('beta(1)*(1-x*beta(2)).^(-beta(3))','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
a=beta(1),k1=beta(2),k2=beta(3)
yy=a*(1-x*k1).^k2;
plot(x,y,'o',x,yy,'r') 展开
y=[0.070 0.102 0.137 0.189 0.247 0.415 0.675 0.986 1.532];
myfunc=inline('beta(1)*(1-x*beta(2)).^(-beta(3))','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
a=beta(1),k1=beta(2),k2=beta(3)
yy=a*(1-x*k1).^k2;
plot(x,y,'o',x,yy,'r') 展开
1个回答
2014-04-22
展开全部
1、你的程序让人很难理解的是,前面的拟合函数与拟合后用于计算的函数不一样——指数相差一个负号。其实比较好的习惯是,计算时也直接用拟合函数,而不是另外再写表达式。
2、初值选择不好。拟合问题很多情况下都与初值有关,应该慎重选择。
改后的代码如下,供参考:
x=[0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64];
y=[0.070 0.102 0.137 0.189 0.247 0.415 0.675 0.986 1.532];
myfunc=inline('beta(1)*(1-x*beta(2)).^(-beta(3))','beta','x');
beta=nlinfit(x,y,myfunc,[1 1 2]);
a=beta(1),k1=beta(2),k2=beta(3)
yy=myfunc(beta,x);
plot(x,y,'o',x,yy,'r')
从结果看,拟合效果还不错(有警告信息,可忽略)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询