scipy.integrate.ode集成例程的接口提供了一种在任何步骤违反约束时停止集成的方法set_solout.但是,即使在最简单的示例中,我也无法使用此方法.这是一次尝试:
import numpy as np
from scipy.integrate import ode
def f(t, y):
"""Exponential decay."""
return -y
def solout(t, y):
if y[0] < 0.5:
return -1
else:
return 0
y_initial = 1
t_initial = 0
r = ode(f).set_integrator('dopri5') # Integrator that supports solout
r.set_initial_value(y_initial, t_initial)
r.set_solout(solout)
# Integrate until t = 5, but stop when solout constraint violated
r.integrate(5)
# The time when solout should have terminated integration:
intersection_time = np.log(2)
Run Code Online (Sandbox Code Playgroud)
集成应该在solout时停止t = log(2) = 0.693...,但是很快就会继续,直到 …