2
我試圖解決任意n(多變量索引)值的Lane-Emden方程。爲了使用SciPy,我將二階ODE表示爲一組兩個一階耦合一階ODE。我有以下代碼:用SciPy解決ODE在double_scalars錯誤中遇到無效值
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
在這裏,我所定義披= THETA」
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()
但是,運行該代碼的結果在下面的錯誤:
RuntimeWarning: invalid value encountered in double_scalars
app.launch_new_instance()
起初,我認爲這是xi = 0方程奇異性的結果,所以我改變了我的積分間隔:
xi = np.linspace(1e-10, 16., 201)
這樣可以解決n = 0時的問題,但不會解決其他n值問題。我得到的情節沒有任何意義,而且顯然是錯誤的。
爲什麼我會收到此錯誤消息,以及如何修復我的代碼?
謝謝你的回覆!這很好,我的代碼現在可以工作了!你有什麼想法,爲什麼它只適用於n的整數值? –
我覺得'theta'小於或等於零時不喜歡它。如果你看看解決方案的輸出,它會在'theta = 0'停下來。 –
這很有道理,因爲那會導致複雜的解決方案。有沒有辦法使用ODEint直到theta <0? –