当前位置: 首页 > news >正文

数学建模算法-day[14]

6.2 传染病预测问题

问题提出
世界上存在很多传染病,如何根据其传播机理预测疾病得传染范围及染病人数等,对传染病的控制意义十分重大。

1.指数传播模型
基本假设

(1) 所研究的区域是一封闭区域,在一个时期内人口总量相对稳定,不考虑人口的迁移(迁入或迁出)。
(2) ttt时刻染病人数N(t)N(t)N(t)是随时间连续变化的、可微的函数。
(3) 每个病人在单位时间内的有效接触(足以使人致病)或传染的人数为λ\lambdaλλ>0\lambda>0λ>0为常数)。

模型建立与求解

N(t)N(t)N(t)ttt时刻染病人数,则t+Δtt+\Delta tt+Δt时刻的染病人数为N(t+Δt)N(t+\Delta t)N(t+Δt)。从t→t+Δtt\to t+\Delta ttt+Δt时间内,净增加的染病人数为N(t+Δt)−N(t)N(t+\Delta t)-N(t)N(t+Δt)N(t),根据基本假设(3),有
N(t+Δt)−N(t)=λN(t)Δt N(t+\Delta t)-N(t)=\lambda N(t)\Delta t N(t+Δt)N(t)=λN(t)Δt
若记t=0t=0t=0时刻染病人数为N0N_0N0,则由基本假设(2),在上式两端同时除以Δt\Delta tΔt,并令Δt→0\Delta t\to 0Δt0,得传染病染病人数的微分方程预测模型:
{dN(t)dt=λN(t),t>0,N(0)=N0.(6.13) \left\{\begin{aligned}& \frac{dN(t)}{dt}=\lambda N(t),t>0,\\& N(0)=N_0. \end{aligned}\right.\tag{6.13} dtdN(t)=λN(t),t>0,N(0)=N0.(6.13)
利用mathematica就可以求出该模型的解析解为
N(t)=N0eλt. N(t)=N_0e^{\lambda t}. N(t)=N0eλt.

DSolve[{n'[t] == \[Lambda]*n[t], n[0] == n0}, n[t], t]

结果分析与评价

模型结果显示传染病的传播是按指数函数。。。

这一节主播学过了,不想过多介绍,有空了再说

6.3 常微分方程的求解

这一节在韩中庚老师的书里是介绍了matlab的,不过本人matlab不是非常适合这种符号计算的,于是本人在这里同时也介绍mathematica的用法,例子还是书上的。

6.3.1 常微分方程的符号解

Matlab符号运算工具箱提供了功能强大的求常微分方程符号解函数dsolve,Methematica提供了功能强大的求常微分方程符号解函数DSolve

例 6.3 求解微分方程y′=−2y+2x2+2x,y(0)=1y'=-2y+2x^2+2x,y(0)=1y=2y+2x2+2x,y(0)=1

求得的符号解为y=e−2x+x2y=e^{-2x}+x^2y=e2x+x2

mathematica代码

DSolve[{y'[x] == -2*y[x] + 2*x^2 + 2*x, y[0] == 1}, y[x], x]

matlab代码

clc;clear
syms y(x)
y=dsolve(diff(y)==-2*y+2*x^2+2*x,y(0)==1)

例 6.4 求解二阶线性微分方程y′′−2y′+y=ex,y(0)=1,y′(0)=−1y''-2y'+y=e^x,y(0)=1,y'(0)=-1y′′2y+y=ex,y(0)=1,y(0)=1

求得二阶线性微分方程的解为y=ex+x2ex2−2xexy=e^x+\frac{x^2e^x}{2}-2xe^xy=ex+2x2ex2xex

mathematica代码

DSolve[{y''[x] - 2 y'[x] + y[x] == Exp[x], y[0] == 1, y'[0] == -1}, y[x], x]

matlab代码

clc;clear
syms y(x)
dy=diff(y);
y=dsolve(diff(y,2)-2*diff(y)+y==exp(x),y(0)==1,dy(0)==-1)

例 6.5 已知输入信号为u(t)=e−tcos⁡tu(t)=e^{-t}\cos tu(t)=etcost,试求下面微分方程的解。
y(4)(t)+10y(3)(t)+35y′′(t)+50y′(t)+24y(t)=u′′(t),y(0)=0, y′(0)=−1, y′′(0)=1, y′′′(0)=1 y^{(4)}(t) + 10 y^{(3)}(t) + 35 y''(t) + 50 y'(t) + 24 y(t) = u''(t), \quad y(0) = 0,\ y'(0) = -1,\ y''(0) = 1,\ y'''(0) = 1 y(4)(t)+10y(3)(t)+35y′′(t)+50y(t)+24y(t)=u′′(t),y(0)=0, y(0)=1, y′′(0)=1, y′′′(0)=1

mathematica代码

DSolve[{D[y[t], {t, 4}] + 10 y'''[t] + 35 y''[t] + 50 y'[t] + 24 y[t] == u''[t], y[0] == 0, y'[0] == -1, y''[0] == 1, y'''[0] == 1}, y[t], t]

matlab代码

clc;clear
syms y(t) u(t)
dy=diff(y,1);
dy2=diff(y,2);
dy3=diff(y,3);
u(t)=exp(-t)*cos(t);
y=dsolve(diff(y,4)+10*diff(y,3)+35*diff(y,2)+50*diff(y,1)+24*y==diff(u,2),y(0)==0,dy(0)==-1,dy2(0)==1,dy3(0)==1)

下面给出求常微分方程组符号解的例子。

例6.6 试求解下列柯西问题:
{dxdt=Ax,x(0)=[1,1,1]T \left\{\begin{aligned}& \frac{dx}{dt}=Ax,\\& x(0)=[1,1,1]^T \end{aligned}\right. dtdx=Ax,x(0)=[1,1,1]T
的解,其中x(t)=[x1(t),x2(t),x3(t)]T,A=[3−1120−11−12]x(t)=[x_1(t),x_2(t),x_3(t)]^T,\boldsymbol{A} = \begin{bmatrix} 3 & -1 & 1 \\ 2 & 0 & -1 \\ 1 & -1 & 2 \end{bmatrix}x(t)=[x1(t),x2(t),x3(t)]T,A=321101112

求得的解为
x(t)=[43e3t−12e2t+1623e3t−12e2t+5623e3t+13] \boldsymbol{x}(t) = \begin{bmatrix} \dfrac{4}{3} \mathrm{e}^{3t} - \dfrac{1}{2} \mathrm{e}^{2t} + \dfrac{1}{6} \\[1em] \dfrac{2}{3} \mathrm{e}^{3t} - \dfrac{1}{2} \mathrm{e}^{2t} + \dfrac{5}{6} \\[1em] \dfrac{2}{3} \mathrm{e}^{3t} + \dfrac{1}{3} \end{bmatrix} x(t)=34e3t21e2t+6132e3t21e2t+6532e3t+31

本人不会用mathematica求这类问题了,555.没学过

matlab代码

clc;clear
syms x(t) [3,1]  %定义符号向量,x(t)后有空格
A=[3 -1 1;2 0 -1;1 -1 2];
[s1,s2,s3]=dsolve(diff(x)==A*x,x(0)==ones(3,1))

例6.7 试解初值问题
[x1′(t)x2′(t)x3′(t)]=[10021−2321][x1(t)x2(t)x3(t)]+[00etcos⁡2t],[x1(0)x2(0)x3(0)]=[011] \begin{bmatrix} x_1'(t) \\ x_2'(t) \\ x_3'(t)\end{bmatrix}=\begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & -2 \\ 3 & 2 & 1 \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ x_3(t) \end{bmatrix} + \begin{bmatrix} 0 \\ 0 \\ \mathrm{e}^t \cos 2t \end{bmatrix}, \quad \begin{bmatrix} x_1(0) \\ x_2(0) \\ x_3(0) \end{bmatrix} =\begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} x1(t)x2(t)x3(t)=123012021x1(t)x2(t)x3(t)+00etcos2t,x1(0)x2(0)x3(0)=011
所得的解为

x(t)=[x1(t)x2(t)x3(t)]=[0et[cos⁡(2t)−sin⁡(2t)−tsin⁡(2t)2]et[cos⁡(2t)+5sin⁡(2t)4+tcos⁡(2t)2]] \boldsymbol{x}(t) = \begin{bmatrix} x_1(t) \\ x_2(t) \\ x_3(t) \end{bmatrix} =\begin{bmatrix} 0 \\ \displaystyle \mathrm{e}^t \left[ \cos(2t) - \sin(2t) - \frac{t \sin(2t)}{2} \right] \\ \displaystyle \mathrm{e}^t \left[ \cos(2t) + \frac{5 \sin(2t)}{4} + \frac{t \cos(2t)}{2} \right] \end{bmatrix} x(t)=x1(t)x2(t)x3(t)=0et[cos(2t)sin(2t)2tsin(2t)]et[cos(2t)+45sin(2t)+2tcos(2t)]

matlab代码

clc;clear
syms x(t) [3,1]
A=[1 0 0;2 1 -2;3 2 1];
[s1,s2,s3]=dsolve(diff(x)==A*x+[0,0,exp(t)*cos(2*t)]',x(0)==[0,1,1]')

例6.8 试求常微分方程组
{f′′+g=3g′+f′=1 \left\{\begin{aligned}& f''+g=3\\& g'+f'=1 \end{aligned}\right. {f′′+g=3g+f=1
在初边值条件f′(1)=0,f(0)=0,g(0)=0f'(1)=0,f(0)=0,g(0)=0f(1)=0,f(0)=0,g(0)=0时的解。

求得的解为
f(x)=x−e−3e2+1ex+e(3e+1)e2+1e−x−3,g(x)=e−3e2+1ex−3e2+ee2+1e−x+3. f(x) = x - \frac{\mathrm{e} - 3}{\mathrm{e}^2 + 1} \mathrm{e}^x + \frac{\mathrm{e}(3\mathrm{e} + 1)}{\mathrm{e}^2 + 1} \mathrm{e}^{-x} - 3,\\ g(x) = \frac{\mathrm{e} - 3}{\mathrm{e}^2 + 1} \mathrm{e}^x - \frac{3\mathrm{e}^2 + \mathrm{e}}{\mathrm{e}^2 + 1} \mathrm{e}^{-x} + 3. f(x)=xe2+1e3ex+e2+1e(3e+1)ex3,g(x)=e2+1e3exe2+13e2+eex+3.

matlab代码

clc;clear
syms f(x) g(x)
df=diff(f,1);
[f,g]=dsolve(diff(f,2)+g==3,diff(g)+diff(f)==1,df(1)==0,f(0)==0,g(0)==0)

mathematica代码

DSolve[{f''[x] + g[x] == 3, g'[x] + f'[x] == 1, f'[1] == 0, f[0] == 0,g[0] == 0}, {f[x], g[x]}, x]

6.3.2 初值问题的Matlab数值解

matlab的工具箱提供了几个解常微分方程数值解的函数,如ode45,ode23,ode113,其中:ode45采用四五阶龙格-库塔方法(以下简称RK方法),是解非刚性常微分方程的首选方法;ode23采用二三阶RK方法;ode113采用的是多步法,效率一般比ode45高。

在化学工程及自动控制等领域中,所涉及的常微分方程组初值问题常常是所谓的“刚性”问题。具体地说,对一阶线性常微分方程组
dydx=Ay+ϕ(x),(6.26) \frac{dy}{dx}=Ay+\phi(x),\tag{6.26} dxdy=Ay+ϕ(x),(6.26)
式中:y,ϕ∈Rm;Ay,\phi\in R^m;Ay,ϕRm;Ammm阶方阵。若矩阵AAA的特征值λi(i=1,2,⋯ ,m)\lambda_i(i=1,2,\cdots,m)λi(i=1,2,,m)满足关系
{Re⁡λi<0,i=1,2,⋯ ,m,max⁡1⩽i⩽m∣Re⁡λi∣≫min⁡1⩽i⩽m∣Re⁡λi∣ \begin{cases} \operatorname{Re}\lambda_i < 0, i = 1, 2, \cdots, m, \\ \max\limits_{1 \leqslant i \leqslant m} |\operatorname{Re}\lambda_i| \gg \min\limits_{1 \leqslant i \leqslant m} |\operatorname{Re}\lambda_i| \end{cases} {Reλi<0,i=1,2,,m,1immaxReλi1imminReλi
则称方程组(6.26)为刚性方程组或stiff方程组,称数
s=max⁡1⩽i⩽m∣Re⁡λi∣/min⁡1⩽i⩽m∣Re⁡λi∣ s=\max\limits_{1 \leqslant i \leqslant m} |\operatorname{Re}\lambda_i| / \min\limits_{1 \leqslant i \leqslant m} |\operatorname{Re}\lambda_i| s=1immaxReλi∣/1imminReλi
为刚性比。理论上的分析表明,求解刚性问题所用的数值方法最好是对步长hhh不做任何限制。

Matlab的工具箱提供连几个解刚性常微分方程的功能函数,如ode15s,ode23s,ode23t,ode23tb。

下节将简单介绍ode45求数值解的用法。今天就到这里吧。

参考文献
[1] 司守奎,孙玺青 数学建模算法与应用第3版[M]

http://www.lryc.cn/news/604189.html

相关文章:

  • LeetCode 刷题【19. 删除链表的倒数第 N 个结点、20. 有效的括号、21. 合并两个有序链表】
  • 面试刷题平台项目总结
  • 用命令查看Android设备的 Linux 内核版本,了解其对应的硬件支持各种特性
  • Git命令保姆级教程
  • 如何进行项目复盘?核心要点分析
  • AI产品经理手册(Ch3-5)AI Product Manager‘s Handbook学习笔记
  • linux命令tail的实际应用
  • C语言---万能指针(void *)、查找子串(strncmp函数的应用)多维数组(一维数组指针、二维数组指针)、返回指针值函数、关键字(const)
  • 【RH134 问答题】第 9 章 访问网络附加存储
  • 什么是数据编排?数据编排的流程、优势、挑战及工具有哪些?
  • OpenLayers 综合案例-底图换肤(变色)
  • Intellij Idea--解决Cannot download “https://start.spring.io‘: Connect timedout
  • 前端路由
  • DAY21 常见的降维算法
  • vulhub 02-Breakout靶场攻略
  • 计算机网络基础(一) --- (网络通信三要素)
  • 学习日志21 python
  • 集成电路学习:什么是WDT看门狗定时器
  • 简历美容院:如何把“打杂经历“包装成“核心项目“?
  • 系统优化与性能调教
  • USB Type-C PD协议一文通
  • QFutureWatcher 收不到 finished 信号-QFutureWatcher 与对象生命周期
  • 02-Breakout靶机攻略
  • linux命令ps的实际应用
  • ubuntu18.04制作raid0
  • Springboot+vue智能家居商城的设计与实现
  • python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出
  • Apache Ignite 的分布式队列(IgniteQueue)和分布式集合(IgniteSet)的介绍
  • windows下Docker安装路径、存储路径修改
  • Element Plus常见基础组件(一)