簡體   English   中英

如何使用dopri5(runge-kutta45)將數組的第i個值傳遞給scipy.integrate?

[英]How to pass the i-ith value of an array to scipy.integrate using dopri5 (runge-kutta45)?

我正在嘗試使用sci.integrate python模塊在ODE時間上解決一個簡單的一階V(電容器上的電壓):

def f(t, V, Vin, vtime, R):
    return (Vin[vtime==t][0]-V)/(R*get_alpha(V))

R = .5
V0 = 0.
t0, dt, tmax = vtime[0], vtime[1]-vtime[0], vtime[-1]
result, time = np.zeros_like(V), vtime

r = ode(f).set_integrator('dopri5')
r.set_initial_value(V0, t0).set_f_params(V, vtime, R)

i = 0

while (r.successful()) & (r.t < tmax):
    result[i] = r.integrate(r.t+dt)[0]
    i+=1

如您所見,我的右側函數取決於輸入電壓(存儲在數組Vin中 )和恆定電阻( R ),我都需要將這兩者作為參數傳遞給求解器中的函數時間。

scipy文檔頁面上給出的示例對我來說還不夠清楚,因為我無法簡單地調用r.set_f_params(Vin,R)。

設置這些參數的正確方法是什么?

您將需要為Vin實現一些插值公式。 在最簡單的情況下,

def getVin(t): k = int( (t-t0Vin)/dtVin ); return Vin[k];

當然,您必須提供Vin采樣時間的參數t0Vin, dtVin

對於更一般的情況,請使用插值函數numpy.interpscipy.interpolate.interp1d

可以通過r.set_initial_value(V0,t0).set_f_params(V,vtime,R)來設置時間和函數本身以外的參數但函數中的名稱必須為arg1,arg2等。

暫無
暫無

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

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