scipy庫中的odeint函式

2021-10-04 13:52:44 字數 2200 閱讀 4200

scipy.integrate.odeint(func,y0,t,args =(),dfun = none,col_deriv = 0,full_output = 0,ml = none,mu = none,rtol = none,atol = none,tcrit = none,h0 = 0.0,hmax = 0.0,hmin = 0.0,ixpr = 0,mxstep = 0,mxhnil = 0,mxordn = 12,mxords = 5,printmessg = 0,tfirst = false)
解決一階ode-s的剛性或非剛性系統的初值問題:

dy/dt = func(y, t, …) [or func(t, y, …)]

主要參量

func callable(y,t,…)或callable(t,y,…)

計算t處y的導數。如果簽名是,則必須設定引數 tfirst。callable(t, y, ...)true

y0 陣列

y的初始條件(可以是向量)。

t 陣列

求解y的時間點序列。初始值點應該是此序列的第乙個元素。此序列必須單調增加或單調減少;允許重複的值。

args 元組,可選

傳遞給函式的額外引數。

例子:

擺錘的重力角在摩擦力作用下的角度θ的二階微分方程可以寫成:

theta』』(t) + btheta』(t) + csin(theta(t)) = 0

其中b和c是正常數,符號(』)表示導數。要使用odeint來求解該方程,我們必須首先將其轉換為一階方程組。通過定義角速度,我們得到系統:omega(t) = theta』(t)

theta'(t)

= omega(t)

omega'(t)

=-b*omega(t)

- c*sin(theta(t)

)

令y為向量[ θ,ω ]。我們在python中將該系統實現為:

def

pend

(y, t, b, c)

: theta, omega = y

dydt =

[omega,

-b*omega - c*np.sin(theta)

]return dydt

我們假設常數為b = 0.25和c = 5.0;

b =

0.25

c =5.0

對於初始條件,我們假設擺是接近垂直的,theta(0) = pi -0.1,並且最初處於靜止狀態,所以 omega(0) =0。那麼初始條件的向量為

y0 =

[np.pi -

0.1,

0.0]

我們將以間隔0 <= t <= 10的101個均勻間隔的樣本生成乙個解。因此,我們的時間陣列為:

t = np.linspace(0,

10,101)

呼叫odeint以生成解決方案。要將引數b和c傳遞 給pend,我們odeint使用args 引數使它們能夠使用。

from scipy.integrate import odeint

sol = odeint(pend, y0, t, args=

(b, c)

)

該解決方案是形狀為(101,2)的陣列。第一列是theta(t),第二列是omega(t)。以下**繪製了這兩個元件。

參考scipy.org

scipy庫中的leastsq函式

只需要輸入一系列樣本點,給出待求函式的基本形狀 如二元二次函式就是一種形狀 f x,y w0x 2 w1y 2 w2xy w3x w4y w5 在形狀給定後,我們只需要求解相應的係數w0 w5 即可得到相應的引數。至於中間到底是怎麼求的,這一部分內容就像乙個黑箱一樣。則使用leastsq函式求解其擬...

SciPy中的統計模組

numpy 替我們搞定了向量和矩陣的相關操作,基本上算是乙個高階的科學計算器。scipy 基於 numpy 提供了更為豐富和高階的功能擴充套件,在統計 優化 插值 數值積分 時頻轉換等方面提供了大量的可用函式,接下來我們就學習一下 scipy 中的統計和優化模組。import numpy as np...

scipy 中的whiten函式

呼叫kmeans函式,kmeans中呼叫了whited函式。查後,發現whiten是對輸入資料按標準差做歸一化處理。e 經過whiten後 x i xis tand dev atio nx frac xi s tand dev atio nxi 與標準化不同的是,白化處理沒有減去均值。下面是按步驟實...