Как я могу численно решить ODE в Python?Численное решение ODE в Python
Рассмотрим
\ddot{u}(\phi) = -u + \sqrt{u}
со следующими условиями
u(0) = 1.49907
и
\dot{u}(0) = 0
с ограничением
0 <= \phi <= 7\pi.
Затем, наконец, я хочу создать параметрический график, в котором координаты x и y генерируются как функция u.
Проблема в том, что мне нужно запустить odeint дважды, так как это дифференциальное уравнение второго порядка. Я попытался запустить его после первого раза, но он вернулся с ошибкой якобиана. Должен быть способ запустить его дважды все сразу.
Здесь ошибка:
odepack.error: The function and its Jacobian must be callable functions
, который ниже генерирует код. Линия, о которой идет речь, - золь = 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()
Редактировать
Я пытаюсь построить график на странице 9
Вот сюжет с 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}}]
Эта ссылка поможет? http://stackoverflow.com/questions/2088473/integrate-stiff-odes-with-python – yosukesabai