数学建模:人口增长模型

模型目标:
通过给定的一组人口增长数据,预测后续的人口增长情况.

一、指数增长模型

假设增长率不变:

若已知人口年增长率为r,今年人口为 python人口预测模型指数增长模型 人口增长的指数模型_数据,预测k年后的人口可以用简单的公式得到:

python人口预测模型指数增长模型 人口增长的指数模型_拟合_02

*以美国人口为例,数据点取下表:

python人口预测模型指数增长模型 人口增长的指数模型_算法_03


用matlab输入好数据:

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7	122.8 131.7 150.7 179.3	203.2 226.5	248.7 281.4];

该公式得到的人口增长模型如下图(matlab作图):

python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_04


选取的增长率0.2与实际的人口数据点贴合度差,于是进一步建立模型,找到偏差更小的增长率r

精确化增长率r

把人口看作关于时间的可微函数 python人口预测模型指数增长模型 人口增长的指数模型_matlab_05,记 python人口预测模型指数增长模型 人口增长的指数模型_拟合_06
python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_07 即为单位时间 python人口预测模型指数增长模型 人口增长的指数模型_matlab_05 的增长量
所以得到微分方程:
python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_09
解得:
python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_10
上述公式即位指数增长模型

数据拟合:

接下来对指数增长模型的参数进行估计,即数据拟合

·法一

用人口数据和线性最小二乘法,对上式取对数:
python人口预测模型指数增长模型 人口增长的指数模型_拟合_11
用matlab进行编程拟合:

%取1790年为t=0,数据点取到2000年
t=0:10:210;
lnp = log(p);
cftools

python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_12


解得:

python人口预测模型指数增长模型 人口增长的指数模型_算法_13

带入得python人口预测模型指数增长模型 人口增长的指数模型_matlab_14

python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_15


·法2

对人口数据做数值微分,计算平均值r‘,x0直接选用原始数据.

函数在各点的近似导数值为(数值微分中点公式):

python人口预测模型指数增长模型 人口增长的指数模型_算法_16

python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_17

那么增长率为: python人口预测模型指数增长模型 人口增长的指数模型_拟合_18

*公式相关推导可参考数值计算方法 第六章 数值积分和数值微分

增长率 python人口预测模型指数增长模型 人口增长的指数模型_算法_19再取平均值得到r = 0.0205

python人口预测模型指数增长模型 人口增长的指数模型_matlab_20

改进的指数增长模型

上述模型对于增长率r不变的假设导致预测曲线与实际偏差较大
所以改进模型中假设 rt 的函数 python人口预测模型指数增长模型 人口增长的指数模型_拟合_21 , 根据上述法2的 python人口预测模型指数增长模型 人口增长的指数模型_python人口预测模型指数增长模型_22

r=[];
for i=1:22
    if i == 1
        r(i)=(4*p(i+1)-3*p(i)-p(i+2))/(20*p(i));
    elseif i == 22
        r(i)=(-4*p(i-1)+3*p(i)+p(i-2))/(20*p(i));
    else
        r(i)=(p(i+1)-p(i-1))/(20*p(i));
    end
end
plot(t,r,'.','MarkerSize',20);
ylim ([0.005,0.04]);
xlabel('t');
ylabel('增长率r');

python人口预测模型指数增长模型 人口增长的指数模型_matlab_23


根据散点图假设python人口预测模型指数增长模型 人口增长的指数模型_拟合_24的线性函数,用最小二乘法线性拟合得到:

python人口预测模型指数增长模型 人口增长的指数模型_拟合_25


python人口预测模型指数增长模型 人口增长的指数模型_matlab_26

根据微分方程:

python人口预测模型指数增长模型 人口增长的指数模型_数据_27

python人口预测模型指数增长模型 人口增长的指数模型_拟合_28

把拟合后的参数带入:

xt2 = 3.9.*exp(0.03252.*t-0.0001143.*t.^2./2);
plot(t,xt2,'LineWidth',1);

python人口预测模型指数增长模型 人口增长的指数模型_数据_29


最终根据改进模型预测的2010年人口为290million,与实际数据281.4吻合度较高.显然改进后的模型优于前两者.

二、logistic模型

改进的指数增长模型中增长率线性下降,但没有体现其下降的相关影响因素,只是以时间为变量.logistic模型考虑了自然资源,环境等对人口增长的阻滞作用.

未完…