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 與標準化不同的是,白化處理沒有減去均值。下面是按步驟實...