retour index

chapitre1

Fractales autosimilaires

Généralités

Autosimilarité

Comment tracer une fractale

Triangle de Sierpinski

Autres fractales de Sierpinski

La courbe de Koch

Ensemble de Cantor

La courbe de Lévy

Autoorganisation et autoréparation

Exercices

 

Généralités

Les fractales sont des figures géométriques telles que, si l'on aggrandit une partie de la figure (ce qui révèle des détails plus fins), on retrouve la figure entière. La partie est semblable au tout et la figure est dite invariante d'échelle. Dans une fractale, on retrouve la même organisation à tous les niveaux ;c'est un système hiérarchisé.

Ce sont des figures autosimilaires, en ce sens que la figure est formée d'une réunion de copies réduites d'elle-même, chaque copie étant à son tour formée de copies d'elle-même, à la façon des poupées russes.

On trouve des fractales partout dans la nature :la branche de l'arbre ressemble à un petit arbre, le bassin d'un ruisseau est la copie réduite du bassin du fleuve, le chou-fleur est formé de petits chou-fleurs, mais il s'agit là de fractales statistiques, où l'on reconnait la figure entière dans l'aggrandissement bien que les figures ne soient pas identiques, comme si l'on avait modifié les détails au hasard.

Les fractales se retrouvent également dans les organisations humaines, telle la loi des 20-80, qui veut que les 20% les plus riches possèdent 80% des richesses (et sans doute plus !), que les 20% les plus riches parmi les 20% possèdent 80% des 80% des richesses etc.. La bourse a également un comportement fractal, dont les variations journalières ou mensuelles reproduisent (au point de vue statistique et avec un facteur d'échelle) les variations annuelles.

Les fractales ont également envahi la physique. Citons les agrégats, la percolation, et surtout les systèmes dynamiques.

Lorsque un système physique évolue et qu'il est soumis à des frottements, il s'arrête si rien ne le relance. Sa trajectoire dans l'espace des phases (qui est l'espace des variables du système), va tendre vers un point qui est l'attracteur ponctuel du système. C'est le cas par exemple de l'oscillateur harmonique amorti qui retourne à sa position d'équilibre.

Si le système est relancé et donc entretenu, il ne va pas s'arrêter, mais, après un régime transitoire, va évoluer dans une région bornée de l'espace des phases ;son attracteur n'est plus ponctuel.

Deux cas peuvent alors se produire :si le système est relancé de manière ``douce'', ou dans tous les cas si l'espace des phases est à deux dimensions, l'attracteur est un cycle limite périodique ;c'est le cas de l'oscillateur de Van Der Pol par exemple. Il existe des cas plus complexes où la trajectoire dans l'espace des phases s'enroule sur un tore, mais le mouvement reste prédictible même à longue échéance.

Ce n'est plus le cas si l'entretien se fait de façon ``brutale'' dans un espace des phases d'au moins trois dimensions ;il y a alors sensibilité aux conditions initiales, voulant dire que le moindre changement dans les conditions initiales entraine un mouvement ultérieur rapidement tout à fait différent ;il y a perte de corrélation à courte échéance, la trajectoire devient imprévisible bien que déterministe, l'attracteur n'est plus un cycle mais devient un attracteur étrange de forme parfois bizarre et de structure fractale. L'attracteur, formé de toutes les trajectoires possibles du système, est stable dans l'évolution de celui-ci de même que l'évolution moyenne du système, mais une trajectoire particulière évolue de façon imprévisible sur l'attracteur, et l'évolution est qualifiée de chaotique. Tel est le cas du climat, dont on connait les caractéristiques moyennes, mais qui est imprévisible à moyenne échéance.

Les mathématiques permettent de mettre de l'ordre et de classer les fractales et les systèmes dynamiques. Partant des fractales strictement autosimilaires, telles que l'aggrandissement de la partie reproduit strictement la figure entière, liées à des transformations linéaires, on élargit aux fractales statistiques, où une part est laissée au hasard, puis aux fractales non linéaires, où l'air de famille se reconnait bien que la ressemblance soit plus distante. Enfin la théorie des systèmes dynamiques va au delà des fractales qui ne sont que les supports géométriques des attracteurs étranges, et a pour ambition de tenter d'expliquer le comportement chaotique des systèmes complexes, soumis à des rétroactions et souvent à variables multiples, comme le sont les systèmes naturels.

Nous commencerons dans ce chapitre par les fractales mathématiques autosimilaires.

début chapitre

Autosimilarité

Les fractales sont autosimilaites, en ce sens que les copies réduites de la fractale, qui recomposent celle-ci après collage, sont strictement similaires à la fractale, c'est-à-dire obtenues à partir de la fractale par une similitude.

Les similitudes comprennent les homothéties, ou réductions, ou changements d'échelle, d'équation
MATH

