Fractales de Newton et sensibilité aux conditions initiales

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche

Ce projet a été réalisé en Python sur PyScripter


Définition

Les fractales de Newton sont une représentation graphique des racines associées à chaque point complexe z d'un plan.
La fractale de Newton est définie dans le plan complexe et caractérisée par l'application de la méthode de Newton à un polynôme complexe.

Construction

On utilise la méthode de Newton qui associe zn+1 à z-f(z)/f'(z).
Cette règle mène ensuite à une suite de points z1,z2,etc.. Si la suite converge vers une racine k du polynôme, alors z0 appartient à la région k.
Cette région est appelée "bassin d'attraction de la racine k".
Fract turt.png


Remarque

On remarque rapidement en regardant les fractales de Newton que des similarités se distinguent à toutes échelle.
Z**3-1.png Z^3-1 zoom1.png Z^3-1 zoom2.png

Cependant il existe aux frontières de ces bassins d’attraction des points pour lequel on ne trouve aucune convergence.
Ces frontières très minces tendent à montrer une sensibilité très élevée aux condition initiales : trois points très proches peuvent avoir une racine distincte.
Ici un décalage de +0.5i a été appliqué a chacun des points et ils ont tous une racine associée différente.
Fract turt sensi.png

Programme

Ce programme a donc pour but de calculer puis dessiner une fractale à partir d'un polynôme complexe donné en paramètre.

Initialisation

J’ai créé une classe Fractale pour diminuer le nombre de paramètres de chaque fonction et rendre certaines variables globales. On défini en tout 6 choses :

 -	f : le polynôme complexe dont on veut la représentation
- N : le nombre maximal d’itérations que peut faire une suite avant d’être dite « non-convergente »
- R : la liste des racines du polynôme
- L : la liste des z obtenu au terme de la suite de la méthode de Newton
- I : le nombre d’itérations nécessaire à chaque z pour atteindre une racine
- Palette : n’est autre que la palette de couleur utilisée pour dessiner les fractales

Ce qui donne ceci :

class Fractale:

    def __init__(self,f,N=50):
        self.f = f  #Polynôme
        self.N = N  #Nombre maximal d'itération avant la "non-convergence"
        self.R = [] #Liste des racines
        self.L = [] #Liste des z finaux des points
        self.I = [] #Liste du nombre d'iteration
        self.palette = [(0,0,0),(255,255,255),(23, 49, 144),(174, 10, 10),(73, 53, 72),(38, 161, 0),(226, 219, 190),(134, 187, 216),(238, 66, 102),(184, 59, 21),(60, 187, 177),(64, 64, 64),(122, 122, 122),(192, 192, 192)]

Différentes méthodes

Mon programme utilise donc la méthode de Newton qui possède une complexité quadratique mais il existe d’autre codes ayant des résultats similaires avec des complexité moindre ou non.
On peut notamment citer la méthode de la sécante avec une complexité linéaire de 1.618 qui approxime la dérivée au lieu de la calculer mais qui a donc un résultat moins précis.
Je ne présenterai ici que la méthode de Newton.

Methodes fract.png