Tur*_*ten 5 python numpy python-3.x
我是Python的新手,所以请保持温柔.
我真的不知道我的代码有什么问题.
这里是:
import numpy as np
def epsilon(t):
epsilon = (1 - np.exp(-pow(t, 4)))
return epsilon
def r(t):
r = pow( (epsilon(t) - 16) / 4, 1/4)
return r
print(r(0))
Run Code Online (Sandbox Code Playgroud)
因为epsilon(0) = 0
,我希望(分析上)得到r =( - 16/4)^(1/4)=( - 1)^(1/4)*sqrt(2)= exp(i pi/4)*sqrt(2)= 1 + 1 i
但相反,我得到:
RuntimeWarning: invalid value encountered in double_scalars
r = pow((4 * epsilon(t) - 16) / 4, 1/4)
nan
Run Code Online (Sandbox Code Playgroud)
我试图找到错误.如果我打印epsilon(0)
我按预期得到0,如果我epsilon(0)
手动设置如下:
def r(t):
r = pow( 0 - 16) / 4, 1/4)
return r
print(r(0))
Run Code Online (Sandbox Code Playgroud)
我得到1 + 1 j
.如果我删除它to the power of 1/4
,它可以工作,我得到-4
import numpy as np
def epsilon(t):
epsilon = (1 - np.exp(-pow(t, 4)))
return epsilon
def r(t):
r = (epsilon(t) - 16) / 4
return r
print(r(0))
Run Code Online (Sandbox Code Playgroud)
那么为什么呢
import numpy as np
def epsilon(t):
epsilon = (1 - np.exp(-pow(t, 4)))
return epsilon
def r(t):
r = pow( (epsilon(t) - 16) / 4, 1/4)
return r
print(r(0))
Run Code Online (Sandbox Code Playgroud)
我收到这个错误?
我注意到返回的值epsilon()
是类型<class 'numpy.float64'>
。当我们将此值包含在 Python 的内置pow()
函数中时,就会出现问题。例如,尝试pow(np.float64(-4.0), 1/4)
;它也坏了。或许是因为这样:
对于混合操作数类型,适用二进制算术运算符的强制规则。 内置函数:pow()
我设法通过将结果转换为epsilon()
to来解决这个问题float
。
r = pow( float((epsilon(t) - 16) / 4), 1/4)
。