Il s'agit d'un facteur de réduction si s<1 et d'un agrandissement si s>1.

Il y a également les rotations, d'angle $\theta ,$ d'équation
MATH

et les translations d'équation
MATH

e et f sont des constantes.

On peut ajouter également les réflexions. Par exemple, une réflexion par rapport à l'axe Ox s'écrit
MATH

La formule générale d'une similitude (sans réflexion) s'écrit donc
MATH

comportant un changement d'échelle de facteur s, une rotation d'angle $\theta $ autour de l'origine et une translation.

Signalons que, si la rotation se fait autour du point $(x_{0},y_{0}),$ les formules de la rotation deviennent
MATH

De façon générale, une similitude sans réflexion s'écrit donc
MATH

S'il y a une réflexion par rapport à l'axe des x, la similitude s'écrit,en changeant y en -y :
MATH

début chapitre

Comment tracer une fractale ?

Une fractale étant constituée d'un certain nombre de copies réduites d'elle-même, on peut reconstituer la fractale à l'aide d'un photocopieur, en faisant des copies réduites d'un certain facteur, puis en effectuant un collage qui reconstitue la fractale initiale. Voyons plus en détail sur le triangle de Sierpinski (voir figures dans les pages suivantes).


chap1__12.pngfigure 1.1 : figure initiale et motif du triangle de Sierpinski

On fait trois copies réduites d'un facteur moitié d'un triangle équilatéral de côté unité, puis on les assemble de façon à retrouver le triangle initial ;c'est le motif.

Au point de vue mathématique, on trouve le triangle inférieur gauche par une homothétie de centre O, origine des coordonnées prise au coin inférieur gauche, et de rapport 0,5, soit la transformation de réduction 1/2


MATH

Il suffit de décaler ce triangle de 0,5 en abcisse pour obtenir le triangle inférieur droit, soit une réduction-translation
MATH

Il faut enfin décaler le triangle gauche de 0,25 en abcisse et de $\sqrt{3}/4$ en ordonnée (la moitié de la hauteur d'un triangle équilatéral) pour obtenir par une autre réduction-translation le triangle supérieur
MATH

Si S est le triangle de Sierpinski obtenu en itérant indéfiniment la transformation, on a bien MATH et, en désignant par W l'opérateur
MATH

on a
MATH

W est l'opérateur de Hutchinson de la fractale, ici le triangle de Sierpinski. La fractale est en fait la seule image qui soit invariante par l'opération de réduction, de translation et de collage impliquée par l'opérateur de Hutchinson.

Les opérateurs composant l'opérateur de Hutchinson étant contractants, les détails initiaux disparaissent, et S est la figure limite obtenue lorsque l'on itère un grand nombre de fois W à partir d'un objet qui, à priori, peut avoir une forme quelconque, point, figure géométrique ou n'importe quoi.

La séquence
MATH

tend vers l'attracteur $A_{\infty }$ qui est la fractale S.

C'est la base du procédé de construction des fractales.

La clé de la fractale est donc la connaissance de l'opérateur de Hutchinson, qui définit la fractale de façon unique et qui en est la transcription algébrique, de même que la fractale est la transcription géométrique de l'opérateur de Hutchinson.

Cet opérateur peut s'écrire simplement en considérant la transformation qui fait passer de la figure initiale à la première itération, qui est le motif.

Une première façon de tracer la fractale, que l'on va utiliser dans ce chapitre, consiste à tracer la fractale par points à partir d'un point que l'on choisit sur la fractale pour éviter d'avoir des 'transitoires' ;on peut prendre l'origine ou les sommets de la fractale entière. A chaque itération, le nombre des points est multiplié et les points se répartissent sur toute la fractale. L'ensemble des points donne une image de la fractale.

On peut améliorer le tracé en partant de segments ou des figures géométriques. Il faut alors partir de 2, 3 ou plus de points suivant que l'on veut tracer des segments, des triangles ou des polygones à plus de côtés. Voyons un certain nombre d'exemples.

début chapitre

Triangle de Sierpinski

Triangle de Sierpinski :tracé par points

Pour le triangle de Sierpinski, les applications $w_{1},$ $w_{2}$ et $w_{3}$ composant l'opérateur de Hutchinson s'écrivent :


MATH

On écrit une procédure qui, à partir d'un point de coordonnées x et y construit trois points de coordonnées données par les applications $w_{1},$ $w_{2}$ et $w_{3}$ ci-dessus.

Partant d'un point initial (l'origine des coordonnées), on définit la procédure, puis on la répète un certain nombre de fois sur chacun des points obtenus par l'itération précédente et on trace l'ensemble des points obtenus ;le dessin est évidemment plus détaillé si l'on augmente le nombre d'itérations, mais le temps de calcul augmente également.

> restart:with(plots):

> f:=proc(x,y) 1/2*x,1/2*y,1/2*x+1/2,1/2*y,

1/2*x+1/4,1/2*y+sqrt(3)/4 end:

> liste:=0,0:for i from 1 to 6 do:

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2) od:

> pointplot([liste],symbol=circle,color=red,

scaling=constrained);


chap1__29.pngfigure 1.2 : triangle de Sierpinski (tracé par points)

Variante par le jeu du chaos

Le jeu du chaos consiste à prendre à chaque étape au hasard une seule parmi les 3 applications $w_{1},$ $w_{2}$ et $w_{3}.$ On obtient ainsi à chaque étape un seul point qui se déplace au hasard sur la fractale et ceci permet d'obtenir rapidement une première vision de la fractale.

Le jeu du chaos consiste en fait, à partir d'un point initial, à tirer au hasard un nombre parmi 0, 1 ou 2. Si l'on tombe sur 0, on prend comme point suivant le milieu entre le point initial et le sommet inférieur gauche du triangle. Si on tombe sur 1, ce sera le sommet inférieur droit, et sur 2 le sommet supérieur :

> restart:with(plots):

> f:=proc(x,y) local a,b: a:=rand(0..2)(): (sélectionne au hasard 0, 1 ou 2)

if a=0 then x/2,y/2 elif a=1 then x/2+1/2,y/2

else x/2+1/4,y/2+sqrt(3)/4:fi:end:

> x:=0:y:=0:liste:= op([]):(liste initiale vide)

>for i from 1 to 2000 do: x,y:=f(x,y):liste:=liste,x,y:od:

> pointplot([liste]);


chap1__33.pngfigure 1.3 : triangle de Sierpinski par le jeu du chaos

Triangle de Sierpinski :tracé par segments

On veut cette fois tracer le triangle à l'aide de segments de droites et non de points.

A partir des trois sommets du triangle initial, on va obtenir à partir d'une procédure les trois sommets des trois triangles réduits de moitié, inférieur gauche, inférieur droit et supérieur. Puis on recommence sur les triangles obtenus. On trace ensuite, pour chacun des triangles, les trois segments joingnant les trois sommets. Ce programme est plus long que le précédent, mais rend mieux le triangle de Sierpinski.

> restart:with(plots):with(plottools):

> f:=proc(x1,y1,x2,y2,x3,y3)

1/2*x1,1/2*y1,1/2*x2,1/2*y2,1/2*x3,1/2*y3,

1/2*x1+1/2,1/2*y1,1/2*x2+1/2,1/2*y2,1/2*x3+1/2,1/2*y3,

1/2*x1+1/4,1/2*y1+sqrt(3)/4,1/2*x2+1/4,1/2*y2+sqrt(3)/4,

1/2*x3+1/4,1/2*y3+sqrt(3)/4 end:

> liste:=0,0,1,0,0.5,sqrt(3)/2:for j to 3 do

liste:=seq(f(liste[6*i-5],liste[6*i-4],liste[6*i-3],liste[6*i-2],

liste[6*i-1],liste[6*i]),i=1..nops([liste])/6) od: (liste des sommets de tous les triangles)

> display(seq([line([liste[6*i-5],liste[6*i-4]],[liste[6*i-3],

liste[6*i-2]],color=red),line([liste[6*i-5],liste[6*i-4]]

,[liste[6*i-1],liste[6*i]],color=red),line([liste[6*i-3],

liste[6*i-2]],[liste[6*i-1],liste[6*i]],color=red)],

i=1..nops([liste])/6));(line trace le segment entre les deux points indiqués)


chap1__34.pngfigure 1.4 : triangle de sierpinski (tracé par segments)

Une variante de ce tracé consiste à tracer des triangles pleins. Il suffit pour cela, lorsque liste a été calculé, de remplacer la dernière commande du programme par :

> liste1:=seq(polygon([[liste[6*i-5],liste[6*i-4]],

[liste[6*i-3],liste[6*i-2]],[liste[6*i-1],liste[6*i]]],color=red),

i=1..nops([liste])/6):(un polygone à 3 points est un triangle)

> display(%);


chap1__35.pngfigure 1.5 : triangle de Sierpinski (avec triangles)

début chapitre

Autres fractales de Sierpinski

On peut tracer, sur le même modèle toute une faune dans le jardin zoologique de Sierpinski.

Tétraèdre de Sierpinski

Le tracé par points permet de tracer facilement un triangle de Sierpinski à trois dimensions, c'est-à-dire un tétraèdre, qui est ici la moitié d'un cube.

> restart:with(plots):

> f:=proc(x,y,z) 1/2*x,1/2*y,1/2*z,1/2*x+1/2,1/2*y,1/2*z,

