用阻滞模型求解人口预估问题,代码如下:
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));
运行结果很理想,得到了人口模型的拟合曲线,如下:
这个做好