Effectuer des calculs avec des nombres complexes en Python

Votre code pour interagir avec le dernier système d’authentification Web a rencontré une singularité et votre seule solution est de le contourner dans le plan complexe. Ou peut-être vous avez juste besoin d’effectuer quelques calculs en utilisant des nombres complexes.

Les nombres complexes peuvent être spécifiés à l’aide de la fonction complex(réel, imaginaire) ou par des nombres à virgule flottante avec un suffixe j. Par exemple:

>>> a = complex(2, 4)
>>> b = 3 - 5j
>>> a
(2+4j)
>>> b
(3-5j)
>>>

Les valeurs réelles, imaginaires et conjuguées sont faciles à obtenir, comme on peut le voir ici:

>>> a.real
2.0
>>> a.imag
4.0
>>> a.conjugate()
(2-4j)
>>>

En outre, tous les opérateurs mathématiques habituels fonctionnent:

>>> a + b
(5-1j)
>>> a * b
(26+2j)
>>> a / b
(-0.4117647058823529+0.6470588235294118j)
>>> abs(a)
4.47213595499958
>>>

Le module cmath permet d’utiliser d’autres fonctions complexes telles que les sinus, les cosinus ou les racines carrées:

>>> import cmath
>>> cmath.sin(a)
(24.83130584894638-11.356612711218174j)
>>> cmath.cos(a)
(-11.36423470640106-24.814651485634187j)
>>> cmath.exp(a)
(-4.829809383269385-5.5920560936409816j)
>>>

La plupart des modules mathématiques de Python sont conscients des valeurs complexes. Par exemple, si vous utilisez numpy, il est facile de créer des tableaux de valeurs complexes et d’y effectuer des opérations:

>>> import numpy as np
>>> a = np.array([2+3j, 4+5j, 6-7j, 8+9j])
>>> a
array([ 2.+3.j,  4.+5.j,  6.-7.j,  8.+9.j])
>>> a + 2
array([  4.+3.j,   6.+5.j,   8.-7.j,  10.+9.j])
>>> np.sin(a)
array([    9.15449915  -4.16890696j,   -56.16227422 -48.50245524j,
        -153.20827755-526.47684926j,  4008.42651446-589.49948373j])
>>>

Les fonctions mathématiques standard de Python ne produisent pas de valeurs complexes par défaut, il est donc peu probable qu’une telle valeur apparaisse accidentellement dans votre code. Par exemple:

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

Si vous voulez que des nombres complexes soient produits en conséquence, vous devez explicitement utiliser cmath ou déclarer l’utilisation d’un type complexe dans les bibliothèques qui les reconnaissent. Par exemple:

>>> import cmath
>>> cmath.sqrt(-1)
1j
>>>

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here