Numérique ODE de problèmes en Python

Comment puis-je résoudre numériquement une ODE en Python?

Envisager

Numérique ODE de problèmes en Python

\ddot{u}(\phi) = -u + \sqrt{u}

avec les conditions suivantes

u(0) = 1.49907

et

\dot{u}(0) = 0

avec la contrainte

0 <= \phi <= 7\pi.

Puis enfin, je veux produire une représentation paramétrique de la parcelle où les coordonnées x et y sont générés en fonction de u.

Le problème c'est que j'ai besoin d'exécuter odeint deux fois, car c'est un second ordre de l'équation différentielle.
J'ai essayé de l'avoir à courir à nouveau après la première fois, mais il revient avec une Jacobienne d'erreur. Il doit y avoir un moyen de l'exécuter deux fois plus que tous à la fois.

Voici l'erreur:

odepack.erreur: La fonction et de son Jacobien doit être appelées fonctions

dont le code ci-dessous génère. La ligne en question est le sol = odeint.

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from numpy import linspace


def f(u, t):
    return -u + np.sqrt(u)


times = linspace(0.0001, 7 * np.pi, 1000)
y0 = 1.49907
yprime0 = 0
yvals = odeint(f, yprime0, times)

sol = odeint(yvals, y0, times)

x = 1 / sol * np.cos(times)
y = 1 / sol * np.sin(times)

plot(x,y)

plt.show()

Modifier

Je suis en train de construire l'intrigue, à la page 9

La Mécanique Classique Taylor

Voici l'intrigue avec Mathematica

Numérique ODE de problèmes en Python

In[27]:= sol = 
 NDSolve[{y''[t] == -y[t] + Sqrt[y[t]], y[0] == 1/.66707928, 
   y'[0] == 0}, y, {t, 0, 10*\[Pi]}];

In[28]:= ysol = y[t] /. sol[[1]];

In[30]:= ParametricPlot[{1/ysol*Cos[t], 1/ysol*Sin[t]}, {t, 0, 
  7 \[Pi]}, PlotRange -> {{ -2, 2}, { -2.5, 2.5}}]

OriginalL'auteur dustin | 2013-04-10