【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现

这篇具有很好参考价值的文章主要介绍了【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、学习内容

  1. 微分方程基本概念
  2. 微分方程在数学建模中的应用
  3. 微分方程常用模型(人口增长模型、传染病模型)

二、学习时间

2022.06.19


三、学习产出

3.1 微分方程基本概念

微分方程,是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。

微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛,可以解决许多与导数有关的问题。物理中许多涉及变力的运动学、动力学问题,如空气的阻力为速度函数的落体运动等问题,很多可以用微分方程求解。此外,微分方程在化学、工程学、经济学和人口统计等领域都有应用。

数学领域对微分方程的研究着重在几个不同的面向,但大多数都是关心微分方程的解。只有少数简单的微分方程可以求得解析解。不过即使没有找到其解析解,仍然可以确认其解的部分性质。在无法求得解析解时,可以利用数值分析的方式,利用电脑来找到其数值解。 动力系统理论强调对于微分方程系统的量化分析,而许多数值方法可以计算微分方程的数值解,且有一定的准确度。

简单来说,微分方程指的是:含有未知函数及其导数的方程。,下面是几种微分方程的例子:

非齐次一阶常系数线性微分方程:
【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
齐次二阶线性微分方程:
【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
非齐次一阶非线性微分方程:
【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现

3.2 微分方程在数学建模中的应用

问题描述:
某人每天由饭食获取2 500卡热量,其中1 200卡用于新陈代谢,此外每千克体重需支付16卡热量作为运动消耗,其余热量则转化为脂肪,已知以脂肪形式贮存的热量利用率为100%,每千克脂肪含热量10 000卡,问此人的体重如何随时间而变化?

解析:
设人的体重为m(t),假设体重随时间是连续变化的,即m(t)是连续函数且充分光滑,故我们认为能量的摄取和消耗是随时发生的.这里我们以“天”为时间单位,在任何一个时间段内考虑能量的摄入和消耗所引起的体重的变化.根据能量的平衡原理,任何时间段内由于体重的改变所引起的人体内能量的变化应该等于这段时间内摄入的能量与消耗的能量的差.

我们发现从理论上来说,只要适当调节A和B,C(不变),即控制饮食和增加活动量,减肥就能达到好的效果.

3.3 微分方程常用模型

3.3.1 人口增长模型

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
图片来源:【微分方程模型】【2021国赛赛前培训】

3.3.1.1 指数增长模型(马尔萨斯模型)

所谓指数增长模型,就是假设人口是随着一个固定的增长率不断增长。此模型由马尔萨斯1798年提出,故又称为马尔萨斯模型。下面是有关指数增长模型公式的推导和演示:

  • 假设t时刻人口数量为连续、可微函数x(t)
  • 假设单位时间人口增长率为常数r
  • 假设初始人数为x0
    【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
    Matlab代码:
% 人口增长-指数增长模型
% 清空工作区和变量区
clear;clc;
% 定义迭代次数
n = 250;
% 定义并初始化参数
x = zeros(1,n);
x(1,1) = 5.42; % 初始化人口数(亿)
r = 0.018; % 人口增长率
% 开始迭代
for t = 2:n
    x(1,t) = x(1,1)*exp(r*t);
end
% 绘图
plot(1:1:n,x);
legend('人口增长曲线');
xlabel('迭代次数');
ylabel('人口数(亿) ');
grid on;

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
从上图,我们可以明显地看出指数增长模型存在以下几点局限性:

  • 不符合多数地区人口增长规律。
  • 实际上只有在群体总数不太大时才合理,当总数增大时,生物群体的各成员之间由于有限的生存空间,资源,食物等原因可能发生竞争的情况。
  • 人口净增长率不可能始终保持常数,它应当与人口数量有关。
3.3.1.2 阻滞增长模型(Logistic模型)

阻滞增长模型对指数增长模型进行了改善,即考虑了资源、环境等因素对人口增长的阻滞作用,且阻滞作用随人口的增加而变大。下面是有关阻滞增长模型公式的推导和演示:

  • 假设t时刻人口数量为连续、可微函数x(t)
  • 假设单位时间人口增长率为x的减函数,即r(x)=a-bx,其中b>0
  • 假设当前环境和资源最大可能承受的人口数为xm
  • 假设r(0)=r,r(xm)=0,其中r为一个常数,即初始人口增长率
  • 假设初始人数为x0

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现

