W jaki sposób mogę rozwiązać problem ODE w języku Python?Numeryczne rozwiązywanie ODE w Pythonie
Rozważmy
\ddot{u}(\phi) = -u + \sqrt{u}
z następujących warunków
u(0) = 1.49907
i
\dot{u}(0) = 0
z ograniczeniem
0 <= \phi <= 7\pi.
W końcu chcę utworzyć wykres parametryczny, w którym współrzędne x i y są generowane w funkcji u.
Problem polega na tym, że muszę uruchomić dwa razy odiuint, ponieważ jest to równanie różniczkowe drugiego rzędu. Próbowałem go uruchomić ponownie po raz pierwszy, ale wraca z błędem jakobian. Musi istnieć sposób na uruchomienie go dwa razy na raz.
Tutaj jest błąd:
odepack.error: The function and its Jacobian must be callable functions
który poniżej generuje kod. Linia, o której mowa, to sol = odint.
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()
Edit
próbuję skonstruować fabułę na stronie 9
Oto działka z 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}}]
Czy ten link pomaga? http://stackoverflow.com/questions/2088473/integrate-stiff-odes-with-python – yosukesabai