matlab解偏微分方程的函数(偏微分方程解法总结)

一.Malthus模型(指数模型)(1)提出以及假设(2)影响人口增长的因素(3)建立模型(4)结论(5)举例(Matlab代码)二.Logistic模型(阻滞增长模型)(1)背景(2)建立r的关系式(3)模型建立(4)结论(5)举例(Matla

一.Malthus模型(指数模型)
(1)提出以及假设
(2)影响人口增长的因素
(3)建立模型
(4)结论
(5)举例(Matlab代码)
二.Logistic模型(阻滞增长模型)
(1)背景
(2)建立 r 的关系式
(3)模型建立
(4)结论
(5)举例(Matlab代码)
三.总结

1一.Malthus模型(指数模型)

(1)提出以及假设

指数增长模型,由马尔萨斯在1798年提出

基本假设:人口(相对)增长率r是常数(r很小)
相对增长率 = 出生率 - 死亡率

(2)影响人口增长的因素

人口的基数
出生率和死亡率
年龄结构
性别比例
工农业生产水平
医疗水平
政府出台的政策
民族政策

(3)建立模型

我们用 x(t) 表示 t 时刻的人口

那么有

matlab解偏微分方程的函数(偏微分方程解法总结)

结论:随着时间的增加,人口按指数规律无限增长

(4)结论

可以进行短期的人口预测,较为符合

但是之后误差就很大了

(5)举例(Matlab代码)

eg:已知一组数据如下(懒得打在表格里面了,大家凑合着看吧):

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

t为年份,p为对应的人口数量,单位为:百万

因为马尔萨斯模型为指数函数为了线性拟合数据,我们对其进行如下操作:

两边同时取对数:

可得:ln(x) = ln(x0) + rt

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

y = log(p); %求ln(p)函数值

a = polyfit(t,y,1) %用一次多项式对t和y进行拟合

z = polyval(a,t); %求得以a为系数的多项式在t处的函数值

z1 = exp(z)

r = a(1)

plot(t,p,’bo’,t,z1,’r’) %分别画出散点图以及拟合曲线图

xlabel(‘时间’);

ylabel(‘人口数量’);

legend(‘实际数据’,’理论曲线’);

作图如下(短期内基本吻合):

matlab解偏微分方程的函数(偏微分方程解法总结)

%结果如下,增长率r=0.0274

a =

0.0274 -47.6717

z1 =

列 1 至 5

4.1884 5.5105 7.2498 9.5382 12.5488

列 6 至 10

16.5097 21.7209 28.5769 37.5969 49.4640

列 11 至 12

65.0769 85.6179

r =

0.0274

当我们用更多的数据进行长期拟合是就会发现该方法做出来的差别较大!

二.Logistic模型(阻滞增长模型)

(1)背景

由于人口不可能无限制的增长,当人口达到一定数量后,那么增长率就会下降。

我们要模拟这种增长率的变化

这里简化的将增长率 r 看做是人口 x 的减函数

(2)建立 r 的关系式

假设 r(x) = r – sx (r,s>0) 当x很小时,r仍为固有增长率,s为待求系数

xm 是当前环境可以容纳的最大人口容量

matlab解偏微分方程的函数(偏微分方程解法总结)

(3)模型建立

指数增长模型:

matlab解偏微分方程的函数(偏微分方程解法总结)

(4)结论

最终得到 s 型增长曲线,x增长先快后慢,最终接近峰值 xm

该模型同样可以用于种群数量中(鱼群的捕捞要控制在 xm/2 附近,而害虫的防治要远远低于 xm / 2)

(5)举例(Matlab代码)

已知一组数据同上:

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

t为年份,p为对应的人口数量,单位为:百万

matlab解偏微分方程的函数(偏微分方程解法总结)

下面代码由两个文件构成:

%代码如下

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990];

p = [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];

t = t-1780; %整体减去1780

x0 = [150,0.15]; %待定参数x的初值(自己根据实际情况给出初值,之后再不断调整;其中第一个参数为最大人口数,第二个参数为人口增长率)

x = lsqcurvefit(‘population’,x0,t,p) %使用函数求得最终的(xm,r)

p1 = population(x,t);