Matlab代码:

% 人口增长-阻滞增长模型
% 清空工作区和变量区
clear;clc;
% 定义迭代次数
n = 500;
% 定义并初始化参数
x = zeros(1,n);
x(1,1) = 5.42; % 初始化人口数(亿)
r = 0.018; % 初始人口增长率
xm = 100; % 最大人口数
% 开始迭代
for t = 2:n
    x(1,t) = xm/(1+(xm/x(1,1)-1)*exp(-r*t));
end
% 绘图
plot(1:1:n,x);
legend('人口增长曲线');
xlabel('迭代次数');
ylabel('人口数(亿) ');
grid on;

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现

3.3.1.3 人口模型小结
  • 指数增长模型和Logistic模型(阻滞增长模型)均为对微分方程所作的模拟近似方程。
  • 前一模型假设了增长率为一常数,后一模型则假设环境只能供养一定数量的种群,从而引入了上个竞争项
  • 指数增长模型呈现的是J型增长,只适应于短期内,并没有考虑外界因素的影响。
  • Logistic模型呈现S型,适应于中长期且有外界因素影响。

3.3.2 传染病模型

  • 描述传染病的传播过程
  • 分析受感染人数的变化规律
  • 预报传染病高发期到来的时刻
  • 按照传播过程的一般规律,用机理分析方法建立模型
3.3.2.1 SI模型

SI模型将人群分为两类,一类是健康人群(S),另一类是感染者(I)

  • 假设总人数为N,且N不变
  • 假设时刻t健康人和感染者所占比例分别为s(t)和i(t),且s(t)+i(t)=1
  • 假设每个病人每天有效接触人数为L(日接触率),感染者接触健康者,就会让健康者患病
    【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
    Matlab代码:
% 传染病SI模型
% 清空工作区和变量区
clear;clc;
% 定义迭代次数
n = 100;
% 定义并初始化状态E(s,i)
E = zeros(2,n);
E(1,1) = 0.99; % 初始健康者比例
E(2,1) = 0.01; % 初始感染者比例
% 初始化参数
L = 0.5; % 病人日接触率
% 开始迭代
for t = 1:n-1
    E(2,t+1) = E(2,t) + L*E(2,t)*(1-E(2,t));
    E(1,t+1) = 1 - E(2,t+1);
end
% 绘图
s = E(1,:); % 健康者比例数据
i = E(2,:); % 感染者比例数据
plot(s,'DisplayName','s');hold on;
plot(i,'DisplayName','i');
legend('健康者比例','感染者比例');
xlabel('迭代次数');
ylabel('比例');
grid on;
hold off;

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
SI模型的缺点在于,没有考虑病人可以被治愈的情况,导致最后所有健康者都会变为感染者,不太符合实际情况

3.3.2.2 SIS模型

SIS模型在SI模型的基础上,还考虑了健康人被感染后可能会被治愈,而且治愈后,还可能再次被感染的情况

  • 假设总人数为N,且N不变
  • 假设时刻t健康人和感染者所占比例分别为s(t)和i(t),且s(t)+i(t)=1
  • 假设每个病人每天有效接触人数为L(日接触率),感染者接触健康者,就会让健康者患病
  • 假设病人每天的治愈率为M(日治愈率)
    【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
    Matlab代码:
% 传染病SIS模型
% 清空工作区和变量区
clear;clc;
% 定义迭代次数
n = 100;
% 定义并初始化状态E(s,i)
E = zeros(2,n);
E(1,1) = 0.99; % 初始健康者比例
E(2,1) = 0.01; % 初始感染者比例
% 初始化参数
L = 0.5; % 病人日接触率
M = 0.2; % 病人日治愈率
% 开始迭代
for t = 1:n-1
    E(2,t+1) = E(2,t) + L*E(2,t)*(1-E(2,t))-M*E(2,t);
    E(1,t+1) = 1 - E(2,t+1);
