PythonでODEを数値的に解くにはどうすればよいですか?
検討
\ddot{u}(\phi) = -u + \sqrt{u}
以下の条件で
u(0) = 1.49907
と
\dot{u}(0) = 0
制約付き
0 <= \phi <= 7\pi.
最後に、x 座標と y 座標が u の関数として生成されるパラメトリック プロットを作成します。
問題は、これは 2 次微分方程式であるため、odeint を 2 回実行する必要があることです。初めて実行した後、もう一度実行しようとしましたが、ヤコビアン エラーが返されます。一度に 2 回実行する方法が必要です。
エラーは次のとおりです。
odepack.error: 関数とそのヤコビアンは呼び出し可能な関数でなければなりません
以下のコードが生成します。問題の行は 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()
編集
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}}]