Come risolvo numericamente un ODE in Python?Risoluzione ODE numerica in Python
consideri
\ddot{u}(\phi) = -u + \sqrt{u}
con le seguenti condizioni
u(0) = 1.49907
e
\dot{u}(0) = 0
con il vincolo
0 <= \phi <= 7\pi.
Infine, voglio produrre un grafico parametrico in cui le coordinate xey sono generate come una funzione di u.
Il problema è che ho bisogno di eseguire due volte odeint poiché questa è un'equazione differenziale del secondo ordine. Ho provato a farlo funzionare di nuovo dopo la prima volta ma torna con un errore Jacobiano. Ci deve essere un modo per eseguirlo due volte in una volta.
Ecco l'errore:
odepack.error: The function and its Jacobian must be callable functions
che il codice qui sotto genera. La linea in questione è il 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()
Modifica
Sto cercando di costruire la trama a pagina 9
Ecco la trama con Mathematica
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}}]
questo collegamento è utile? http://stackoverflow.com/questions/2088473/integrate-stiff-odes-with-python – yosukesabai