plot(t+1780,p,’o’,t+1780,p1,’-r*’)

title(‘Logistic模型拟合图’)

xlabel(‘年’);

ylabel(‘人口数’);

legend(‘实际数据’,’理论数据’)

函数m文件

%population.m函数文件

function g = population(x,t)

%UNTITLED2 此处显示有关此函数的摘要

% 此处显示详细说明

g = x(1)./(1+(x(1)/3.9-1)*exp(-x(2)*t));

end

作图如下:

matlab解偏微分方程的函数(偏微分方程解法总结)

结果如下:

%第一个参数为 Xm,第二个参数为 r

x =

337.4308 0.0257

三.总结

Malthus 和 Logistic 均为宏观模型,它们考虑的方面比较少。而且不考虑年龄分布。

以下的微观模型考虑年龄结构

1)Leslie差分方程模型

2)Verhulst偏微分方程模型

3)Pollard随机方程模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/17170.html

(0)
nan
上一篇 2021-08-24
下一篇 2021-08-24

相关推荐

  • Swift中SwiftPM的特点有哪些

    Swift Package Manager(SwiftPM)是Swift编程语言的官方依赖包管理工具,其特点包括:集成于Swift编程语言:SwiftPM是Swift编程语言的官方依赖包管理工具,与Swift语言的开发环境紧密集成,具有更好的兼容性和稳定性。支持代码依赖管理:SwiftPM可以管理Swift程序的代码依赖关系,方便项目中使用第三方库或框架。支持系统库和第三方库:SwiftPM支持管

    2024-04-11
    0
  • 如何申请虚拟主机(添加虚拟主机)

    如何申请虚拟主机,添加虚拟主机内容导航:如何申请虚拟主机虚拟主机如何开通虚拟主机申请有哪些利与弊申请虚拟主机是不是都支持html一、如何申请虚拟主机建议你试试暴风互联,他们是专业美国虚拟主机提供商价格便宜,专业中文客服,365天无条件退款保证,一个账户可以绑定多个网站二、虚拟主机如何开通深圳华网互联()1、注册会员首先请注册成为我公司的会员

    2022-04-14
    0
  • Navicat怎么设置定时备份任务

    要设置定时备份任务,您可以按照以下步骤操作:打开Navicat软件,并连接到您的数据库服务器。在左侧的连接列表中,右键单击要备份的数据库,然后选择“定时备份”选项。在弹出的窗口中,点击“新建”按钮来创建一个新的定时备份任务。在任务设置窗口中,您可以设置备份任务的名称、备份类型(完整备份、增量备份等)、备份文件存储路径、备份频率等参数。在“计划”选项卡中,您可以设置备份任务的执行时间和频率。

    2024-05-11
    0
  • c++ vector的push_back如何使用

    在C++中,vector是一种动态数组,可以根据需要动态增长或缩小。push_back()函数用于在vector的末尾添加一个新元素。下面是一个使用push_back()函数的示例代码:#include #include int main() {std::vector vec;// 添加元素到vector中vec.push_back(10);ve

    2024-04-01
    0
  • ps如何把黑白照片(ps怎么让照片黑白色)

    ps如何把黑白照片,ps怎么让照片黑白色内容导航:ps怎么把照片变成黑白PS怎么做黑白照片的四种方法ps怎么把图片变成黑白木刻如何用PS给黑白照片上一、ps怎么把照片变成黑白打开照片——图像——模式——Lad颜色——进入通道——单击“明度”选中明度通道——全选(ctrl+a)——复制(ctrl+C)——再次单击Lad选中Lad通道——返回到图层面版——创建新图层——按ctrl+V粘贴——复制一黑白

    2022-04-28
    0
  • java怎么调用第三方接口

    在Java中调用第三方接口通常可以通过使用网络请求的方式来实现。以下是一种基本的方法:使用Java的内置网络请求类,比如HttpURLConnection或者HttpClient来发送HTTP请求到第三方接口的URL。根据第三方接口的要求,设置请求的方法、头部信息、请求体参数等。发送请求并获取到响应数据。解析并处理响应数据,根据需要进行后续的操作。下面是一个简单的示例代码:import j

    2024-03-06
    0

发表回复

登录后才能评论