TP8 bis : Nombres complexes en python - Exemple d

publicité
TP8 bis : Nombres complexes en python - Exemple d’application
A. Nombres complexes avec Python et modules associés
En Python, on peut calculer avec des nombres complexes.
Un nombre complexe z=a+ib se note complex(a,b)
ou a+bj
Attention : le complexe i se note ici complex(0,1)
ou 0+1j ou plus simplement 1j
a. Tester dans une console les commandes suivantes
>> Z1=2+1j
>> Z2=complex(1,2)
>>Z1+Z2
>>Z1*Z2
>>Z1/Z2
>>Z1**2
b. L’objet python qui décrit un nombre complexe possède des propriétés intéressantes. Tester
Attributs real et imag ( trop dur à comprendre !)
z=complex(4,3)
print(z.real)
print(z.imag)
Méthode counjugate()
z=complex(4,3)
print(z.conjugate())
(calcule le conjugué sans modifier z)
c. Le petit module cmath regroupe des fonctions calculant en complexe. Voici une petite sélection
import cmath
cmath.abs(z) : module de z (en fait juste
abs(z) est déjà compris par python)
cmath.phase(z) : argument de z (sa phase)
cmath.e= e= 2.71828….
et
cmath.polar(z)
: renvoie la paire (module,
argument)
cmath.rect(mod, arg)
: renvoie le nombre
complexe ayant le module et l'argument indiqué.
cmath.pi = 3.141592…..
d. Numpy peut également manipuler des arrays de complexes
>>> np.conjugate(1+2j)
(1-2j)
>>>
>>> x = np.eye(2) + 1j * np.eye(2)
>>> np.conjugate(x)# ce conjugate est une fonction
array([[ 1.-1.j, 0.-0.j],
[ 0.-0.j, 1.-1.j]])
1
Prenez le petit memento sur le site de
la classe si vous n’êtes pas encore
familier.
B. Applications
Il est souvent possible de résoudre une équation sur les complexes en appliquant une stratégie de type
méthode de Newton.
1) Rappel : Programmer une fonction de newton2 qui prend en argument une fonction f, sa fonction
dérivée premier fp, et un point de départ xinit et qui renvoie la solution approchée de l’équation f(z) =0
générée par le processus itératif de Newton. On considérera que le processus n’avance plus quand le
module de la différence entre deux itérations successives est inférieur à 1e-15 et on limitera le nombre
d’itération à 30.
2) On s’intéresse à la resolution numérique de l’équation z3-1 = 0.
Quelles sont les solutions ? En fonction de l’initialisation du processus itérative de Newton, on n’obtient
pas la même solution. Voyons cela
a) Définir f et fp
b) Tester la procedure newton2 avec la suite d’instructions:
for xinit in [1.5,0+1j,0-1j]:
print('{:>7}|{:.15f}'.format(xinit,newton2(f,fp,xinit)))
Vous devez obtenir le résultat :
3) On souhaite à présent dresser une carte qui indique pour chaque point du plan vers laquelle des trois
solutions converge l’itération de Newton initiée à partir de ce point. Pour cela, on allumera ce point :
- en rouge si le processus converge vers 1
- en bleu si le processus converge vers e(i2*pi/3)
- en vert si le processus converge vers e(i4*pi/3)
Voici ce que vous devez obtenir pour un quadrillage de 200 points pris entre -1 et 1 en abscisse et
également 200 point pris entre -1 et 1 en ordonnée (Cela fait 40000 points à calculer !! Donc ça prend un
peu de temps, comptez plusieurs minutes de temps de calcul …). Cela fait un fractal…..
2
Téléchargement