Je résous actuellement un système d'équations différentielles en python utilisant odeint pour simuler des particules chargées dans un champ (la source provient de ce package):Python scientifique: interrompre l'équation différentielle de résolution avec une condition
time = np.linspace(0, 5, 1000)
def sm(x, t):
return np.array([x[1], eta*Ez0(x[0])])
traj = odeint(sm,[0,1.], time)
Il fonctionne très bien, mais je voudrais arrêter le calcul dès que x [0] < 0. pour l'instant, je bloque juste l'évolution du sytem:
def sm1(x, t):
if x[0] < 0:
return np.array([0, 0])
else:
return np.array([x[1], eta*Ez0(x[0])])
traj = odeint(sm1,[0,1.],time)
mais je Gess il y a de meilleures solutions. J'ai trouvé this mais il me semble qu'il corrige le nombre de pas, ce qui est regrettable. Toute suggestion appréciée.
Votre solution semble assez raisonnable pour moi. Que pensez-vous qui ne va pas avec? –
vous obtenez un avertissement: lsoda-- à courant t (= r1), mxstep (= i1) étapes prises sur cet appel avant d'atteindre tout Dans le message ci-dessus, I1 = 500 Dans le message ci-dessus, R1 = 0,4223349048304E + 00 Excédent de travail effectué sur cet appel (peut-être un mauvais type Dfun). Exécuter avec full_output = 1 pour obtenir des informations quantitatives. – Mermoz