文章目录

  • 运行软件:MATLAB R2012a
  • 实验数据
  • 指数增长模型
    • 指数增长模型:方法一
      • 对2010年的人口预测
    • 指数增长模型:方法二
      • 对2010年人口预测
  • 改进的指数增长模型
    • 对2010人口预测
  • 逻辑斯蒂(logistic)模型
    • 逻辑斯蒂(logistic)模型:方法一
      • 对2010预测
    • 逻辑斯蒂(logistic)模型:方法二
      • 对2010预测

运行软件:MATLAB R2012a

实验数据

年份 1790 1800 1810 1820 1830 1840 1850 1860
人口/百万 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4
增长率/10年 0.2949 0.3113 0.2986 0.2969 0.2907 0.3012 0.3082 0.2452
年份 1870 1880 1890 1900 1910 1920 1930 1940
人口/百万 38.6 50.2 62.9 76.0 92.0 105.7 122.8 131.7
增长率/10年 0.2435 0.2420 0.2051 0.1914 0.1614 0.1457 0.1059 0.1059
年份 1950 1960 1970 1980 1990 2000 2010
人口/百万 150.7 179.3 203.2 226.5 248.7 281.4 308.7
增长率/10年 0.1579 0.1464 0.1161 0.1004 0.1104 0.1349

指数增长模型

满足人口增长的微分方程和初始条件为:

利用函数dsolve()可得:

指数增长模型:方法一

根据已知数据对模型的参数进行估计又称为数据拟合。
对下面的这个公式同时取对数

可得

t:代表年份1970取0,依次类推
x:人口数量,实验数据已知
根据求出的公式可以求出y;然后利用polyfit()函数求出r,a的值;当a求出来时,根据上面求出的公式,可以求出x0;将r,x0带入公式
可求出指数增长模型方法一的x值

代码如下:
使用的是matlb函数

function [ x1 ] = method_1( x )
%方法一:直接用人口数据和线性最小二乘法
% 利用函数polyfit(),dsolve()求解,r年增长率,返回x1模型的估计值y=log(x);t=0:1:21;p=polyfit(t,y,1);r=p(1);a=p(2);x0=exp(a);s=dsolve('Dx=r*x','x(0)=x0','t');x1=eval(s);x1=x1';
end

运行代码:

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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
m=1790:10:2000;
m=m';
m(:,2)=x';
m(:,3)=method_1(x);

运行界面:

运行结果:第一列代表年份;第二列代表实际人口;第三列为指数增长模型:方法一的预估值

对2010年的人口预测

根据上面算出的结果,可以得到:r=0.2020 x0=6.0496
直接利用算出来的参数计算2020年的结果(t=22)
运行代码:

>> 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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
>>  y=log(x);t=0:1:21;p=polyfit(t,y,1);r=p(1);a=p(2);x0=exp(a);%若要预测2010年的人口对t进行更改t=0:1:22;s=dsolve('Dx=r*x','x(0)=x0','t');
>> t=22;
>> eval(s)

运行结果:

指数增长模型:方法二

先对人口数据进行数值微分,再计算增长率并将其平均值作为 的估计; 直接取原始数据。
公式:

先求rk,再求出r,再根据公式
求出模型的预估值
代码如下:
我是以函数文件运行:

function [ x2 ] = method_2( x )
%方法二:先对人口数据作数值微分,再计算增长率并将其平均值作为r的估计;x0直接采用原数据n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
r=sum(rk)/n;
x2=zeros(n,1);
x2(1)=x(1);
for i=1:n
x2(i)=x2(1)*exp(r*t(i));
endend

运行代码

  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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
m=1790:10:2000;
m=m';
m(:,2)=x';
m(:,3)=method_1(x);m(:,4)=method_2(x);

运行界面:

运行结果:第一列代表年份;第二列代表实际人口;第三列为指数增长模型:方法一的预估值;第四列为指数增长模型:方法二的预估值

对2010年人口预测

已经求得r与x0代码:

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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
r=sum(rk)/n;
x2=zeros(n,1);
x2(1)=x(1);
>> t=22;
>> x2(1)*exp(r*t)

运行结果:

改进的指数增长模型

指数增长模型进行改进。改进为:
假设:


利用dsolve()函数可得:

已知t值,根据上面我们已经求过了rk,所以rk也是已知的,然后利用最小二乘法polyfit()函数计算出
中的r0和r1,x0=3.9,利用eval()函数求出结果
运行代码:
函数:

function [ x3 ] =method_3( x )
%方法三:改进的指数增长模型
%   Detailed explanation goes here
n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
p=polyfit(t,rk,1);
r0=p(2);
r1=-p(1);
s=dsolve('Dx=(r0-r1*t)*x','x(0)=x0','t');
x0=3.9;
x3=zeros(n,1);
x3=eval(s);
x3=x3';
end

运行代码:

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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
m=1790:10:2000;
m=m';
m(:,2)=x';
m(:,3)=method_1(x);
m(:,4)=method_2(x);m(:,5)=method_3(x);

运行界面:

运行结果:第一列代表年份;第二列代表实际人口;第三列为指数增长模型:方法一的预估值;第四列为指数增长模型:方法二的预估值;第五列改进指数模型的预估值

对2010人口预测

>> 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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
>> n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
p=polyfit(t,rk,1);
r0=p(2);
r1=-p(1);
s=dsolve('Dx=(r0-r1*t)*x','x(0)=x0','t');
x0=3.9;
>> t=22;
>> eval(s)

运行结果:

逻辑斯蒂(logistic)模型

xm:表示人口容量
有了人口容量的限制,当人口数量增加时,增长率r减小,用
表示。

  1. 当x=0时,r(0)=r,则a=r
  2. 当x=xm时,此时人口不再增长,增长率r=0,于是:b=-r/x0

逻辑斯蒂(logistic)模型:方法一

开勇函数dsolve()求解可得


代码如下:函数

function [ x4 ] = logistic_1( x )
%逻辑斯蒂模型方法一
n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
p=polyfit(x,rk,1);
b=p(1);
a=p(2);
r=a;
xm=-r/b;
s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t');
x0=3.9;
x4=eval(s);
x4=x4';
x4=abs(x4);
end

运行代码:

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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
m=1790:10:2000;
m=m';
m(:,2)=x';
m(:,3)=method_1(x);
m(:,4)=method_2(x);
m(:,5)=method_3(x);
m(:,6)=logistic_1(x);

运行界面:

运行结果:第一列代表年份;第二列代表实际人口;第三列为指数增长模型:方法一的预估值;第四列为指数增长模型:方法二的预估值;第五列改进指数模型的预估值;第六列逻辑斯蒂方法一预估值

对2010预测

代码:

>> 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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
>> n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1
rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
p=polyfit(x,rk,1);
b=p(1);
a=p(2);
r=a;
xm=-r/b;
s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t');
x0=3.9;
>> t=22;
>> eval(s)

运行结果:如果出现结果有复数,对结果进行转换,如下图

逻辑斯蒂(logistic)模型:方法二

直接用数据和非线性最小而成估计参数:
运行代码:

function [ x5 ] = logistic_2( x )
%逻辑斯蒂模型方法二n=length(x);
t=0:1:n-1;f=@(a,t)a(1)./(1+(a(1)./a(2)-1).*exp(-a(3).*t));[A,cancha]=lsqcurvefit(f,[500,3.9,0.3],t,x);s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t');
r=A(3);
x0=A(2);
xm=A(1);
x5=eval(s);
x5=x5';
x5=abs(x5);
end

运行代码:

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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
m=1790:10:2000;
m=m';
m(:,2)=x';
m(:,3)=method_1(x);
m(:,4)=method_2(x);
m(:,5)=method_3(x);
m(:,6)=logistic_1(x);
m(:,7)=logistic_2(x);

运行界面:

运行结果:第一列代表年份;第二列代表实际人口;第三列为指数增长模型:方法一的预估值;第四列为指数增长模型:方法二的预估值;第五列改进指数模型的预估值;第六列逻辑斯蒂方法一预估值;第七列逻辑斯蒂方法二预估值

对2010预测

代码:

 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  105.7   122.8   131.7   150.7   179.3   203.2   226.5   248.7   281.4];
>>  n=length(x);
t=0:1:n-1;f=@(a,t)a(1)./(1+(a(1)./a(2)-1).*exp(-a(3).*t));[A,cancha]=lsqcurvefit(f,[500,3.9,0.3],t,x);s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t');
r=A(3);
x0=A(2);
xm=A(1);
>> t=22;
>> eval(s)

