人口预测模型1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
121121 122389 123626 124761 125786 126743 127627 128453 129227 129988 130756 131448 132129 132802 133450 134091
净
增 长
0.3590
0.3585
0.3333
0.3438
0.3256
0.3567
0.3534
0.2293
率
年 1870 1880 1890 1900 1910 1920 1930 1940 份
人 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 数
净 增
0.3005
(2)用所有数据预测
>> x=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76]; t=1:12; fun=inline('c(1)*exp(c(2)*t)','c','t'); c=lsqcurvefit(fun,[1,1],t,x); xx= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,204,226.5,251.4,281.4]; tt=1:22; px=c(1)*exp(c(2)*tt); px23=c(1)*exp(c(2)*23)
已知环境能容纳的最大人口数为,人口净增长率随人口数 量的增加而线性减少,即 设t时刻时人口数为x(t),由此建立为微分方程:
求解得
待求参数. 举例说明:
下面是美国近两个世纪的人口统计数据(百万),试建立 数学模型,预测2010年美国的人口数。 年 1790 1800 1810 1820 1830 1840 1850 1860 份
plot(t,xx,'*',t,py) %(见图三)
(2)用所有数据预测
x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,204,226.5,251.4,281.4]'; n=22;
17245 18495 19140 20171 21480 22274 24017 25094 26366 27674 28661 29540 30195 31203 32175 33173 34169
17.92 18.96 19.39 20.16 21.13 21.62 23.01 23.71 24.52 25.32 25.81 26.21 26.41 26.94 27.46 27.99 28.51
MATLAB程序:
(1)用前12个数据预测
x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,204,226.5,251.4,281.4]'; n=12;
t=1:n; xx=x(1:n); tt=[ones(n,1),(1:n)']; y=log(xx(1:n)); [b,bint,r,rint,stats]=regress(y,tt); x0=exp(b(1)); r=b(2); py=x0*exp(r*t);
0.2530
0.2083
0.2105
0.1576
0.1568
0.0690
0.144
长
率
年 1950 1960 1970 1980 1990 2000 份
人 150.7 179.3 204.0 226.5 251.4 281.4 数
净 0.1898 增 长 率
0.1378
0.1103
0.1099
0.1193
人 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 数
年 1870 1880 1890 1900 1910 1920 1930 1940 份
人 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7
数
年 1950 1960 1970 1980 1990 2000 2010 份
散点图Matlab程序:
x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7 t=1:22; plot(t,x,'*')% scatter(t,x)
图形走势很像指数模型,所以我们先选择指数模型,即 Malthus 模型.
人口预测模型
想要预测未来某一年的人口数量,我们要建立人口增长模 型,人口增长模型常见的有以下几种: 1)马尔萨斯(Malthus)模型——指数模型
已知单位时间内人口增长率为r。 设t时刻时人口数为x(t),则时间内增长的人口数为:
当时,得微分方程 求解得
待求参数. 2) 罗杰斯特(Logistic)模型-阻滞型人口模型
46692 47350 47920 48553 49302 49856 50509 51126 51926 53010 53825 54605 55429 56357 57360 58045 58604
48.51 48.54 48.55 48.52 48.50 48.40 48.40 48.30 48.30 48.50 48.48 48.45 48.48 48.66 48.95 48.98 48.90
49567 50192 50785 51519 52352 53152 53848 54725 55581 56290 57201 58099 58904 59466 59811 60472 61246
Hale Waihona Puke Baidu
51.49 51.46 51.45 51.48 51.50 51.60 51.60 51.70 51.70 51.50 51.52 51.55 51.52 51.34 51.05 51.02 51.10
516.7091
图三
图四
观察两种方法所的图像,前期数据比较吻合,但到后期就差距比较大 了,所以这个模型不能比较准确的预测人口数,那是为什么呢?我们来 找原因.
年 1790 1800 1810 1820 1830 1840 1850 1860 份
人 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 数
Matlab程序: (1)用前12个数据预测
xx=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,]; tt=1:12; fun=inline('c(1)*exp(c(2)*tt)','c','tt'); c=lsqcurvefit(fun,[1,1],tt,xx); px=c(1)*exp(c(2)*tt); plot(tt,xx,'*',tt,px) %(见图一)
回归函数的M文件,是回归系数beta和想的函数,beta0是回归系数的 初始值,beta是估计出的回归系数,R为残差,J为Jacobain矩阵。
M文件
【function yhat=logisfun(beta,t)
yhat=beta(3)./(1+(beta(3)./beta(1)-1)*exp(-beta(2)*t));】 x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150. n=length(x); t=(1:n)'; beta0=[3.9,0.2298,500]; % beta0是x0,r0,xm的预测值,x0去第一年的人口数,r0 的计算见后面程序,xm的预测待定?!
p23 = 298.1139
图六 r0的计算程序: 方法一: x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,2 n=length(x); r=ones(n-1,1); for i=1:n-1 r(i,1)=(x(i+1,1)-x(i,1))./x(i,1); end r0=mean(r) r0 =
人 150.7 179.3 204.0 226.5 251.4 281.4 ? 数
一 建模分析
目标:寻找人口数量随时间变化的规律,即函数关系式. 人口
的变化规律有其内在的规律,如Malthus 模型, Logistic 模型.
题目中给的数据有什么作用呢?用这些数据做散点图,观 察散点图分布规律,确定人口模型.
二 建立模型
Malthus 模型: 要预测,得确定参数.
方法一:(最小二乘法非线性拟合)
C = lsqcurvefit(fun,x0,xdata,ydata,...)
fun是需要拟合的函数; x0是对函数中各参数的猜想值;xdata 则是横 轴坐标的值;ydata 是纵轴的值;C为fun中待预测的系数。
计算净增长率:
x=
[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,2 n=length(x);
r=ones(n-1,1);
for i=1:n-1 r(i,1)=(x(i+1,1)-x(i,1))./x(i,1);
plot(tt,xx,'*',tt,px) %(见图二)
px23 =
1.1675e+003
图一
图二
方法二:(线性回归分析法)
确定一元线性回归分析系数的函数:
[b,bint,r,rint,stats]=regress(y,x);
注:b为待预测的回归系数,bint是回归系数的区间估计,r是残差,rint是置信区间,stats是 用于检验回归模型的统计量,有四个数值:相关系数r^2(越接近1,说明回归方程越显著),F 值,与F对应的概率P和误差方估计,P<0.05时回归模型成立。
r0 =
0.2298
1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994
96259 97542 98705 100072 101654 103008 104357 105851 107507 109300 111026 112704 114333 115823 117171 118517 119850
end
t=1:n-1; plot(t,r,’*’) %(见图五)
图五
发现净增长率并不是常数!而是随人口数量的增加而线性减少。
三 建立新的预测模型
Logistic模型
要用非线性回归分析的方法确定参数. 确定非线性回归分析系数的函数:
[beta,R,J]=nlinfit(x,y,'logisfun',beta0) 注:x是自变量,y是函数值,'logisfun' 为事先定义的非线性
[beta,R,J]=nlinfit(t,x,'logisfun',beta0); pt=beta(3)./(1+(beta(3)./beta(1)-1)*exp(-beta(2)*t)); p23=beta(3)./(1+(beta(3)./beta(1)-1)*exp(-beta(2)*23)) plot(t,x,'*',t,pt) %(见图六)
0.2298
方法二: x= [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,20 n=length(x); t=1:n; r0=mean((diff(x)./diff(t))./x(1:n-1))
t=1:n; xx=x(1:n); tt=[ones(n,1),(1:n)']; y=log(xx(1:n)); [b,bint,r,rint,stats]=regress(y,tt); x0=exp(b(1)); r=b(2); py=x0*exp(r*t); py23=x0*exp(r*23)
plot(t,xx,'*',t,py) %(见图四) py23 =