Python中的微分方程:单一时间步

时间:2014-01-10 13:26:41

标签: python ode

我希望能够在解决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)

1 个答案:

答案 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]

在这里,我可以在整合过程中做任何我想做的事。