1/2*x,1/2*y+1/2,1/2*z,

1/2*x,1/2*y,1/2*z+1/2 end:

> liste:=0,0,0:for i from 1 to 5 do:

liste:=seq(f(liste[3*i-2],liste[3*i-1],liste[3*i]),

i=1..nops([liste])/3) od:

> pointplot3d([liste],symbol=circle,color=red,

scaling=constrained);


chap1__36.pngfigure 1.6 : tétraèdre de Sierpinski

Carré de Sierpinski :tracé par points

On divise un carré en 9 et l'on retire le petit carré central. Puis on recommence l'opération sur chacun des carrés restants ;cela revient à former, à partir du grand carré, 8 petits carrés réduits d'un facteur 3 en longueur, qui se déduisent de celui qui est dans le coin inférieur gauche par des translations appropriées, puis on recommence.

> restart:with(plots):

> f:=proc(x,y) 1/3*x,1/3*y,1/3*x+1/3,1/3*y,1/3*x+2/3,1/3*y,

1/3*x,1/3*y+1/3,1/3*x,1/3*y+2/3,1/3*x+1/3,1/3*y+2/3,

1/3*x+2/3,1/3*y+1/3,1/3*x+2/3,1/3*y+2/3:end:

> liste:=0,0:for i from 1 to 4 do:

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2):od:

>pointplot([liste],symbol=circle,scaling=constrained);


chap1__37.pngfigure 1.7 : carré de Sierpinski tracé par points

Carré de Sierpinski :tracé par des carrés

On fait une construction analogue à celle que l'on a faite pour tracer le triangle de Sierpinski avec des segments. A partir du point supérieur gauche et du point inférieur droit du carré initial, la procédure donne le point supérieur gauche et le point inférieur droit des 8 petits carrés. Puis, on réitère l'opération. Les carrés sont tracés avec la commande rectangle où l'on indique le point supérieur gauche et le point inférieur droit.

> restart:with(plots):with(plottools):

> f:=proc(x1,y1,x2,y2) 1/3*x1,1/3*y1,1/3*x2,1/3*y2,

1/3*x1+1/3,1/3*y1,1/3*x2+1/3,1/3*y2,

1/3*x1+2/3,1/3*y1,1/3*x2+2/3,1/3*y2 ,

1/3*x1,1/3*y1+1/3,1/3*x2,1/3*y2+1/3 ,

1/3*x1,1/3*y1+2/3,1/3*x2,1/3*y2+2/3 ,

1/3*x1+1/3,1/3*y1+2/3,1/3*x2+1/3,1/3*y2+2/3,

1/3*x1+2/3,1/3*y11/3,1/3*x2+2/3,1/3*y2+1/3,

1/3*x1+2/3,1/3*y1+2/3,1/3*x2+2/3,1/3*y2+2/3 end:

> liste:=0,1,1,0:for i from 1 to 3 do

liste:=seq(f(liste[4*i-3],liste[4*i-2], liste[4*i-1],liste[4*i]),

i=1..nops([liste])/4) od:

>display(seq(rectangle([liste[4*i-3],liste[4*i-2]],

[liste[4*i-1],liste[4*i]],color=red),i=1..nops([liste])/4)):


chap1__38.pngfigure 1.8 : carré de Sierpinski avec des carrés

Cube de Sierpinski (éponge de Menger)

C'est la même construction que le carré, mais à 3 dimensions. On divise un cube de côté unité en 27 petits cubes de côté 1/3 et l'on retire 7 petits cubes, le petit cube central et les petits cubes au centre de chacune des faces, puis on recommence l'opération sur chacun des cubes restants. La commande cuboid qui trace les cubes necessite les coordonnées des deux extrémités d'une des diagonales du cube.

Une première procédure comportant 3 indices i, j et k donne, à partir des coordonnées des extrémités de la diagonale, les coordonnées des diagonales correspondantes des 21 cubes restants.

Une deuxième procédure fait une liste des points et trace les cubes au niveau k.

La commande display permet de faire une animation de plusieurs graphes que l'on réunit au moyen d'un nouveau display.

> restart:with(plots):with(plottools):

> f:=proc(x1,y1,z1,x2,y2,z2) local i,j,k,a:

a:=op([]): for i from 0 to 2 do:for j from 0 to 2 do:

for k from 0 to 2 do if k=0 and i<>1 or k=0 and j<>1

or k=2 and i<>1 or k=2 and j<>1 or k=1 and i<>1 and j<>1

then a:=a,x1/3+i/3,y1/3+j/3,z1/3+k/3,x2/3+i/3,y2/3+j/3,

z2/3+k/3 fi od od od end:

> g:=proc(m) local liste,n,i:

liste:=0,0,0,1,1,1:for n from 1 to m do:

liste:=seq(f(liste[6*i-5],liste[6*i-4],liste[6*i-3],liste[6*i-2],

liste[6*i-1],liste[6*i]),i=1..nops([liste])/6) od:

display(seq(cuboid([liste[6*i-5],liste[6*i-4],liste[6*i-3]],

[liste[6*i-2],liste[6*i-1],liste[6*i]]),i=1..nops([liste])/6)) end:

> display(seq(g(i),i=0..2),color=yellow,insequence=true):

> display(%);


chap1__39.pngfigure 1.9 : cubes de Sierpinski

Pentagone de Sierpinski

Considérons un pentagone, dans lequel on peut placer 6 pentagones égaux :


chap1__40.pngfigure 1.10 : pentagone contenant 6 pentagones égaux

En considérant un des côtés du grand pentagone de longueur h, comprenant 2 côtés du petit pentagone et la base du petit triangle dont l'angle adjacent à cette base vaut $2\pi /5,$ on peut écrire MATH a étant le facteur d'échelle, soit
MATH

Si le centre du petit pentagone de droite est à l'abcisse 1, alors le sommet de droite du grand pentagone a pour abcisse x tel que $x=1+ax,$ soit $x=\dfrac{1}{1-a}$ ; les autres sommets s'obtiennent par rotation d'un multiple de $2\pi /5.$

Le programme pour tracer le pentagone s'écrit :

> restart:with(plottools):with(plots):

> n:=5:a:=evalf(1/(4*cos(Pi/n)^2)):

> x:=1/(1-a):

>p:=polygon([seq([x*cos(2*i*Pi/n),x*sin(2*i*Pi/n)],i=0..n-1)]):

> q:=scale(p,a,a):

> display(p,seq(translate(q,cos(2*i*Pi/n),sin(2*i*Pi/n)),

i=0..n-1),scaling=constrained);

Le même programme permet de tracer jusqu'à l'octogone en changeant la valeur de n.

Avec le facteur de réduction, on peut tracer le pentagone de Sierpinski en remarquant que l'opérateur de Hutchinson correspondant se compose d'une réduction d'échelle du facteur a suivi d'une translation de composantes MATH i variant de 0 à 4.

> restart:with(plots):

> n:=5:a:=evalf(1/(4*cos(Pi/n)^2)):

> f:=proc(x,y) local i:

seq(op([a*x+cos(i*2*Pi/n),a*y+sin(i*2*Pi/n)]),i=0..n-1) end:

> liste:=0,0:for i from 1 to 4 do:

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2):od:

>pointplot([liste],symbol=circle,scaling=constrained);


chap1__48.pngfigure 1.11 : pentagone de Sierpinski

on peut tracer de la même façon l'hexagone, l'heptagone et l'octogone en changeant la valeur de n

Par exemple, avec n = 8, on obtient :


chap1__49.pngfigure 1.12 : octogone de Sierpinski


début chapitre

La courbe de Koch

Tracé par points


chap1__50.pngfigure 1.13 : motif de la courbe de Koch

A partir d' un segment de longueur unité, le motif est formé de 4 segments de longueur 1/3, les 2 segments centraux formant les 2 côtés d'un triangle équilatéral. On répète ensuite la même construction sur chacun des 4 segments formés. Cette figure est autosimilaire et se compose de 4 copies réduites d'un facteur 1/3 du segment initial. La première est une réduction de centre 0 et de rapport 1/3,d'équation
MATH

La seconde est une réduction-rotation d'angle $\pi /3$ suivie d'une translation horizontale de 1/3
MATH

soit
MATH

La troisième est une réduction-rotation d'angle $-\pi /3$ suivie d'une translation amenant au sommet du triangle central, soit
MATH

La dernière est une réduction suivie d'une translation horizontale de 2/3
MATH

On crée une procédure, qui, à partir d'un point (x,y), donne les 4 points correspondant aux 4 transformations ci-dessus. En partant du point (0,0) sur la fractale, chaque itération multiplie le nombre de points par 4 et ces points donnent rapidement une bonne idée de la fractale.

> restart:with(plots):

> f:=proc(x,y) 1/3*x,1/3*y,

1/6*x-sqrt(3)/6*y+1/3,sqrt(3)/6*x+1/6*y,

1/6*x+sqrt(3)/6*y+1/2,-sqrt(3)/6*x+1/6*y+sqrt(3)/6,

1/3*x+2/3,1/3*y end:

> liste:=0,0:for j to 5 do:

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2):od:

> pointplot([liste],color=red,scaling=constrained);


chap1__58.pngfigure 1.14 : courbe de Koch tracée par points

Tracé par segments

Afin de tracer les segments avec la commande line, il faut avoir le début et la fin de chaque segment. On crée une procédure, qui, à partir des extrémités d'un segment, va donner les extrémités des 4 segments de l'itération suivante. On l'applique un certain nombre de fois, puis on trace les segments avec line :

Cela donne le programme suivant :

> restart:with(plots):with(plottools):

> f:=proc(x1,y1,x2,y2) 1/3*x1,1/3*y1,1/3*x2,1/3*y2,

1/6*x1-sqrt(3)/6*y1+1/3,sqrt(3)/6*x1+1/6*y1,

1/6*x2-sqrt(3)/6*y2+1/3,sqrt(3)/6*x2+1/6*y2,

1/6*x1+sqrt(3)/6*y1+1/2,-sqrt(3)/6*x1+1/6*y1+sqrt(3)/6,

1/6*x2+sqrt(3)/6*y2+1/2,-sqrt(3)/6*x2+1/6*y2+sqrt(3)/6,

1/3*x1+2/3,1/3*y1,1/3*x2+2/3,1/3*y2 end:

> liste:=0,0,1,0:for j to 3 do:

liste:=seq(f(liste[4*i-3],liste[4*i-2],

liste[4*i-1],liste[4*i]),i=1..nops([liste])/4) od:

> display(seq(line([liste[4*i-3],liste[4*i-2]],

[liste[4*i-1],liste[4*i]], color=red),i=1..nops([liste])/4),

scaling=constrained,thickness=3);


chap1__59.pngfigure 1.15 : courbe de Koch tracée par segments

Tracé avec des rectangles

La même construction peut se faire en partant d'un rectangle ;on reprend la procédure précédente du tracé par segments, mais avec 4 points au lieu de 2 ;la liste initiale sera formée des coordonnées des 4 sommets du rectangle initial ;on itérera comme au dessus en employant $polygon$ à la place de $line$ :


chap1__62.pngfigure 1.16 : courbe de Koch à partir d'un rectangle

On constate que la fractale finale ne dépend pas de l'objet initial ; celui-ci devenant de plus en plus petit, sa forme initiale disparait et la limite, c'est-à-dire la fractale, est un objet défini uniquement par le fait que c'est le point fixe de l'opérateur de Hutchinson correspondant.

début chapitre

Ensemble de Cantor

L'ensemble de Cantor joue un rôle important dans de nombreuses branches des mathématiques. Il fut construit par Cantor en 1883.

Une façon géométrique très simple de le définir est de partir d'un segment de longueur 1 et de retirer le tiers central, puis de retirer le tiers central des 2 segments qui restent et ainsi de suite. On aboutit à la limite à une poussière de points qui constitue l'ensemble de Cantor et qui est difficile à visualiser.

Un moyen pour le rendre visible est de tracer un faisceau (issu d'un point ou parallèle) passant par les extrémités des segments ;c'est ce que nous ferons.

On peut reconstituer l'ensemble de Cantor en en faisant 2 copies réduites d'un facteur de 1/3 et en collant ces copies réduites sur les deux tiers extérieurs du segment unité, ce qui fait que l'opérateur de Hutchinson est la réunion de 2 similitudes, dont l'une est une réduction de rapport 1/3
MATH

et l'autre la même réduction suivie d'une translation de 2/3
MATH

Tracé par points

Avec la méthode maintenant habituelle de tracé par points, cela donne, en joingnant par un segment les points de Cantor au point fixe (0,5, 1) :

> restart:with(plots):

> f:=proc(x) x/3,2/3+x/3 end:

> liste:=0:for i to 5 do

liste:=seq(f(liste[j]),j=1..nops([liste])):od:

> liste1:=seq(op([liste[i],0,0.5,1]),i=1..nops([liste])):

> pointplot([liste1],style=line,color=red);


chap1__65.pngfigure 1.17 : ensemble de Cantor avec faisceau convergent

On peut remplacer le faisceau convergent par un faisceau parallèle :

> restart:with(plots):with(plottools):

> f:=proc(x) x/3,2/3+x/3 end:liste:=0:for i to 5 do:

liste:=seq(f(liste[j]),j=1..nops([liste])):od:

> display(seq(line([liste[i],0],[liste[i],1],color=red),

i=1..nops([liste])));


chap1__66.pngfigure 1.18 : ensemble de Cantor avec faisceau parallèle

On peut tracer aussi un carré de Cantor :

> restart:with(plots):with(plottools):

> f:=proc(x) x/3,2/3+x/3 end:

> liste:=0:for i to 5 do:

liste:=seq(f(liste[j]),j=1..nops([liste])):od:

> display(seq(line([liste[i],0],[liste[i],1],color=red),

i=1..nops([liste])),seq(line([0,liste[i]],[1,liste[i]],color=red),

i=1..nops([liste])),axes=none,scaling=constrained);


chap1__67.pngfigure 1.19 : carré de Cantor

On pourrait tracer aussi l'ensemble de Cantor par le jeu du chaos qui consiste à choisir au hasard une des deux transformations ;cela revient à tirer à pile ou face :si c'est pile, on place le nouveau point au tiers de la distance à l'origine ;si c'est face, au tiers de la distance au point extrémité. Cela fournit une caractérisation des points de l'ensemble. Plaçons nous pour cela en base 3 :dans cette base les nombres sont écrits uniquement avec 0, 1 et 2. Un nombre compris entre 0 et 1/3 commence par 0,0, entre 1/3 et 2/3 par 0,1, et entre 2/3 et 1 par 0,2. Lorqu'on divise un nombre compris entre 0 et1 par 3, cela revient à intercaler un 0 à droite de la virgule, ce qui fait que, si l'on tombe sur pile, le nombre commencera par 0,00.. ou 0,01, ou 0,02 ;si l'on tombe sur face, on ajoute 2/3 au nombre divisé par 3 et on intercale un 2 après la virgule, d'où un nombre commençant par 0,20.. ou 0,21, ou 0,22. Dans tous les cas, il n'y a pas de 1 à la première place après la virgule, ce qui signifie que l'on a évacué les nombres entre 1/3 et 2/3.

Au tour suivant, les 1 à la seconde place seront évacués, et on voit qu'à la limite les nombres de Cantor sont les nombres qui n'ont pas de $1$ dans leur écriture en base 3.

L'ensemble de cantor comme bassin d'attraction

On peut retrouver l'ensemble de Cantor dans une situation tout à fait différente.

On considère l'application de la figure ci-dessous en forme de tente définie par
MATH

Partant d'un point $x_{0},$ on itère l'application f, c'est-à-dire que l'on passe à $x_{1}=f(x_{0}),$ puis à $x_{2}=f(x_{1})$ et ainsi de suite. Cela revient sur le graphe à tracer la verticale partant de $x_{0}$ jusqu'à la courbe, puis l'horizontale jusqu'à la bissectrice, puis de nouveau la verticale jusqu'à la courbe et ainsi de suite. C'est un graphe en toile d'araignée.

Si l'on part d'une valeur entre 1/3 et 2/3, on voit qu'à la première itération, on sort du carré de côté 1 centré en O et que les itérés successifs tendent rapidement vers $-\infty $. Si l'on s'intéresse à l'ensemble des valeurs telles que les itérés successifs restent dans l'intervalle [0,1], que l'on appelle l'ensemble des prisonniers, on doit exclure au premier tour le tiers central. On exclut au second tour les nombres dont la première itération tombe dans le tiers central, c'est-à-dire ceux qui sont compris entre 1/9 et 2/9 (en les multipliant par 3, on arrive entre 1/3 et 2/3), donc le tiers central des segments restant.

Le nombre 0,29 étant compris entre 7/27 et 8/27, va donc sortir au 4$^{i\grave{e}me}$ tour, comme on le voit sur la figure.

Finalement l'ensemble des prisonniers s'obtient en excluant les tiers centraux :c'est l'ensemble de Cantor.

On peut dire encore que tous les nombres réels sont itérés à $-\infty ,$ à l'exception des nombres de Cantor. Le bassin d'attraction de -$\infty $ est l'ensemble des réels auquel on retire l'ensemble de Cantor. On verra que de nombreuses fractales sont des frontières de bassins d'attraction.


chap1__78.pngfigure 1.20 : itérations de l'application tente en partant de 0,29

La figure est tracée de la façon suivante, où l'on peut faire varier la valeur initiale et le nombre d'itérations :

> restart:with(plots):

> f:=x->piecewise(x<=0.5,3*x,3*(1-x)):

> x:=0.29:y:=f(x):s:=[x,0]:n:=9:for i from 1 to n do

s:=s,[x,y],[y,y];x:=y;y:=f(x):od:

> p1:=plot({f,t->t,[[0,1],[1,1],[1,0]]},0..1,0..2,color=black):

p2:=plot([s],thickness=2):

> display(p1,p2,scaling=constrained);

début chapitre

La courbe de Lévy


chap1__79.pngfigure 1.21 : motif de la courbe de Lévy

Pour la courbe de Lévy, on remplace chaque segment par deux segments formant un triangle rectangle. Partant du segment de longueur 1, la première itération donne le motif ci-dessus. En recommençant indéfiniment sur les segments obtenus, on arrive à la fractale de Lévy. Cette fractale se compose de 2 copies réduites d'un facteur $\sqrt{2}/2$ :une obtenue par rotation d'angle $+\pi /4$ autour de l'origine et l'autre par rotation d'angle $-\pi /4$ autour du point [1,0].

L'opérateur de Hurchinson se composera des 2 contraction-rotations
MATH

et
MATH

(voir paragraphe 1.2), soit pour la première
MATH

et pour la seconde
MATH

On peut alors programmer comme on l'a fait pour le tracé par segments de la courbe de Koch :

> restart:with(plots):with(plottools):

> f:=proc(x1,y1,x2,y2) (x1-y1)/2,(x1+y1)/2,(x2-y2)/2,(x2+y2)/2,

> (x1+y1+1)/2,(-x1+y1+1)/2,(x2+y2+1)/2,(-x2+y2+1)/2 end:

> liste:=0,0,1,0:for j to 11 do

liste:=seq(f(liste[4*i-3],liste[4*i-2],liste[4*i-1],liste[4*i]),

i=1..nops([liste])/4) od:

> p:=display(seq(line([liste[4*i-3],liste[4*i-2]],

[liste[4*i-1],liste[4*i]],color=red),i=1..nops([liste])/4)):

> display(p);


chap1__87.pngfigure 1.22 : courbe de Lévy

En réunissant la courbe de Lévy et la courbe de Lévy obtenue par reflexion autour de Ox, on obtient une dentelle de Lévy

> p1:=reflect(p,[[0,0],[1,0]]):

> display(p,p1);


chap1__88.pngfigure 1.23 : dentelle de Lévy


début chapitre

Autoorganisation et autoréparation

Les fractales sont autoorganisées, en ce sens que la structure globale est déterminée par l'opérateur de Hutchinson, qui détient le programme de construction de la fractale. On pourrait comparer au code génétique, qui détient le plan de la construction de l'organisme vivant, beaucoup plus complexe évidemment. Le point de départ est arbitraire, comme on l'a vu à propos de la construction de la courbe de Koch avec un rectangle, et, partant d'un objet quelconque, on aboutit toujours à la même fractale.

Les fractales sont également autoréparatrices, en ce sens que l'on peut retrouver la fractale entière à partir d'un morceau de celle-ci avec un petit nombre d'opérations. La structure de la fractale entière est contenue dans n'importe quel morceau de celle-ci, aussi petit soit il.

début chapitre

Exercices

Exercice 1

Triangle de Sierpinski éclaté

Prendre le programme utilisé pour tracer le pentagone de Sierpinski et l'adapter au triangle en prenant n = 3. En prenant a = 0,5, on retrouve le triangle de Sierpinski :

> n:=3:a:=0.5:

Pour éclater le triangle, prendre pour a une valeur inférieure à 0,5, par exemple 0,42 :

> n:=3:a:=0.42:

Exercice 2

Nuage

L'opérateur de Hutchinson de cette fractale se compose de 2 homothéties-rotations. Le facteur de réduction est de $1/\sqrt{2}$ ;la première rotation se fait autour de l'origine avec un angle de rotation de $\pi /2,$ et la seconde autour du point (1,0) avec un angle de rotation de $-\pi /4.$

Dans ces conditions, les formules de transformations
MATH

avec MATH s'écrivent pour la première similarité
MATH

Pour la seconde, on utilise les formules de la rotation autour du point $(x_{0},y_{0})$
MATH

si $x_{0}=1$ $y_{0}=0$ et MATH cequi donne
MATH

On programme de la même façon que pour le tracé par points du triangle de Sierpinski.

Exercice 3

Feuille

Comme dans l'exercice précédent, on prend 2 transformations, la première étant une homothétie-rotation autour de l'origine avec un facteur de réduction de 0,848 et un angle de rotation de $\pi /4$, ce qui donne a = b = 0,6, la seconde une homothétie à partir du point (1,0) de facteur de réduction 0,53, ce qui donne c = 0,53 et d = 0.

Réponses aux exercices

Exercice 1

> restart:with(plots):

> n:=3:a:=0.42;

> f:=proc(x,y) local i: seq(op([a*x+2*cos(evalf(i*2*Pi/n)),

a*y+2*sin(evalf(i*2*Pi/n))]),i=0..n) end:

> liste:=0,0:for i from 1 to 5 do:

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2):od:

>pointplot([liste],symbol=circle,scaling=constrained);


chap1__102.pngfigure 1.24 : triangle éclaté de Sierpinski

Exercice 2

> restart:with(plots):

> a:=0:d:=-1/2:b:=1/sqrt(2):c:=1/2:

> f:=proc(x,y)

a*x-b*y,b*x+a*y,c*x-d*y+1-c,d*x+c*y-d end:

> liste:=0,1:for k to 11 do

liste:=seq(f(liste[2*i-1],liste[2*i]),i=1..nops([liste])/2) od:

> pointplot([liste],color=red);


chap1__103.pngfigure 1.25 : nuage fractal

Exercice 3

Reprendre le programme de l'exercice précédent en changeant les valeurs de a, b, c et d


chap1__104.pngfigure 1.26 : feuille fractale

début chapitre

retour index