end
% 绘图
s = E(1,:); % 健康者比例数据
i = E(2,:); % 感染者比例数据
plot(s,'DisplayName','s');hold on;
plot(i,'DisplayName','i');
legend('健康者比例','感染者比例');
xlabel('迭代次数');
ylabel('比例');
grid on;
hold off;

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
SIS模型作为SI模型的升级版,考虑了病人被治愈的情况,但同时,SIS模型没有考虑病人被治愈后,可能会产生抗体,而不会被再次感染的情况,不太符合某些传染病的模拟

3.3.2.3 SIR模型

SIR模型在SIS模型的基础上,还考虑了病人被治愈后,可能会产生抗体,而不会被再次感染的情况,适应性更强。
SIR模型中,有三种人群:健康者(S),感染者(I),免疫者(R)

  • 假设总人数为N,且N不变
  • 假设时刻t健康人、感染者和免疫者所占比例分别为s(t)、i(t)和r(t),且s(t)+i(t)+r(t)=1
  • 假设每个病人每天有效接触人数为L(日接触率),感染者接触健康者,就会让健康者患病
  • 假设病人每天的治愈率为M(日治愈率)
  • 假设病人被治愈后,会产生抗体,成为免疫者,免疫者群体不会被再次感染
    【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现

Matlab代码:

% 传染病SIR模型
% 清空工作区和变量区
clear;clc;
% 定义迭代次数
n = 100;
% 定义并初始化状态E(s,i,r)
E = zeros(3,n);
E(1,1) = 0.99; % 初始健康者比例
E(2,1) = 0.01; % 初始感染者比例
E(3,1) = 1 - E(1,1) - E(2,1); % 初始免疫者比例(假设一开始没有免疫者)
% 初始化参数
L = 0.5; % 病人日接触率
M = 0.1; % 日治愈率
% 开始迭代
for t = 1:n-1
    E(1,t+1) = E(1,t) - L*E(1,t)*E(2,t);
    E(2,t+1) = E(2,t) + L*E(1,t)*E(2,t) - M*E(2,t);
    E(3,t+1) = 1 - E(1,t+1) - E(2,t+1);
end
% 绘图
s = E(1,:); % 健康者比例数据
i = E(2,:); % 感染者比例数据
r = E(3,:); % 免疫者比例数据
plot(s,'DisplayName','s');hold on;
plot(i,'DisplayName','i');
plot(r,'DisplayName','r');
legend('健康者比例','感染者比例','免疫者比例');
xlabel('迭代次数');
ylabel('比例');
grid on;
hold off;

【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现
可以看到,在SIR模型中,随着时间的推移,感染者人数先上升,达到一个峰值后,再下降,最后下降为0,所有人都成为免疫者文章来源地址https://www.toymoban.com/news/detail-488970.html

