python中的负面战力

时间:2010-11-06 19:21:16

标签: 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

有什么建议吗?

6 个答案:

答案 0 :(得分:25)

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

如果您需要复数,则必须将 b 重写为e b ln a ,例如

>>> import cmath
>>> cmath.exp(1.3 * cmath.log(-1.07))
(-0.6418264288034731-0.8833982926856789j)

如果您只想返回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
BTW,在Python中,内置的a ** b通常用于提升能力,而不是math.pow(a, b)

>>> 1.3 ** -1.07
0.755232399659047
>>> (-1.07) ** 1.3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power
>>> (-1.07+0j) ** 1.3
(-0.6418264288034731-0.8833982926856789j)

答案 1 :(得分:9)

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

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

不需要数学函数:)

答案 2 :(得分:2)

我正在使用python 2.5.4,我得到了这个:

>>> import math
>>> math.pow(-1.07,1.3)  
nan

你使用的是哪个python版本?

答案 3 :(得分:1)

复杂(和负)数字的非整数权力涉及一个重要的微妙。指数函数在实线上是单射的;即exp(a)= exp(b)意味着a = b。复杂的飞机上并非如此。由于exp(2 * pi * i)= 1,指数函数是2 * pi * i-periodic。

这会导致问题:我们使用哪个日志功能分支?所述问题是复杂分析的核心问题之一。

Python正在智能地响应这种情况。除非您明确使用其复数构造函数,否则您将成为实时交易。由于负数的分数幂绝不是真的,因此Python适当地抛出异常。

答案 4 :(得分:0)

从这篇文章的标题中指出 power 是否定的,你是否真的想要1.3 -1.07 而不是 - 1.07 1.3

答案 5 :(得分:0)

负基的幂是复数。 以下示例说明了解决方法:

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)