永发信息网

以下数据请帮忙用逻辑斯蒂拟合,需要MATLAB的代码。验证后给分。

答案:2  悬赏:20  手机版
解决时间 2021-04-04 18:00
  • 提问者网友:山高云阔
  • 2021-04-03 22:55
数据如下:
x=[1900:10:1990]';
y=[76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4]';

我仿照别人的拟合方式写了如下代码:
function logistic
tdata=[1900:10:1990]';
cdata=[76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4]';
x0=[75;0.0033];
x=lsqcurvefit(@curvefun1,x0,tdata,cdata);
f=curvefun1(x,tdata);
plot(tdata,cdata,'r+',tdata,f);
function f = curvefun1(x,t)
y0=76;
f=x(1)./(1+(x(1)/y0-1)*exp(-t*x(2))); %其中x(1)=Xm;x(2)=r
但是拟合效果很差。其中x0对曲线的形状影响很大,请问x0应该怎么定。
命令窗口出现如下提示:
Local minimum found.

Optimization completed because the size of the gradient is less than
the default value of the function tolerance.


请问具体怎么改可以把拟合曲线改好。
搞定再加分!!!
最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-04-03 23:52
你这个本来不合适用logistic
你自己画图看看:
x=[1900:10:1990]';
y=[76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4]';
plot(x,y)
这个用logistic还不如用直线拟合
全部回答
  • 1楼网友:忘川信使
  • 2021-04-04 00:16
这样,在一个程序里: function hh tdata=[1 2 3 4 5 6 7 8 9 10 11 12]; cdata=[3.1 3.6 4.2 4.8 6.7 9.1 13 18.9 29 51.1 78.2 113]; x0=[300,0.6]; x=lsqcurvefit(@curvefun1,x0,tdata,cdata) f=curvefun1(x,tdata) plot(tdata,cdata,'o',tdata,f) function f = curvefun1(x,t) a=3.1 f=x(1)./(1+(x(1)/a-1)*exp(-t*x(2))) %其中x(1)=xm;x(2)=r 如果分开: function f = curvefun1(x,t) a=3.1 f=x(1)./(1+(x(1)/a-1)*exp(-t*x(2))) %其中x(1)=xm;x(2)=r 主程序: tdata=[1 2 3 4 5 6 7 8 9 10 11 12]; cdata=[3.1 3.6 4.2 4.8 6.7 9.1 13 18.9 29 51.1 78.2 113]; x0=[300,0.6]; x=lsqcurvefit('curvefun1',x0,tdata,cdata) f=curvefun1(x,tdata) plot(tdata,cdata,'o',tdata,f)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