Python Tutorials

Part 1. 程式基礎與數學篇

Programming Basics and Math Python

 

Section 6. 微分方程式

 

Section 6. 微分方程式

主題 1. 分離變數法型的微分方程

解簡易常微分方程式(ODE: Ordinary Differential Equation),我們的 Python 模組還是一樣使用 sympy,解微分方程式的函數是dsolve()

dsolve(以Eq(A, B)建構的方程式,函數)

A是等號左邊的微分方程,B是右邊常數,因此在某些問題,我們必須做移項。在一般慣用符號上,微分方程式會用y',但是,其實就是y'(t)也就是f '(t)。
電腦程式不會區分哪一型,我們要展示各類都可以處理,才這樣分。其實輸入都是一樣的。


我們看範例,解微分方程式

from sympy import *                                                                                       
t = symbols('t')

y = Function('y')
dsolve(Eq(Derivative(y(t), t) -3*y(t), 2), y(t))

Derivative(y(t), t)就是微一階y'(t);若微二階 y''(t) 就是Derivative(y(t), t, t),所以,Eq(Derivative(y(t), t) -3*y(t), 2) 就是以 表示的微分方程式

Derivative(y(t), t) 也可以用 y(t).diff(t) 表示,上例就是 Eq(y(t).diff(t)-3*y(t), 2)
讀者可以自取所好。

 

我們看一下結果
dsolve(Eq(Derivative(y(t), t) -3*y(t), 2), y(t))
Out[2]: Eq(y(t), C1*exp(3*t)/3 - 2/3)
Eq(y(t), C1*exp(3*t)/3 - 2/3) 其實就是y(t)=C1*exp(3*t)/3 - 2/3,正式鍵出來就是

範例: 解微分方程式

此題要移項成為


Python碼如下:

dsolve(Eq(Derivative(y(t), t) - (y(t)+1)/(t-3), 0), y(t))
Out[3]: Eq(y(t), C1*t - 3*C1 - 1)

Eq(y(t), C1*t - 3*C1 - 1) 其實就是第7題中間的y(t)=C(t-2) -1,第7題尚有期始條件y(1)=0,帶入解C,就很簡單了。

主題 2. 積分因子型的微分方程

我們看範例,解微分方程式 ,此題要移項成為


Python碼如下:

dsolve(Eq(Derivative(y(t),t) - 2*t*y(t)-3*t, 0), y(t))
Out[4]: Eq(y(t), C1*exp(t**2)/2 - 3/2)

Eq(y(t), C1*exp(t**2)/2 - 3/2) 其實就是y(t)=C1*exp(t**2)/2 - 3/2,正式鍵出來就是

 

最後,雖然目前範例都是一階微分方程,為了普及一般,二階的輸入範例如下:

解二階一次微分方程

dsolve(Eq(Derivative(y(t), t, t) + 9*y(t), 1), y(t))
Out[5]: Eq(y(t), C1*sin(3*t) + C2*cos(3*t) + 1/9)

這個解有三角函數:
另外,Derivative(y(t), t, t) 也可以用y(t).diff(t, t)表示,此題就是
Eq(y(t).diff(t, t) + 9*y(t), 1)。