---
title: 數學軟體實作 - Differential equations
tags: 2020 Fall - 數學軟體實作
GA: G-77TT93X4N1
---
# Lecture - Differential equations
## Ordinary differential equation
### 1st-order ordinary differential equation
#### Example - 人口成長模型 1
> 假設人口的成長率與總人口數成正比
假設在時間 $t$ 的人口數為 $P(t)$, 人口成長率與人口數的比值為 $\lambda$, 則有
$$
\frac{dP(t)}{dt} = \lambda P(t)
$$
給定某地區的初始人口數 $P(t_0)=P_0$, 可以很容易得出
$$
P(t) = P_0e^{\lambda(t-t_0)}.
$$
所以根據這個模型人口會指數成長無上限.
#### Example - 人口成長模型 2
由於人口不可能會無上限成長, 因此
> 假設人口的成長不能超過某最大容量 $M$
並且有以下關係
$$
\frac{dP(t)}{dt} = \lambda P(t)(M-P(t))
$$
給定某地區的初始人口數 $P(t_0)=P_0$, 需要解以上微分方程才能得到人口成長曲線.
---
一般而言, 一階常微分方程可以寫成
$$
\frac{dX(t)}{dt} = f(X(t)), \quad X(t_0)=X_0,
$$
其中要解的函數為 $X(t)$, 而 $f$ 是一個函數.
例如以上兩例子
* Model 1: $f(X)=\lambda X$
* Model 2: $f(X)=\lambda X(M-X)$
#### Matlab program for 1st-order ODE
* [dfield](https://www.mathworks.com/matlabcentral/fileexchange/71408-dfield8)
#### Exercise
試描述下列方程其解的長時間行為
$$
\frac{dX(t)}{dt} = X - X^3
$$
---
### 2nd-order ordinary differential equation
#### Example - 彈簧震動
虎克(R. Hooke, 1635–1703)在研究彈簧的振動時, 寫下了有名的簡諧運動方程式
$$
m\frac{d^2X(t)}{dt^2} + kX(t) = u(t), \quad t>0,
$$
其中 $m$ 是懸掛物質量, $k$ 為彈簧彈性係數, $X(t)$ 為彈簧在時間 $t$ 時的位移, $u(t)$ 為外力.
給定初始位置跟速度, $X(0)=X_0$, $X'(0)=Y_0$, 就可以解以上方程得到彈簧位移函數 $X(t)$.
若無外力, $u(t)=0$, 此系統的解為
$$
X(t) = C_1\cos\omega t + C_2\sin\omega t, \quad
\omega=\sqrt{k/m}.
$$
---
一般而言, 二階常微分方程可以被改寫為兩個聯立的一階常微分方程, 例如以上簡諧運動, 我們引進 $Y(t) = X'(t)$ 可得
$$
\frac{dX(t)}{dt} = Y(t),\\
\frac{dY(t)}{dt} = -\frac{k}{m}X(t) + u(t),
$$
接著我們可以寫一簡單程式, 以 `ode45` 來解這微分方程.
我們先定義函數: (例如 $k=1$, $m=2$, $u(t)=\sin(t)$)
```matlab=
function dydt = shm(t,y)
% shm: simple harmonic motion
% 存成 shm.m
k=1;
m=2;
dydt = [y(2); -(k/m)*y(1)+u(t)];
function value = u(t)
value = sin(t);
end
end
```
接著以 `ode45` 來解: (假設要解的區間為 $t\in[0,100]$, 初始值 $X_0=2$, $Y_0=1$)
```matlab=
[t,y]=ode45(@shm,[0 100],[2 1]'); % 解上列 simple harmonic motion
plot(t,y(:,1)); % 畫出解來
```
---
#### Autonomous system
若方程式無外力項, 或是獨立變數 $t$ 並沒有出現在方程式裡, 則稱為 Autonomous system. 這樣的二階方程可以寫為
$$
\frac{d^2X}{dt^2} = f(X, X')
$$
例如無外力的簡諧運動其方程為
$$
\frac{d^2X}{dt^2} = -\omega^2X,
$$
而有阻尼的簡諧運動其方程為
$$
\frac{d^2X}{dt^2} = -\omega^2X-\gamma X'
$$
二階 Autonomous sytem 可以畫出其相圖([phase portrait](https://en.wikipedia.org/wiki/Phase_portrait)), 告訴我們這個系統其解運動的方向及行為, 以及決定系統的穩定性.
#### Matlab program for 2nd-order ODE
將 2nd-order autonomous system 改寫成 (引進 $Y=X'$)
$$
\frac{dX}{dt} = f_1(X, Y),\\
\frac{dY}{dt} = f_2(X, Y),
$$
例如無外力的簡諧運動其方程為
$$
\frac{dX}{dt} = Y,\\
\frac{dY}{dt} = -\omega^2X,
$$
而有阻尼的簡諧運動其方程為
$$
\frac{dX}{dt} = Y,\\
\frac{dY}{dt} = -\omega^2X-\gamma Y,
$$
* [pplane](https://www.mathworks.com/matlabcentral/fileexchange/61636-pplane)
---
### 2nd-order boundary value problem
二階邊界值問題(boundary value problem)相對初始值問題(initial value problem)要困難許多. 一般會以 shooting method 或是將方程式離散化求根的方式來解.
* [Lecture - ODE solver](https://hackmd.io/@teshenglin/ms_ode)
* [Lecture - fsolve](https://hackmd.io/@teshenglin/ms_fsolve)
---
### Higher order ordinary differential equation with initial condition
#### Example - Lorenz system
$$
\frac{dy_1}{dt} = \sigma(y_2 - y_1)\\
\frac{dy_2}{dt} = y_1(\rho-y_3) - y_2\\
\frac{dy_3}{dt} = y_1y_2 - \beta y_3,
$$
其中 $\rho = 28$, $\sigma = 10$, $\beta = 8/3$. 系統初始條件為 $(y_1(0), y_2(0), y_3(0)) = (0, 1, 0)$.
---
## Partial differential equation
#### Heat equation
$u = u(x,t)$ 描述在某個時間 $t$ 某個位置 $x$ 的溫度, 其方程為 ($D$ 是常數)
$$
u_t = Du_{xx}
$$
#### wave equation
$u = u(x,t)$ 描述在某個時間 $t$ 某個位置 $x$ 波的高度, 其方程為 ($c$ 是常數)
$$
u_{tt} = c^2u_{xx}
$$
* [Lecture - Chebfun](https://hackmd.io/@teshenglin/ms_chebfun)
---
## Analysis
### Stationary solution for 1st-order system
#### Example - 1st-order ODE
$$
\frac{dX(t)}{dt} = f(X(t))
$$
如果有個數字 $X_p$ 滿足 $f(X_p)=0$, 那 $X(t)\equiv X_p$ 會是這系統的一個解, 而且是個不動的常數解.
要找出所有這些不動的常數解, 就是要解 $f(X_p)=0$, 也就是**求根問題**.
#### Example
$$
\frac{dX(t)}{dt} = X - X^3
$$
這個系統有三個不動點, $X=0$, $X=1$ 以及 $X=-1$.
### Linear stability of the stationary solution
找出這些不動的解之後, 我們會想知道他們的穩定性, 也就是若對他做一點點擾動會不會跑掉. 最常見的手法就是在這個點附近做線性化, 也就是做泰勒展開式.
假設對 $X_p$ 擾動一點點的解長這樣: $X(t) = X_p+\epsilon Y(t)$, 他必須滿足原方程式: $\frac{d(X_p+\epsilon Y(t))}{dt} = f(X_p+\epsilon Y(t))$.
而我們有
$$
\frac{d(Xp+\epsilon Y)}{dt} = \epsilon\frac{d Y}{dt}
$$
$$
f(X_p+\epsilon Y) \approx f(X_p) + \epsilon f'(X_p)Y = \epsilon f'(X_p)Y
$$
因此可以得到
$$
\frac{dY}{dt} = f'(X_p)Y.
$$
因此若 $f'(X_p)>0$, 那一點點小擾動就會指數成長, 所以這不動點就是不穩定的.
反之, 若 $f'(X_p)<0$, 那小擾動都會指數遞減至零, 所以這不動點就是穩定的.
#### Example
$$
\frac{dX(t)}{dt} = X - X^3
$$
這個系統 $f(X)=X-X^3$, 所以 $f'(X) = 1-3X^2$. 將三個不動點套入得到
$$
f(0)=1, \quad f(1)=-2, \quad f(-1)=-2.
$$
所以有兩個穩定的不動點, $X=\pm 1$, 一個不穩定的不動點, $X=0$.
---
以上這些推導也適用於 system of 1st-order ODE, 只是這時 $f'(X_p)$ 會是個矩陣. 而判斷系統的穩定與否就要看 $e^{f'(X_p)}$ 的行為. 所以就要看 $f'(X_p)$ 的特徵值長怎樣. 如果有個特徵值大於零, 那 $e^{f'(X_p)}$ 就會長大, 也就是一點點擾動就會變大, 所以不動點就是不穩定的.
所以通常這裡我們需要判斷一個矩陣, $f'(X_p)$, 他特徵值會不會有大於零的, 以及大於零的這些裡最大的是誰. 這時需要用到 shift-inverse power method 來求**最大正數**的特徵值.
* [Lecture - Power method](https://hackmd.io/@teshenglin/ms_power)
---
#### Example - Allen-Cahn equation
$$
\frac{\partial u(x,t)}{\partial t} = \delta u_{xx} + u - u^3, \quad \delta\ll 1
$$
這個系統有三個不動解, $u(x,t)\equiv 0$, $1$ 以及 $-1$.