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