y=[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438. 2737.71]
y=L/(1+a*exp(-k*x))
利用线性回归模型所得到的a和k的估计值和L=3000作为Logistic模型的拟合初值,对Logistic模型做非线性回归。
%第一步,线性回归模型得到a,k
%这里假定y=a*exp(k*x),对两边取ln(Matlab中,ln用log函数表示),有
%lny=lna+k*x
%即logy是x的线性函数,斜率为k*loge,截距为loga
x=0:1:12 ;
y=[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438. 2737.71] ;
line_A=polyfit(x,log(y),1);
k=line_A(1);
a=exp(line_A(2));
plot(x,y,'*',x,a*exp(k*x))
title('线性回归的参数曲线与已经点的关系')
%第二步,Logistic模型
%在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_liziqiangde(A,x)
%其中k=A(1),a=A(2)
k=A(1);
a=A(2);
L=3000;
y=L./(1+a*exp(-k*x));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%返回Matlab,输入
[ABC,res]=lsqcurvefit('zhidao_liziqiangde',[k,a],x,y);
kk=ABC(1)
aa=ABC(2)
y_logistic=zhidao_liziqiangde(ABC,x);
figure
plot(x,y,'*',x,y_logistic)
legend('实验数据点','Logistic模型')
==============================================================
总结以上
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_liziqiangde(A,x)
%其中k=A(1),a=A(2)
k=A(1);
a=A(2);
L=3000;
y=L./(1+a*exp(-k*x));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
返回Matlab下输入
x=0:1:12 ;
y=[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438. 2737.71] ;
line_A=polyfit(x,log(y),1);
k=line_A(1);
a=exp(line_A(2));
plot(x,y,'*',x,a*exp(k*x))
title('线性回归的参数曲线与已经点的关系')
[ABC,res]=lsqcurvefit('zhidao_liziqiangde',[k,a],x,y);
kk=ABC(1)
aa=ABC(2)
y_logistic=zhidao_liziqiangde(ABC,x);
figure
plot(x,y,'*',x,y_logistic)
legend('实验数据点','Logistic模型')