以下数据请帮忙用逻辑斯蒂拟合,需要MATLAB的代码。验证后给分。
解决时间 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)
我要举报
大家都在看
推荐资讯