运行结果:

数学建模——人口增长模型的matlab实现以及对2010年人口预测相关推荐

  1. MATLAB数学建模-规划模型总结| MATLAB求解

    目录 1 线性规划问题(LP) 风格1 风格2 2 非线性规划 3 动态规划 A星算法 基于dijkstra的概率路线图 4 多目标规划 帕累托最优 支配(Dominace) 不可支配解集 帕累托最优 ...

  2. 数学建模-Topsis模型(Matlab)

    注意:代码文件仅供参考,一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭 如何修改代码避免查重的方法:https://www.bilibili.com/video/ ...

  3. matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...

    数学建模:酒店最优化问题.用matlab算出<酒店价格预测模型> 39人已浏览 时间 : 2020-10-22 08:23:25 导语:酒店客房管理的数据库模型1.表(客房号,楼,客房类型 ...

  4. 线性规划问题的数学建模matlab,数学建模讲座之三——利用Matlab求解线性规划问题(linprog函数).ppt...

    数学建模讲座之三--利用Matlab求解线性规划问题(linprog函数) 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP ...

  5. 利用matlab求解线性规划,数学建模讲座之三利用matlab求解线性规划问题(linprog函数)...

    数学建模讲座之三利用matlab求解线性规划问题(linprog函数) 利用利用 Matlab求解线性规划问题求解线性规划问题河北科技河北科技 大学大学*第第 1页页利用 Matlab求解线性规划问题 ...

  6. 数学建模常见模型总结

    数学建模常见模型总结 一.插值 当已有数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法. 常用插值方法 拉格朗日插值 分段线性插值 Hermite 三次样条插值 克里金法 matlab ...

  7. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  8. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  9. 数学建模传染病模型_数学建模| 时间序列模型

    1 数学建模 时间序列模型 1.与实践有关系的一组数据,叫做时间序列: 2.得到时间序列的数据后,要构建模型,其中平稳时间序列的模型,是本节课重点介绍的: 3.y=at+季节性+周期性 一.     ...

  10. 数学建模常用模型04:灰色关联分析法

    数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...

最新文章

  1. 口罩巨头挑战“量子霸权”,3个月造出的『最强量子计算机』靠谱不?
  2. mysql 主从单库单表同步 binlog-do-db replicate-do-db
  3. C# Ado.NET连接Sql-server
  4. 接待员如何向客人upsell_客房留言卡也能收获好评,看看高情商酒店如何做的?...
  5. 信息学奥赛一本通C++语言——1065:奇数求和
  6. 【Python】字符串反转
  7. 情爱宝典:识破男女间的“放电”信号
  8. MySQL binlog日志三种模式选择及配置
  9. C++day08 学习笔记
  10. Linux第二周学习笔记(12)
  11. keil+flymcu+CubeMX开发STM32F407
  12. 牛客 检测命令是否正确
  13. 全世界时差整理(不含夏冬令时)
  14. 常用网站有哪些,最常用的网站
  15. 你的健身方法真的正确吗
  16. 什么是云开发?云开发与传统开发的对比
  17. qcustomplot绘制柱状图
  18. python--Flask学习(七)--利用Flask中的werkzeug.security模块加密
  19. k8s调度过程中的资源分配问题
  20. 体系结构 | 五段流水线 | 流水线技术

热门文章

  1. Centos 安装libreoffice 以及 word转pdf转html转epub转txt
  2. python 谷歌翻译_Python:谷歌翻译20次的程序如何实现?
  3. “华为杯”第十八届中国研究生数学建模竞赛一等奖经验分享
  4. Android USBCamera投屏 - 利用UVC协议将手机上的画面有线投屏到Android车机的屏幕上
  5. Win10修改EFI分区文件
  6. 软件开发需求分析内容
  7. PR快闪模板 高端黑白超级快闪图文展示开场PR视频模板
  8. 路畅畅云固件升级教程_【图】【折腾导航】路畅导航固件升级、刷机、实现一机多图教程!...
  9. Fences有一个桌面分区消失了怎么办
  10. 【技术认证题库】SCCA理论aDesk-2考试【初级】