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