Quand on parle de fractale on pense immédiatement à l'ensemble de Mandelbrot. Si cet ensemble a été découvert au début du XXième siècle par Gaston Julia et Pierre Fatou, mais c'est Benoît Mandelbrot qui va en donner les premières représentation graphiques dans les années 1980 ! Aujourd'hui on peut tracer ce mystérieux ensemble en quelques lignes de code (avec Scilab par exemple) et un joli argument mathématique ...
L'ensemble de Mandelbrot est défini de manière très simple : c'est l'ensemble des points du plan complexe $z_0\in{\mathbb C}$ tels que la suite récurrente $(z_n)_{n\in{\mathbb N}}$ ci-dessous reste bornée :
$$ z_{n+1}=z_n^2+z_0$$
Le théorème qui permet de tracer facilement l'ensemble de Mandelbrot est le suivant :
Théorème si pour un certain $k$ on a $|z_k|>2$ alors la suite $(z_n)_{n\in{\mathbb N}}$ diverge avec $|z_n|\mathop{\longrightarrow}_{n\to\infty}+\infty$
Soit $c=z_0$ un nombre complexe alors on appelle $\alpha$ la racine positive de l'équation du second degré
$$\alpha=\alpha^2-|c|\Leftrightarrow \alpha^2-\alpha -|c|=0$$
le discriminant du trinôme étant $\Delta= 1+4|c|\geq 1$ on a $\alpha=(1+\sqrt{\Delta})/2\geq 1>0$ . En soustrayant cette équation avec la relation de récurrence pour $|z_{n+1}|$ on trouve
$$\begin{align*}
|z_{n+1}|-\alpha&=|z_n^2+c|-\alpha\\
&\geq |z_n|^2-|c|+|c|-\alpha^2 \\
&\geq (|z_n|+\alpha)(|z_n|-\alpha)
\end{align*} $$
Maintenant si $|z_n|\geq \alpha$ alors
$$|z_{n+1}|-\alpha\geq (|z_n|+\alpha)(|z_n|-\alpha)\geq 2\alpha(|z_n|-\alpha)\geq (2\alpha)^{n+1-k} (|z_k|-\alpha)$$
on obtient donc que la suite $|z_n|-\alpha$ diverge comme une suite géométrique de raison $2\alpha>1$ et de même pour $|z_n|$. Maintenant on peut démontrer le théorème car
- si $|z_0|= |c| > 2$ alors comme $P(x)=x^2-x- |c| $ est une fonction croissante (au moins pour $x>1/2$ car $P'(x)=2x-1$) et comme $P( |c| )= |c| ^2-2 |c| >0$ on en déduit que la racine $\alpha \leq |c| $ donc on a bien $|z_0|>\alpha$ et la suite $(z_n)_{n\in{\mathbb N}}$ diverge.
- inversement si$|z_0|= |c| \leq 2$ alors $\alpha \leq{1+\sqrt{1+8}\over 2}=2$ donc si pour un certain $k$ on a $|z_k|\geq 2(\geq \alpha)$ on en déduit bien que la suite $(z_n)_{n\in{\mathbb N}}$ diverge.
De là on déduit un algorithme assez simple pour approcher les points de l'ensemble de Mandelbrot, qui consiste à calculer pour une quadrillage de points les termes de la suite $(z_n)_{n\in{\mathbb N}}$ jusqu'à ce que $|z_k|>2$ . A chaque étape les points de l'ensemble de Mandelbrot appartient forcément à l'ensemble des points pour lesquels on continue le calcul :
tracé de l'ensemble de Mandelbrot
z_0 = discrétisation du carré [-2.5;1.5]x[-1.5;1.5]
z=z_0 et J=0*z
pour k=1 à n
calculer z=z^2+z_0
pour chaque (i,j)
si | z(i,j)|>2 et J(i,j)=0 alors J(i,j)=k
fin
afficher l'image des points (i,j) tels que J(i,j)=0
fin
z_0 = discrétisation du carré [-2.5;1.5]x[-1.5;1.5]
z=z_0 et J=0*z
pour k=1 à n
calculer z=z^2+z_0
pour chaque (i,j)
si | z(i,j)|>2 et J(i,j)=0 alors J(i,j)=k
fin
afficher l'image des points (i,j) tels que J(i,j)=0
fin
Si on conserve la valeur de $k$ à partir de laquelle la suite $(|z_n|)_{n\in{\mathbb N}}$ franchit le seuil de 2 on peut tracer le graphe en associant une couleur à cette valeur $k$. En Scilab cela s'écrit assez rapidement à l'aide de la fonction Matplot :
function mandelbrot() n=20 //initialisations dt=0.001 t=[-1:dt:1]*1.5 [x,y]=meshgrid(t-0.5,t) z0=x+%i*y z=0*z0 J=zeros(z) //ouverture fenêtre graphique clf F=gcf() F.color_map=hotcolormap(steps+1) for k=1:n // calcul de z_{k+1} z=z.^2+z0 //si |z_k|>2 pour la 1er fois alors on affecte la couleur k dans J(z_0) J(find((abs(z)>2)&(J==0)))=k //affichage de la matrice J sous forme de couleurs drawlater clf Matplot(J) A=gca();A.isoview="on" A.axes_visible=["off" "off"] drawnow sleep(100) // pause pour voir la figure end endfunction
Le théorème précédent s'applique aussi à la construction de l'ensemble de Julia :
$$J(c) =\{z_0\in{\mathbb C}~|~ \text{la suite}~z_{n+1}=z_n^2+c~\text{reste bornée}\}$$
il suffit de remplacer $z_0$ par $c$ dans la formule de récurrence, Pour c=-0.9 on obtient la figure suivante :
ensemble de Julia pour c=-0.9 |
Les points de l'ensemble de Mandelbrot ont une interprétation géométrique étonnante du point de vu de l'ensemble de Julia: ce sont les complexes pour lesquelles l'ensemble de Julia J(c) est connexe. En prenant des valeurs de c proche du bord de l'ensemble de Mandelbrot on obtiendra donc des ensembles de Julia d'un seul tenant mais avec un découpage proche de le séparer en plusieurs composantes.Vous pouvez essayer en cherchant des valeurs à partir de la figure suivante où on a affiché les coordonnées des points de l'ensemble de Mandelbrot.
Si vous adorez l'ensemble de Mandelbrot sachez qu'on peut trouver de splendide poster du meilleur effet dans le bureau d'un prof de maths! J'ai acheté le mien via un projet financé sur Kickstarter
Vintage Mandelbrot Map |
Merci, très intéressant.
RépondreSupprimer