python中的负pow

python中的负pow,python,math,pow,Python,Math,Pow,我有这个问题 >>> import math >>> math.pow(-1.07,1.3) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: math domain error 导入数学 >>>数学功率(-1.07,1.3) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:数

我有这个问题

>>> import math
>>> math.pow(-1.07,1.3)  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
ValueError: math domain error
导入数学 >>>数学功率(-1.07,1.3) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:数学域错误
有什么建议吗

我正在使用python 2.5.4,我得到了以下信息:

>>> import math
>>> math.pow(-1.07,1.3)  
nan
您使用的python版本是什么?

(-1.07)1.3将不是实数,因此数学域错误

如果您需要一个复数,ab必须重写为eb ln a,例如

如果您只想返回NaN,请捕获该异常

>>> import math
>>> def pow_with_nan(x, y):
...   try:
...     return math.pow(x, y)
...   except ValueError:
...     return float('nan')
...
>>> pow_with_nan(1.3, -1.07)   # 1.3 ** -1.07
0.755232399659047
>>> pow_with_nan(-1.07, 1.3)   # (-1.07) ** 1.3
nan
顺便说一句,在Python中,内置的
a**b
通常用于提高功率,而不是
math.pow(a,b)

>1.3**-1.07
0.755232399659047
>>> (-1.07) ** 1.3
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:负数不能提升为分数次幂
>>>(-1.07+0j)**1.3
(-0.6418264288034731-0.8833982926856789j)

不要使用pow,并使指数复杂(添加
0j
)。以下是一个例子:

In [15]: (-1.07)**(1.3+0j)
Out[15]: (-0.64182642880347307-0.88339829268567893j)

不需要数学函数:)

从这篇文章的标题可以看出,幂是负数,你真的想要1.3-1.07而不是-1.071.3吗?

复数(和负数)的非整数幂涉及到一个重要的微妙之处。指数函数在实线上是内射的;i、 exp(a)=exp(b)意味着a=b。在复杂平面上,情况并非如此。由于exp(2*pi*i)=1,指数函数是2*pi*i-周期的

这导致了一个问题:我们使用日志函数的哪个分支?上述问题是复杂分析的核心问题之一


Python正在智能地应对这种情况。除非您显式地使用它的复数构造函数,否则您将贩运real。由于负数的分数幂永远都不是实数,Python恰当地抛出了一个异常。

负数的幂是复数。
>>> import math
>>> def pow_with_nan(x, y):
...   try:
...     return math.pow(x, y)
...   except ValueError:
...     return float('nan')
...
>>> pow_with_nan(1.3, -1.07)   # 1.3 ** -1.07
0.755232399659047
>>> pow_with_nan(-1.07, 1.3)   # (-1.07) ** 1.3
nan
下面是一个示例,说明如何修复它:

from numpy import *
t  = arange(-3, 3, 0.1)

for n in range(0,len(t)):
    T = t[n]
    x = (complex(-0.5,0))**T
    print(T, x)
引用手册:“如果x和y都是有限的,x是负的,y不是整数,那么pow(x,y)是未定义的,并引发ValueError。”
from numpy import *
t  = arange(-3, 3, 0.1)

for n in range(0,len(t)):
    T = t[n]
    x = (complex(-0.5,0))**T
    print(T, x)