Question

J'ai ce problème

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

toute suggestion?

Était-ce utile?

La solution

(- 1,07). 1.3 ne sera pas un nombre réel, donc l'erreur de domaine Math

Si vous avez besoin d'un nombre complexe, un b doit être réécrite en e b Dans un , par exemple.

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

Si vous voulez juste retourner NaN, prise cette exception.

>>> 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, en Python habituellement intégré a ** b est utilisé pour augmenter la puissance, non 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)

Autres conseils

Ne pas utiliser pow, et rendre le complexe d'exposant (add 0j à elle). Voici un exemple:

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

Pas besoin de fonctions mathématiques:)

J'utilise python 2.5.4 et j'obtiens ceci:

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

Quelle version python utilisez-vous?

puissances non entières de nombres complexes (et négatifs) impliquent une subtilité importante. La fonction exponentielle est injective sur la ligne réelle; c.-à-exp (a) = exp (b) implique a = b. Ce n'est pas si sur le plan complexe. Depuis exp (2 * pi * i) = 1, la fonction exponentielle est 2 * pi * i-périodique.

Cela conduit au problème: quelle branche de la fonction log-on utiliser? question dit est l'une des questions centrales de l'analyse complexe.

Python répond intelligemment à cette situation. À moins que vous utilisez explicitement son constructeur de nombre complexe, vous allez être le trafic de reals. Étant donné que les puissances fractionnaires de négatifs ne sont jamais réelle, Python est de lancer correctement une exception.

A partir du titre de ce billet indiquant que le pouvoir est négatif, il est possible que vous vouliez réellement 1.3 -1,07 plutôt que - 1,07 1.3 ?

puissances négatives de bases sont des nombres complexes. Voici un exemple qui explique comment le résoudre:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top