我正在尝试使用scipy.integrate.ode类在Python中用数字解决Lane-Emden方程。
出于某种原因,我的代码适用于n的整数值(多变指数),例如3,但不适用于非整数值,如2.9和3.1。
我收到运行时警告," 7:运行时警告:在double_scalars"中遇到无效值和打印声明"打印f0,f1"表明当n不是整数时,有几个值是nan。
from scipy.integrate import ode
import numpy as np
def rhs(zet, u, n):
x = u[0] # theta
y = u[1] # phi
f0 = -u[1]/(zet**2)
f1 = (u[0]**(n))*(zet**2)
print f0, f1
return np.array([f0,f1])
r = ode(rhs).set_integrator("vode", method="adams", atol=1.e-13, rtol=1.e-13, nsteps=15000, order=12)
y0 = np.array([1.,0.])
zeta0 = 0.000001
r.set_initial_value(y0, zeta0)
n=3.1
r.set_f_params(n)
dzeta = 0.000001
zeta = [zeta0]
theta = [y0[0]]
while r.successful() and r.y[0] > 0.0:
r.integrate(r.t + dzeta)
zeta.append(r.t)
theta.append(r.y[0])
可能导致此问题的原因是什么?