Python新手,不知道我的代码有什么问题

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)

我收到这个错误?

Sch*_*mes 1

我注意到返回的值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)