n(ポリトロープインデックス)の任意の値に対するLane-Emden方程式を解こうとしています。 SciPyを使用するために、2次ODEを2つの結合された1次ODEの集合として表現しました。私は、まずSciPyでODEを解くとdouble_scalarsエラーで無効な値が返される
RuntimeWarning: invalid value encountered in double_scalars
app.launch_new_instance()
:私は次のエラーで、このコードの結果を実行している、しかし、ファイ=シータ」
y0 = [1.,0.]
xi = np.linspace(0., 16., 201)
for n in range(0,11):
sol = odeint(poly, y0, xi, args=(n/2.,))
plt.plot(xi, sol[:, 0], label=str(n/2.))
plt.legend(loc='best')
plt.xlabel('xi')
plt.grid()
plt.show()
を定義し、ここで
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
def poly(y,xi,n):
theta, phi = y
dydt = [phi/(xi**2), -(xi**2)*theta**n]
return dydt
:私は、次のコードを持っていますこれはxi = 0での方程式の特異点の結果だと思ったので、積分間隔を変更しました:
xi = np.linspace(1e-10, 16., 201)
これはn = 0の問題を修正しますが、nの他の値は修正しません。私が得たプロットは意味をなさないだけで間違っています。
なぜこのエラーメッセージが表示され、コードを修正できますか?
返信ありがとうございます!それは素晴らしいです、私のコードは今動作します!なぜそれがnの整数値に対してしか機能しないのか分かりますか? –
'theta 'がゼロ以下のときは好きではないと思います。解の出力を見ると、それは 'theta = 0'で停止します。 –
これは理にかなっています。複雑な解決策につながるからです。 theta <0のポイントまでODEintを使用する方法はありますか?興味深いもの: –