Équations différentielles en Python: étape unique
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)
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