我编写了以下代码,类似于我编写的众多代码。这个发送了一个错误,我无法解决。有什么帮助吗?
def HUB(H,z,rc,beta,b,w,c,Om):
H1 = ((1/H**2)*(3*b-3+beta)*Om*(1/(z+1))**(3*b-3+beta))-0.33*beta**3*w*(1/(z+1))**(-2*beta)
H2 = (2*(1-beta-0.166*(beta**2*w*(1/(z+1))**(-2*beta))-2*c**2*(1-(1/(2*rc*H)))))
hubble = -(H/(1+z))*(H1/H2)
return hubble
def solution(z1,z,H0,rc,beta,b,w,c,Om):
U = odeint(HUB,H0,[z1,z], args=(rc,beta,b,w,c,Om)) [-1]
return U
for z in np.arange(-1,2.05,0.05):
q=solution(0,z,69.9,0.08,0.498,0.035,20,0.69,0.235)[-1]
print(z,q)
... 错误是
Traceback (most recent call last):
File "C:\Users\esadr21\Desktop\INHDEFC\ANHDEIFC\m1\1st Model .py", line 24, in <module>
q=solution(0,z,69.9,0.08,0.498,0.035,20,0.69,0.235)[-1]
File "C:\Users\esadr21\Desktop\INHDEFC\ANHDEIFC\m1\1st Model .py", line 20, in solution
U = odeint(HUB,H0,[z1,z], args=(rc,beta,b,w,c,Om)) [-1]
File "C:\Python36-32\lib\site-packages\scipy\integrate\odepack.py", line 215, in odeint
ixpr, mxstep, mxhnil, mxordn, mxords)
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
感谢您的帮助。
答案 0 :(得分:0)
表达式中某处可能有一个负数的幂。例如,对于(-1)**(1/2)
,Python返回6.123233995736766e-17+1j
,它是一个复数。这里的ODES例程仅适用于实数值。
我对您的代码做了两件事。
我将odeint的“时间”参数更改为一系列的点,而不仅仅是两个。
def HUB(H,z,rc,beta,b,w,c,Om):
H1 = ((1/H**2)*(3*b-3+beta)*Om*(1/(z+1))**(3*b-3+beta))-0.33*beta**3*w*(1/(z+1))**(-2*beta)
H2 = (2*(1-beta-0.166*(beta**2*w*(1/(z+1))**(-2*beta))-2*c**2*(1-(1/(2*rc*H)))))
hubble = -(H/(1+z))*(H1/H2)
return hubble
def solution(z1,z,H0,rc,beta,b,w,c,Om):
U = odeint(HUB,H0,np.linspace(z1,z,3), args=(rc,beta,b,w,c,Om))[-1]
return U
for z in [-0.5, 1., 2.]:
q=solution(0,z,69.9,0.08,0.498,0.035,20,0.69,0.235)[-1]
print(z,q)