odeint:根据规则“安全”,无法将数组数据从dtype'O'转换为dtype'float64'

问题描述

我终生无法找到解决方案。这是我的代码,这是一个非常简单的颂歌,所以我不知道我要去哪里错了:

H0 = float(3*10**(17)) # seconds 
me = 0.000511 # GeV/c^2
e0 = 55.26349406*1e+15 # e^2⋅GeV^−1⋅m^−1
a = 1/137 
nb = 0.016

def efrac(Xe,x,H0,me,e0,a,nb):
    A = (9.78*a**2)/(H0*me**2)
    dXedx = A*(np.log(x)/(x**3)) * ((1-Xe)*((me*e0)/(2*np.pi))**(3/2)*exp(-x)-(x**(3/2)*Xe**2*nb))
    return dXedx
    
x = np.linspace(0,1.0,1000)
Xe0 = 1.0 
sol = odeint(efrac,Xe0,args=(H0,nb))

解决方法

您并非从干净的工作空间开始,函数exp可能是从sympy导入的。

将其更正为np.exp之后,我从x=0得到了np.log(x)/x**3处的第一次评估的明显的零除误差。