Frage

Ich habe dieses Problem

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

jede Anregung?

War es hilfreich?

Lösung

(- 1,07). 1.3 wird keine reelle Zahl, so dass die Math Domain Error

Wenn Sie eine komplexe Zahl, ein b muss in e neu geschrieben werden b ln a , z.

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

Wenn Sie nur zurückkehren NaN, fangen die Ausnahme.

>>> 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, in Python in der Regel des eingebauten in a ** b zum Anheben Energie verwendet, nicht 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)

Andere Tipps

Verwenden Sie pow nicht, und stellen Sie den Exponenten-Komplex (Add 0j darauf). Hier ein Beispiel:

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

Keine Notwendigkeit für mathematische Funktionen:)

Ich bin mit Python 2.5.4 und ich bekomme diese:

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

Was Python-Version verwenden Sie?

nicht ganzzahligen Potenzen von komplexen (und negativen) Zahlen beinhalten eine wichtige Subtilität. Die Exponentialfunktion injektiv auf der reellen Achse; d exp (a) = exp (b) bedeutet, a = b. Dies ist nicht so auf der komplexen Ebene. Da exp (2 * pi * i) = 1, ist die Exponentialfunktion 2 * pi * i-periodisch.

Dies führt zu dem Problem: Welcher Zweig der Log-Funktion verwenden wir? Sagte Frage ist eine der zentralen Fragen der komplexen Analysis.

Python reagiert intelligent auf diese Situation. Sofern Sie nicht ausdrücklich seine komplexe Zahl Konstruktor verwenden, werden Sie Handel in Realen werden. Da gebrochene Potenzen von Negativ sind echt NIE, ist Python angemessen, eine Ausnahme zu werfen.

Aus dem Titel dieses Beitrags anzeigt, dass die Macht negativ ist, ist es möglich, dass Sie wollte eigentlich 1.3 -1,07 statt - 1,07 1.3 ?

Powers von negativen Basen sind komplexe Zahlen. Hier ist ein Beispiel, das erklärt, wie es zu beheben:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top