本文簡述用scipy工具包求解微分方程的基本方法。.
導入必要的工具包:
import matplotlib.pyplot as plt
import scipy as sp
from scipy.integrate import odeint
物體下落時,空氣摩擦力的方程如下:
空氣摩擦力表達式的自定義函數:
def dvdt(v, t):
return 3*v**2 - 5
v0 = 0
解法如下:
t = np.linspace(0, 1, 100)
sol = odeint(dvdt, v0, t)
v_sol = sol.T[0]
v_sol
v_sol的結果如圖2:
繪制出微分方程的解集圖,如圖3:
plt.plot(t, v_sol)
例2:二階微分方程的求解(如圖4)
圖4中文字及方程的輸入形态,如下:
**二階ODE方程**
鐘擺方程如下:
$$\theta'' - \sin(\theta) = 0$$
Scipy隻能用來解一階ODE方程,但是所有的任何二階ODE都可以轉換為兩個一階ODE方程。同理,更高階的ODE方程也可轉換為多個一階ODE方程來解。
設 $\omega = d\theta/dt$,那麼可以推導出以下的ODE方程:
$$d \omega / dt = \sin(\theta)$$
$$d \theta / dt = \omega $$
設 $S = (\theta, \omega)$
例4中表達式的自定義函數及其初始值:
def dSdt(S, t):
theta, omega = S
return [omega,
np.sin(theta)]
theta0 = np.pi/4
omega0 = 0
S0 = (theta0, omega0)
求解代碼如下:
t = np.linspace(0, 20, 100)
sol = odeint(dSdt, S0, t)
theta, omega = sol.T
求解結果如圖5:
plt.plot(t, theta)
plt.show()
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!