本章首先介紹單擺和雙擺系統(tǒng)的公式推導(dǎo),然后通過odeint()對其進行數(shù)值求解并制作動畫演示程序。
18.1 單擺模擬
如圖18-1所示,有一根不可伸長、質(zhì)量不計的細棒,上端固定,下端系一質(zhì)點,這樣的裝置叫做單擺。
根據(jù)牛頓力學(xué)定律,我們可以列出如下微分方程:
其中,θ為單擺的擺角,l為單擺的長度,g為重力加速度。
此微分方程的符號解無法直接求出,因此只能調(diào)用odeint()對其求數(shù)值解。
odeint()的調(diào)用參數(shù)如下:
odeint(func, y0, t, ...)
其中,func是Python的一個函數(shù)對象,用來計算微分方程組中每個未知函數(shù)的導(dǎo)數(shù);y0為微分方程組中每個未知函數(shù)的初始值;t為需要進行數(shù)值求解的時間點。它返回的是一個二維數(shù)組result,其第0軸的長度為t的長度,第1軸的長度為變量的個數(shù),因此result[:,i]為第i個未知函數(shù)的解。
計算微分的func函數(shù)的調(diào)用參數(shù)為func(y, t),其中y是一個數(shù)組,為每個未知函數(shù)在t時刻的值,而func的返回值是每個未知函數(shù)在t時刻的導(dǎo)數(shù)。
odeint()要求每個微分方程只包含一階導(dǎo)數(shù),因此我們需要對前面的微分方程進行如下變形: