是否有可能采用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