Question

J'aimerais pouvoir faire autre chose à chaque étape de chaque étape pendant la résolution d'une ode (à l'aide d'une intégration d'Egny).Y a-t-il un moyen de le faire?Puis-je écrire mon propre boucle de temps et appeler un exemple unique.Runge-kutta étape par moi-même?Y a-t-il une routine en python ou devrais-je venir venir avec le mien?Je pense qu'il doit y en avoir un, car OdéTR, etc., devons utiliser une telle fonction.Donc, la question est, comment puis-je y accéder?

Donc, il devrait regarder quelque chose dans ces lignes:

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)

Était-ce utile?

La solution

Je suis maintenant venu avec ceci:

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]

ici, je peux faire ce que je veux pendant l'intégration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top