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 tt→t+Δ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Δt→0,得傳染病染病人數的微分方程預測模型:
{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)=N0?eλ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=e?2x+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+2x2ex??2xex。
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)=e?tcost,試求下面微分方程的解。
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=?321??10?1?1?12??。
解 求得的解為
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)=?34?e3t?21?e2t+61?32?e3t?21?e2t+65?32?e3t+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)??=?123?012?0?21???x1?(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)=x?e2+1e?3?ex+e2+1e(3e+1)?e?x?3,g(x)=e2+1e?3?ex?e2+13e2+e?e?x+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;A為mmm階方陣。若矩陣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,1?i?mmax?∣Reλi?∣?1?i?mmin?∣Reλ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=1?i?mmax?∣Reλi?∣/1?i?mmin?∣Reλi?∣
為剛性比。理論上的分析表明,求解剛性問題所用的數值方法最好是對步長hhh不做任何限制。
Matlab的工具箱提供連幾個解剛性常微分方程的功能函數,如ode15s,ode23s,ode23t,ode23tb。
下節將簡單介紹ode45求數值解的用法。今天就到這里吧。
參考文獻
[1] 司守奎,孫璽青 數學建模算法與應用第3版[M]