我有98个数据,存放在data1.txt中,这是纵轴值。横轴表示时间。我想用这些数据拟合出Logistic曲线并进行预测,我是这样想的,先用三点法计算出拟合参数的估值,然后把这估值作初值用nlinfit或lsqcurvefit拟合。
logistic曲线的模型:y=L/(1+a*exp(-1*b*x))
下面是我的代码,很简单:
% Logstic预测沉降模型
clear;
clc;
y0=load('data1.txt');% 载入原始数据
n=length(y0);
y1=1./y0;
m=54;
r=m/3;
S1=sum(y1(1:r));
S2=sum(y1(r+1:2*r));
S3=sum(y1(2*r+1:3*r));
b=log((S1-S2)/(S2-S3))/r;
L=r/(S1-(S1-S2)^2/(S1-2*S2+S3));
a=(S1-S2)^2*(1-exp(-1*b))*L/((S1-2*S2+S3)*exp(-1*b)*(1-exp(-1*r*b)));
for i=1:m
t(i)=i;
end
fun=inline('c(1)/(1+c(2)*exp((-1)*c(3)*x))','c','x');
c0=[L,a,b];
y2=y0(1:m)';
%[c renmon]=lsqcurvefit(fun,c0,t,y2);
[c renmon]=nlinfit(t,y2,fun,c0);
for i=1:n
y3(i)=c(1)/(1+c(2)*exp(-1*c(3)*i);
end
plot(t,y0(1:l),t,y2');
但是不对,总是报错,具体如下
1.用nlinfit错误如下:
??? Error using ==> nlinfit
The inline model function generated the following error:
Error using ==> inlineeval
Error in inline expression ==> c(1)/(1+c(2)*exp((-1)*c(3)*x))
??? Error using ==> mrdivide
Matrix dimensions must agree.
Error in ==> Logistic2 at 26
[c renmon]=nlinfit(t,y2,fun,c0);
说是矩阵维数不匹配!
2.用lsqcurvefit错误如下:
??? Error using ==> optim\private\lsqncommon
User supplied expression or inline function ==> c(1)/(1+c(2)*exp((-1)*c(3)*x))
failed with the following error:
Error using ==> inlineeval
Error in inline expression ==> c(1)/(1+c(2)*exp((-1)*c(3)*x))
??? Error using ==> mrdivide
Matrix dimensions must agree.
Error in ==> lsqcurvefit at 149
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in ==> Logistic2 at 25
[c renmon]=lsqcurvefit(fun,c0,t,y2);
好像除了维数不对,lsqcurvefit函数输出参数数也不对,⊙﹏⊙汗。可是我是参照别人的代码写的啊。我把模型函数重新建了个m文件也不行。我是用的7.0的版本
这是什么问题?谁能帮我解决呢?不胜感激!我是新手,还没有m币,所以大家见谅啊