我有这个问题

>>> 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 不会是实际数字,因此数学域错误。

如果您需要一个复杂的数字,则b 必须重写为Eb 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

顺便说一句,在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)

其他提示

不要使用POW,并使指数复合体(添加 0j 对此)。这是一个示例:

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

不需要数学功能:)

我正在使用Python 2.5.4,我明白了:

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

您正在使用什么python版本?

复杂(和负)数字的非企业涉及重要的微妙之处。指数函数在实际线路上是注入性的。 IE EXP(a)= exp(b)表示a = b。在复杂的平面上不是这样。由于exp(2*pi*i)= 1,因此指数函数为2*pi*i-periodic。

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

Python正在聪明地回应这种情况。除非您明确使用其复杂的数字构造函数,否则您将实际进行贩运。由于否定的分数从来都不是真实的,因此Python正适当地引发了例外。

从这篇文章的标题中,表明 力量 是负面的,您实际上可能想要1.3-1.07 而不是-1.071.3?

负基础的力量是复数。这是一个示例,说明了如何修复它:

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top