我有这个问题
>>> import math
>>> math.pow(-1.07,1.3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
有什么建议吗?
答案 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)