?DoublePendulum類的equations()用于計算各個未知函數(shù)的導(dǎo)數(shù),輸入?yún)?shù)w數(shù)組中的變量依次為th1、th2、v1和v2,它們分別表示上球角度、下球角度、上球角速度和下球角速度。
返回值為每個變量的導(dǎo)數(shù)dth1、dth2、dv1和dv2,它們分別表示上球角速度、下球角速度、上球角加速度和下球角加速度。其中,dth1和dth2很容易計算,它們直接等于傳入的角速度變量。
為了計算dv1和dv2,需要將微分方程組變形為如下格式:
由于兩個微分方程對于和來說是兩個如下形式的一次方程:
因此可以求出其中的系數(shù)a、b、c、d、e、f,?然后調(diào)用linalg.solve()解出和。
在double_pendulum_odeint()中,?調(diào)用odeint()對雙擺的方程組求數(shù)值解。將odeint()得到的最終的小球狀態(tài)保存到pendulum.init_status中,作為下一次調(diào)用odeint()的初始值,因此多次調(diào)用double_pendulum_odeint()可以生成連續(xù)的運動軌跡。函數(shù)返回4個數(shù)組,分別是兩個小球的X-Y軸的坐標(biāo)。
最后是主程序部分,我們使用小角度和大角度的初始值分別計算雙擺的擺動軌跡。小初始角度時小球的運動軌跡如圖18-5所示(見文前彩插)。大初始角度時小球的運動軌跡如圖18-6所示(見封三彩插)??梢钥闯觯?dāng)初始角度很大時,擺動出現(xiàn)混沌現(xiàn)象。