[英]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.interp
或scipy.interpolate.interp1d
。
可以通過r.set_initial_value(V0,t0).set_f_params(V,vtime,R)來設置時間和函數本身以外的參數,但函數中的名稱必須為arg1,arg2等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.