次の連立方程式の解を実装しました
dy/dt = -t*y(t) - x(t)
dx/dt = 2*x(t) - y(t)^3
y(0) = x(0) = 1.
0 <= t <= 20
最初は Mathematica で、その後 Python で。
Mathematica での私のコード:
s = NDSolve[
{x'[t] == -t*y[t] - x[t], y'[t] == 2 x[t] - y[t]^3, x[0] == y[0] == 1},
{x, y}, {t, 20}]
ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, 20}]
そこから、次のプロットを取得します: Plot1 (403 Forbidden メッセージが表示された場合は、URL フィールド内で Enter キーを押してください)
後で、同じものを python にコーディングしました。
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
g = lambda t: t
def f(z,t):
xi = z[0]
yi = z[1]
gi = z[2]
f1 = -gi*yi-xi
f2 = 2*xi-yi**3
return [f1,f2]
# Initial Conditions
x0 = 1.
y0 = 1.
g0 = g(0)
z0 = [x0,y0,g0]
t= np.linspace(0,20.,1000)
# Solve the ODEs
soln = odeint(f,z0,t)
x = soln[:,0]
y = soln[:,1]
plt.plot(x,y)
plt.show()
そして、これは私が得るプロットです: Plot2 (403 Forbidden メッセージが表示された場合は、URL フィールド内で Enter キーを押してください)
Mathematica の解をより小さなフィールドで再度プロットすると、次のようになります。
ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, 6}]
Python ソリューションと同様の結果が得られます。軸だけがずれます。
プロットに大きな違いがあるのはなぜですか?私は何を間違っていますか?
特に f1 が計算される場所で、モデルの Python 実装が間違っていると思われます。あるいは、この場合のように、パラメトリック方程式をプロットするのに plot() 関数がまったく役に立たないかもしれません。
ありがとう。
追伸:テキスト内の画像を平手打ちしないことであなたの人生を難しくして申し訳ありません。まだ評判が足りない。