Python met aussi à notre disposition un module cmath pour les calculs sur les nombres complexes. La plupart des noms sont identiques à ceux du module math mais les fonctions sont ici considérées comme allant de C dans C (cette homonymie plaide en la faveur d’une importation par import ... plutôt que par from ... import ...)
|
1 2 3 4 5 6 7 |
>>> import math # on charge le package math >>> math.exp(2 + 3j) # et on essaie de calculer exp(2+3i), mais ça ne marche pas <...> TypeError: can't convert complex to float >>> import cmath # on charge le package cmath >>> cmath.exp(2 + 3j) # et ça marche avec la fonction exp du package cmath (-7.315110094901103+1.0427436562359045j) |
Pour prolonger l’exemple précédent, et revenir sur les questions d’homonymie, si on charge le module math (avec la syntaxe from math import *, puis le module cmath (avec la syntaxe from cmath import *), alors les fonctions de cmath “recouvrent” celle de math (il est facile de deviner ce qui se passe si on inverse les deux chargements de module).
|
1 2 3 4 |
>>> from math import * # importe tout le package math (en mode 'fonctions non préfixées') >>> from cmath import * # importe tout cmath (en mode 'fonctions non préfixées') >>> exp(2 + 3j) # ici c'est la fonction exp du package cmath qui va s'appliqer (-7.315110094901103+1.0427436562359045j) |
En mémoire, un nombre complexe z est représenté par le couple (x, y) formé de ses parties réelle et imaginaire (qui sont accessibles individuellement par z.real et z.imag). On sait que les fonctions du package cmath reprennent (et étendent à C) celles du module math. On notera tout de même les trois fonctions suivantes, spécifiques aux nombres complexes.
phase(z) |
argument de z, exprimé en radians dans l’intervalle ] − π, π] |
polar(z) |
forme polaire de z ; équivalent à (abs(z), phase(z)) |
rect(r,θ) |
passage de la forme polaire {re^{i\theta}} à la forme cartésienne x + iy |
Il existe enfin d’autres modules de nature mathématique et numérique. On trouvera l’aide nécessaire à l’adresse suivante (en changeant éventuellement la partie de l’adresse qui est relative au numéro de version de Python) :
http://docs.python.org/3.3/library/numeric.html