数学建模·Logistic模型·从人口预估到平均工资阻滞模型·代码移植故障

用阻滞模型求解人口预估问题,代码如下:

x=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,...
106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4,309.35]';
n=length(x);
y=x(1:n);%1790 年到 2010 年数据
t=(1:n)';
beta0=[5.3,0.22,400,]; %[x0,r,xm]
[beta,R,J]=nlinfit(t,y,'logisfun',beta0);
%R 为残差,beta 为待求参数
py=beta(3)./(1+(beta(3)/beta(1)-1)*exp(-beta(2)*t));%预测各年人口
p24=beta(3)./(1+(beta(3)/beta(1)-1)*exp(-beta(2)*24));%预测 2020 年人口
rmse=sqrt(sum(R.^2)/n); %均方误差根
plot(1:n,y,'*',1:n,py); %作对比图

 

%logisfun.m

function yhat=logisfun(beta,x)
yhat=beta(3)./(1+(beta(3)./beta(1)-1).*exp(-beta(2)*x));

 

运行结果很理想,得到了人口模型的拟合曲线,如下:

数学建模·Logistic模型·从人口预估到平均工资阻滞模型·代码移植故障_第1张图片

 

 

这个做好了之后想把该模型移植用于预测某省未来40年的平均工资,代码如下:

x=[0.0566,0.0632,0.0745,0.0755,0.0769,0.0789,0.0985,0.1110,0.1313,0.1428,0.1782,0.1920,0.2150,0.2292,0.2601,0.3149,0.4338,0.5145,0.5809....
    0.6241,0.6854,0.7656,0.8772,1.0007,1.1374,1.2567,1.4332,1.6614,1.9228,2.2844,2.6404,2.9688,3.2074]';        %我在这个地方把人口数据换成工资的数据,单位:万元
n=length(x);
y=x(1:n);%1790 年到 2010 年数据
t=(1:n)';
beta0=[550,0.13,120000,]; %[x0,r,xm]              这个地方换成了工资的x0,r,xm
[beta,R,J]=nlinfit(t,y,'logisfun',beta0);         %然后这里就报错了,警告: 秩不足,秩 = 2,tol =  2.178890e-12
%R 为残差,beta 为待求参数
py=beta(3)./(1+(beta(3)/beta(1)-1)*exp(-beta(2)*t));
p24=beta(3)./(1+(beta(3)/beta(1)-1)*exp(-beta(2)*24));
rmse=sqrt(sum(R.^2)/n); %均方误差根
plot(1:n,y,'*',1:n,py); %作对比图

 

%logisfun.m

function yhat=logisfun(beta,x)
yhat=beta(3)./(1+(beta(3)./beta(1)-1).*exp(-beta(2)*x));

 

运行结果不是很理想,出现了报错:警告: 秩不足,秩 = 2,tol =  2.178890e-12,理由不清楚,不知道是不是函数调用的格式有问题?运行结果如图:

数学建模·Logistic模型·从人口预估到平均工资阻滞模型·代码移植故障_第2张图片

数学建模·Logistic模型·从人口预估到平均工资阻滞模型·代码移植故障_第3张图片

 

不知道要怎么查问题,很懵。。。。。。

你可能感兴趣的:(matlab,数学建模)