我希望能够在解决ODE(使用scipy的积分)的每个步骤中做其他事情。有办法吗?我能以某种方式编写自己的时间循环并仅调用一个龙格·库塔独自走一步? 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)

最佳答案

我现在想到了:

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]


在这里,我可以做整合期间想要做的任何事情。

关于python - Python中的微分方程:单一时间步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21045539/

10-10 12:45