Pregunta

Tengo este problema

>>> import math
>>> math.pow(-1.07,1.3)  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
ValueError: math domain error

alguna sugerencia?

¿Fue útil?

Solución

(- 1,07). 1.3 , no será un número real, por lo tanto el error de dominio de matemáticas

Si necesita un número complejo, un b debe ser reescrita en e b ln a , por ejemplo.

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

Si lo que desea es volver NaN, captura que es una excepción.

>>> 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

Por cierto, en Python por lo general la incorporada en a ** b se utiliza para elevar el poder, no 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)

Otros consejos

No utilice prisionero de guerra, y hacer que el complejo exponente (add 0j a ella). He aquí un ejemplo:

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

No hay necesidad de funciones matemáticas:)

Estoy usando Python 2.5.4 y me sale esto:

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

¿Qué versión de Python está usando?

potencias no enteras de números complejos (y negativo) implica una sutileza importante. La función exponencial es inyectiva en la recta real; es decir exp (a) = exp (b) implica a = b. Esto no es así en el plano complejo. Desde exp (2 * pi * i) = 1, la función exponencial es 2 pi * * i-periódica.

Esto nos lleva al problema: ¿En qué rama de la función de registro usamos? Dicha cuestión es una de las cuestiones centrales de análisis complejo.

Python está respondiendo de forma inteligente a esta situación. A menos que utilice explícitamente su constructor número complejo, que va a ser el tráfico en reales. Desde potencias fraccionarias de negativos se NUNCA real, Python está lanzando adecuadamente una excepción.

Desde el título de este post indicando que el potencia es negativo, es posible que en realidad quería 1.3 -1,07 en lugar de - 1,07 1.3

Powers de bases negativas son números complejos. Aquí hay un ejemplo que explica cómo solucionarlo:

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top