是否有可能採用scipy ODE集成商的單一步驟?我知道step
參數爲scipy.integrate.ode.integrate
,但我不知道如何設置t
這個參數,以保證它完全採用一個完整的步驟。最明顯的選擇是t=inf
,而是給出了一個ODE失敗::以單一ODE步驟
from scipy.integrate import ode
obj = ode(lambda t, y: -y)
obj.set_initial_value(1)
y_new = obj.integrate(inf, step=True)
-
DVODE-- At T (=R1) and step size H (=R2), the
corrector convergence failed repeatedly
or with abs(H) = HMIN
In above, R1 = 0.0000000000000D+00 R2 = Infinity
C:\Anaconda3\lib\site-packages\scipy\integrate\_ode.py:869: UserWarning:
vode: Repeated convergence failures. (Perhaps bad Jacobian supplied or
wrong choice of MF or tolerances.)
'Unexpected istate=%s' % istate))
如果我使用t=0
,那麼ODE根本不會前進。我可以選擇一個有限的正數,但是如果t
小於完整的步長,那麼這是保證完整步驟並跨過t
?我正在寫一個普通圖書館,不知道典型的步長是多少。
我不是在尋找一個固定的步驟。但即使是可變步驟求解器仍然有步驟(傳遞給'set_selout'的函數在每個之後都被調用)。我會嘗試從selout函數返回'-1'來做我想做的事。 – drhagen
是的,這就是我的答案的重點:'set_selout'是你可能想要的,但你的問題是關於用集成器執行一個步驟。 – Cyb3rFly3r
「數值積分器的設計並不是按照固定步驟設計的」 - 它取決於方法。例如,明確的[Runge-Kutta](https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods)使用固定步長。 – dkv