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? –