为什么非整数指数会导致nan出现在Python中?

时间:2015-07-01 18:15:43

标签: python numpy scipy ode numerical-integration

我正在尝试使用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])

可能导致此问题的原因是什么?

0 个答案:

没有答案