到了这里,关于【数学建模】常用微分方程模型 + 详细手写公式推导 + Matlab代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模】《实战数学建模:例题与讲解》第五讲-微分方程建模(含Matlab代码)

    如果这篇文章对你有帮助,欢迎点赞与收藏~ 微分方程建模是数学建模中一种极其重要的方法,它在解决众多实际问题时发挥着关键作用。这些实际问题的数学表述通常会导致求解特定的微分方程。将各种实际问题转换为微分方程的定解问题主要包括以下几个步骤: 确定研究

    2024年03月18日
    浏览(76)
  • Python小白的数学建模课-11.偏微分方程数值解法

    偏微分方程可以描述各种自然和工程现象, 是构建科学、工程学和其他领域的数学模型主要手段。 偏微分方程主要有三类:椭圆方程,抛物方程和双曲方程。 本文采用有限差分法求解偏微分方程,通过案例讲解一维平流方程、一维热传导方程、二维双曲方程、二维抛物方程

    2024年02月14日
    浏览(103)
  • 【数学建模\MATLAB】掌握用Matlab求解微分方程问题

    d y d t = a y 2 cfrac{dy}{dt}=ay^2 d t d y ​ = a y 2 结果 d 3 y d t 3 = b y cfrac{d^3y}{dt^3}=by d t 3 d 3 y ​ = b y 结果 x 2 + y + ( x − 2 y ) y ′ = 0 x^2+y+(x-2y)yprime=0 x 2 + y + ( x − 2 y ) y ′ = 0 结果: d 2 y d t 2 = a y , 初 始 条 件 为 y ( 0 ) = 5 , y ′ ( 0 ) = 1 cfrac{d^2y}{dt^2}=ay, text初始条件为y(0)=5,yprime(

    2024年02月03日
    浏览(45)
  • 常微分方程建模R包ecode(一)——构建常微分方程系统

    常微分方程在诸多研究领域中有着广泛应用,本文希望向大家介绍笔者于近期开发的R包 ecode ,该包 采用简洁易懂的语法帮助大家在R环境中构建常微分方程 ,并便利地调用R图形接口,研究常微分方程系统的相速矢量场、平衡点、稳定点等解析性质,或进行数值模拟,进行敏

    2024年02月16日
    浏览(43)
  • 高等数学(微分方程)

    x y ′ ′ ′ + ( y ′ ) 3 + y 4 xy\\\'\\\'\\\'+(y\\\')^3+y^4 x y ′′′ + ( y ′ ) 3 + y 4 quad quad 三阶 y ′ = 2 x y\\\'=2x y ′ = 2 x quad quad quad quad quad quad 一阶 d y = 2 x d x dy=2xdx d y = 2 x d x quad quad quad quad 一阶 ( y ′ ′ ) 5 + 2 y ′ = 3 (y\\\'\\\')^5+2y\\\'=3 ( y ′′ ) 5 + 2 y ′ = 3 quad quad quad 二阶 quad 例1: 已知

    2024年02月10日
    浏览(48)
  • 常微分方程建模R包ecode(三)——探寻平衡点

    在建立常微分方程后,我们常常会问的一个问题是: 这个常微分方程系统中是否存在平衡点?如果存在,这个平衡点是否稳定? 本节将展示如何通过 ecode 包来回答这个问题。 我们首先利用 ecode 包建立一个Lotka–Volterra竞争模型(详见第一节), d x d t = ( r 1 − a 11 x − a 12

    2024年02月13日
    浏览(48)
  • 常微分方程建模R包ecode(二)——绘制相速矢量场

    本节中我们考虑一个更为复杂的常微分方程模型, d X C d t = ν ( X A + Y A ) − β ⋅ X C ⋅ ( Y C + Y A ) − ( μ + g ) ⋅ X C , ( 1 ) d Y C d t = β ⋅ X C ⋅ ( Y C + Y A ) − ( μ + g + ρ ) ⋅ Y C , ( 2 ) d X A d t = g ⋅ X C − β ⋅ X A ⋅ ( Y C + Y A ) , ( 3 ) d Y A d t = β ⋅ X A ∗ ( Y C + Y A ) + g ∗ Y C − ρ ∗

    2024年02月14日
    浏览(40)
  • matlab解常微分方程常用数值解法2:龙格库塔方法

    总结和记录一下matlab求解常微分方程常用的数值解法,本文将介绍龙格库塔方法(Runge-Kutta Method)。 龙格库塔迭代的基本思想是: x k + 1 = x k + a k 1 + b k 2 x_{k+1}=x_{k}+a k_{1}+b k_{2} x k + 1 ​ = x k ​ + a k 1 ​ + b k 2 ​ k 1 = h f ( x k , t k )  and  k 2 = h f ( x k + B 1 k 1 , t k + A 1 h ) k_{1}=h

    2024年02月12日
    浏览(45)
  • 基于SEIR微分方程模型对疫情传播的简单预测

    目录 一、模型的建立 传染病模型概念 模型假设 SEIR模型 模型中涉及的函数S(t)、E(t)、I(t)、R(t) 更改后的微分方程 二、模型的求解 三、模型的缺点 祝语 随着疫情的再次爆发,全国疫情防控再次进入紧张状态,疫情预测分析成为数学建模问题中的一个热点问题,本文基于微分

    2024年02月07日
    浏览(42)
  • Simulink基础【1】-弹簧-阻尼模型的常微分方程求解

    Simulink是Matlab软件的框图设计环境,可用于各种动态系统的建模、分析与仿真过程。如:导航制导、通讯、电子、机械、热力学等诸多领域。这些系统在数学角度描述上涉及连续、离散、非线性、时变等用解析方法难以求解的系统,因而采用Simulink进行建模与仿真是指导这些系

    2023年04月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包