我希望能够在解决ODE(使用scipy的集成)期间的每个时间步骤中执行其他操作。有办法吗?我可以以某种方式编写自己的时间循环,只需调用一个例如Runge-Kutta一步一步走?在python中是否有例程或者我必须自己提出?我认为必须有一个,因为odeint等必须使用这样的功能。所以问题是,我该如何访问它们?
所以它应该沿着这些方向寻找:
from scipy.integrate import *
from pylab import *
def deriv(y, t):
a = -2.0
b = -0.1
return array([y[1], a*y[0]+b*y[1]])
time = linspace(0.0, 10.0, 1000)
dt = 10.0/(1000-1)
yinit = array([0.0005, 0.2])
for t in time:
# doSomething, write into a file or whatever
y[t] = yinit
yinit = RungeKutta(deriv, yinit, t, dt, varargs)
答案 0 :(得分:1)
我现在来了:
from pylab import *
from scipy.integrate import *
def RHS(t, x):
return -x
min_t = 0.0
max_t = 10.0
num_t = 1e2
grid_t = linspace(min_t, max_t, num_t)
grid_dt = (max_t - min_t)/(num_t - 1)
y = zeros(num_t, dtype=complex)
y[0] = complex(1.0, 0.0)
solver = complex_ode(RHS)
solver.set_initial_value(y[0], grid_t[0]).set_integrator('dopri5')
for idx in range(1, int(num_t)):
solver.integrate(solver.t + grid_dt)
y[idx] = solver.y[0]
在这里,我可以在整合过程中做任何我想做的事。