Claude Bernard 2013-2014 Informatique - TP n8
QUELQUES FRACTALES
Une fractale est une figure g´eom´etrique dont la structure est invariante par changement
d’´echelle, i.e. telle qu’un zoom sur une partie ressemble au tout (on parle d’auto-similarit´e).
Le but de ce TP est d’obtenir, `a l’aide de Python, des approximations de diff´erentes fractales.
Vous travaillerez dans des fichiers scripts diff´erents pour chacune des deux parties de ce TP,
enregistr´es sous un nom intelligible dans un sous-r´epertoire de votre r´epertoire de travail.
1 Les flocons de Koch
On obtient une fractale, appel´ee flocon de Koch, en partant d’une ligne bris´ee Lquelconque
(souvent un triangle ´equilat´eral) et en r´ep´etant `a l’infini l’op´eration qui consiste `a ajouter au
milieu de chaque arˆete AB de Lun triangle ´equilat´eral de cˆot´e 1
3AB :
→ → → · · ·
Dans ce qui suit, on appellera flocon d’ordre kde Lla ligne bris´ee obtenue `a partir de Lapr`es
kr´ep´etitions de l’op´eration d´ecrite ci-dessus.
1.1 Affichage d’une premi`ere ligne bris´ee
1. Importer les librairies math et matplotlib.pyplot.
2. Affichage d’une ligne bris´ee en Python.
a. D´efinir les listes X1 et Y1 respectivement des abscisses et des ordonn´ees des sommets d’un
triangle ´equilat´eral. [On pourra penser aux racines cubiques de l’unit´e.]
b. Afficher le triangle ainsi d´efini, `a l’aide de la suite de commandes suivantes :
X1, Y1 = ... # Les listes X1 et Y1 demand´ees en 2a
plot(X1,Y1) # On calcule les donn´ees du dessin
axis(’equal’) # On ajoute une option pour orthonormaliser le rep`ere
show() # On ouvre une fen^etre graphique contenant le dessin voulu
Si le r´esultat est conforme `a vos attentes, fermez la fenˆetre graphique, effacez (ou commentez)
les trois derni`eres lignes relatives `a ce dessin dans votre fichier script, et passez `a la suite.
1.2 Calcul d’un flocon
3. (Bonus) Pr´eliminaires math´ematiques.
On munit le plan d’un rep`ere orthonormal direct. Soient AB une arˆete de Let CDE le
triangle ´equilat´eral ajout´e au milieu de AB lors du calcul du flocon d’ordre un de L:
A
C
D
E
B
V´erifier que si Ax1
y1,Bx2
y2et x
y=x2x1
y2y1, alors Cx1+x
3
y1+y
3
,Dx1+x
2+y
23
y1+y
2x
23
et Ex1+2x
3
y1+2y
3
.
[On rappelle que le vecteur
vy
xest directement orthogonal `a
ux
y.]
1/4
Claude Bernard 2013-2014 Informatique - TP n8
4. Impl´ementation Python.
a. ´
Ecrire une fonction pointe(x1,y1,x2,y2) prenant en arguments les coordonn´ees de deux
points Aet Bdu plan, et renvoyant les deux listes respectivement des abscisses et des
ordonn´ees des points C,D,Eet Bdans cet ordre, comme calcul´ees en 3.
b. Tester cette fonction pointe sur quelques exemples. En particulier, on doit obtenir :
>>> pointe(1,0,1,3)
([1.0, 1.8660254037844388, 1.0, 1], [1.0, 1.5, 2.0, 3])
c. `
A l’aide de la fonction pointe de 4a et d’une boucle for, ´ecrire une fonction flocon(X,Y)
prenant en arguments les listes respectivement des abscisses et des ordonn´ees des sommets
d’une ligne bris´ee L, et renvoyant les listes des abscisses et des ordonn´ees des sommets du
flocon d’ordre un de L.
d. Tester cette fonction sur les listes X1 et Y1 d´efinies en 2a.
Si l’affichage du r´esultat de la commande flocon(X1,Y1) est conforme `a vos attentes,
vous pouvez passer `a la suite.
5. Affichage d’un flocon.
a. Calculer (`a l’aide de Python) les listes Xet Ydes abscisses et des ordonn´ees du flocon
d’ordre cinq du triangle ´equilat´eral d´efini par les listes X1 et Y1 de 2a.
b. Afficher ce flocon.
Rq. Vous pouvez donner un titre au dessin, et enregistrer l’image ainsi obtenue, en ajoutant les
options title("Un joli flocon") et savefig("flocon.png") avant la commande show().
6. Animation des premi`eres ´etapes de construction.
Effacez (ou commentez) le code relatif `a 5b dans votre fichier script.
En y reportant et en compl´etant le code ci-dessous, obtenir l’animation des cinq premi`eres
´etapes de construction du flocon de Koch.
X,Y = ...
p=plot(X,Y)[0] # on stocke dans p les donn´ees du dessin
axis(’equal’)
for kin ...
pause(1) # on admire le r´esultat pendant 1s
X,Y = ... # on met `a jour X et Y
p.set_data(X,Y) # on met `a jour les donn´ees du dessin
show()
1.3 (Bonus) Des flocons carr´es
Reprendre la d´emarche de cette premi`ere partie en rempla¸cant les triangles par des carr´es,
pour obtenir des flocons et une animation de type :
→ → → · · ·
2/4
Claude Bernard 2013-2014 Informatique - TP n8
2 Les ensembles de Mandelbrot et de Julia
On consid`ere la suite complexe (zn)nN, d´ependant d’un param`etre cC, d´efinie par :
z0Cet zn+1 =z2
n+cpour tout nN.
On s’int´eresse dans ce qui suit au caract`ere born´e (ou non) de cette suite, en fonction de cet z0.
L’ensemble de Mandelbrot est l’ensemble des nombres complexes cpour lesquels la suite
(zn)nNde premier terme z0= 0 et de param`etre cest born´ee.
L’ensemble de Julia associ´e `a cCest l’ensemble des complexes z0Cpour lesquels la
suite (zn)nNde premier terme z0et de param`etre cest born´ee.
2.1 Pr´eliminaires
7. (Bonus) Pr´eliminaires math´ematiques. On pose m= max(2,|c|) et D2={zC| |z|62}.
a. Montrer que s’il existe pNtel que |zp|> m, alors la suite (zn)nNn’est pas born´ee.
[Fixer εR
+tel que ε < |zp| − met montrer que |zp+1|>|zp|(1 + ε). En d´eduire que
nN,|zp+n|>|zp|(1 + ε)n, et conclure.]
b. En d´eduire que l’ensemble de Mandelbrot, et les ensembles de Julia associ´es `a cD2,
sont inclus dans D2.
8. Test du caract`ere born´e de la suite (zn)nN.
Vu 7, la suite (zn)nNest born´ee si et seulement si tous ses termes sont de module inf´erieur `a
m= max(2,|c|). Comme il n’est bien sˆur pas possible, sur machine, de calculer l’infinit´e des
termes zn, on consid`erera dans ce qui suit que la suite (zn)nNest born´ee si ses 100 premiers
termes sont de module inf´erieur `a m.
a. ´
Ecrire une fonction rang_de_sortie(c,z0) prenant en argument deux complexes cet z0
et renvoyant, dans la suite (zn)nNde premier terme z0et de param`etre c, le plus petit
indice p[[0; 99]] tel que |zp|> m, s’il existe, ou renvoyant 100 sinon.
b. Tester cette fonction sur quelques exemples. En particulier, on doit obtenir :
>>> rang_de_sortie(1,0)
3
>>> rang_de_sortie(0,1j)
100
Ainsi, les suites (zn)nNborn´ees ont un “rang de sortie” ´egal `a 100, et on consid`ere par abus
dans ce qui suit que la r´eciproque est vraie.
9. Affichage graphique d’une matrice.
La m´ethode utilis´ee en 2.2 et 2.3 ci-dessous pour visualiser les ensembles de Mandelbrot et
de Julia, fait appel `a la commande matshow de la librairie matplotlib.pyplot, qui permet
de visualiser en couleurs le contenu d’une matrice (objet de type array en Python).
a. Charger les librairies numpy et matplotlib.pyplot.
Consulter l’aide sur la commande zeros de la librairie numpy.
b. `
A l’aide de la commande zeros et d’une boucle for, d´efinir la matrice diagonale Dde
taille 100 dont le coefficient diagonal d’indice (j, j) vaut j+ 1.
[On acc`ede au coefficient (j, k)d’une matrice Dpar la commande D[j,k], en se
rappelant que la num´erotation en Python commence `a 0.]
c. Visualiser la matrice Dde 9b, par les commandes suivantes :
D = ... # D´efinition de D
matshow(D) # On calcule les donn´ees du dessin
show() # On ouvre une fen^etre graphique contenant le dessin voulu
Interpr´eter : en quelle couleur est repr´esent´e un coefficient ´egal `a 0 ? `a 100 ?
3/4
Claude Bernard 2013-2014 Informatique - TP n8
2.2 L’ensemble de Mandelbrot
Strat´egie. Pour obtenir une repr´esentation (approximative) de l’ensemble de Mandelbrot :
On fixe l’entier N= 400, qui sera la r´esolution de notre dessin.
On cr´ee un quadrillage r´egulier de l’ensemble Cdes complexes de parties r´eelle et imaginaire
dans [2; 2] (dans lequel l’ensemble de Mandelbrot est inclus, par 7), i.e. un ensemble de N2
complexes zj,k, o`u j, k [[0; N1]], r´eguli`erement r´epartis dans C.
On cr´ee la matrice Mcarr´ee de taille Ndont le coefficient d’indice (j, k) est le “rang de sortie”
de la suite (zn)nNde premier terme z0= 0 et de param`etre c=zj,k.
On visualise cette matrice Mcomme en 9c : l’ensemble de Mandelbrot, correspondant aux
coefficients ´egaux `a 100 dans cette matrice M, apparaˆıtra en rouge sur le dessin.
10. a. Consulter l’aide relative `a la commande linspace de la librairie numpy.
b. `
A l’aide de la commande linspace, d´efinir deux listes Xet Yde Npoints r´eguli`erement
espac´es dans l’intervalle [2; 2]. Les ´el´ements de Xiront en croissant, et ceux de Yen
d´ecroissant.
11. `
A l’aide de la commande zeros et de deux boucles for, cr´eer une matrice Mcarr´ee de taille N,
dont le terme d’indice (j, k)[[0; N1]]2vaut rang_de_sortie(complex(X[k],Y[j]),0).
12. a. Afficher la matrice M.
b. (Bonus) Zoomer sur une partie du dessin, en red´efinissant les listes Xet Y, pour observer
la propri´et´e d’auto-similarit´e de l’ensemble de Mandelbrot.
2.3 (Bonus) Les ensembles de Julia
Reprendre la d´emarche entreprise en 2.2 pour obtenir la repr´esentation (approximative) de
diff´erents ensembles de Julia associ´es `a diff´erents complexes cD2.
Voici quelques valeurs de c`a essayer, en se rappelant que ise note 1j en Python :
c= 0 (deviner l’ensemble de Julia correspondant),
c= 0.25, c= 0.26, c= 0.5, c=0.5, c=0.75, c=1,
c= 0.5i,c= 0.64i,c= 0.65i,c=i,
c=0.74 + 0.1i,c=0.85 + 0.2i,c=0.05 + 0.7i,c=0.29 0.64i,c=0.57 + 0.48i...
4/4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !