簡體   English   中英

有沒有辦法在python中求解耦合微分方程組?

[英]Any way to solve a system of coupled differential equations in python?

我一直在研究sympy和scipy,但找不到或想出如何求解耦合微分方程組(非線性,一階)。

那么有沒有辦法解決耦合微分方程?

方程的形式如下:

V11'(s) = -12*v12(s)**2
v22'(s) = 12*v12(s)**2
v12'(s) = 6*v11(s)*v12(s) - 6*v12(s)*v22(s) - 36*v12(s)

初始條件為v11(s),v22(s),v12(s)。

有關scipy的ODE的數值解,請參閱scipy.integrate.solve_ivpscipy.integrate.odeintscipy.integrate.ode

SciPy Cookbook中給出了一些例子(向下滾動到“常微分方程”部分)。

除了已經提到的SciPy方法odeintode ,它現在還有更新且更方便的solve_ivp 一個完整的示例,將[v11, v22, v12]編碼為數組v

from scipy.integrate import solve_ivp
def rhs(s, v): 
    return [-12*v[2]**2, 12*v[2]**2, 6*v[0]*v[2] - 6*v[2]*v[1] - 36*v[2]]
res = solve_ivp(rhs, (0, 0.1), [2, 3, 4])

這解決了系統在間隔(0, 0.1)上的初始值[2, 3, 4] 結果有自變量(在你的表示法中為s)為res.t

array([ 0.        ,  0.01410735,  0.03114023,  0.04650042,  0.06204205,
        0.07758368,  0.0931253 ,  0.1       ])

這些值是自動選擇的。 可以提供t_eval以在期望點處評估解:例如, t_eval=np.linspace(0, 0.1)

因變量(我們正在尋找的函數)在res.y

array([[ 2.        ,  0.54560138,  0.2400736 ,  0.20555144,  0.2006393 ,
         0.19995753,  0.1998629 ,  0.1998538 ],
       [ 3.        ,  4.45439862,  4.7599264 ,  4.79444856,  4.7993607 ,
         4.80004247,  4.8001371 ,  4.8001462 ],
       [ 4.        ,  1.89500744,  0.65818761,  0.24868116,  0.09268216,
         0.0345318 ,  0.01286543,  0.00830872]])

使用Matplotlib,此解決方案被繪制為plt.plot(res.t, res.yT) (如果我提供t_eval ,則繪圖會更平滑)。

解決方案的情節

最后,如果系統涉及的順序高於1的方程式,則需要使用簡化為一階系統

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM