Logiciel libre de géométrie, d'analyse et de simulation multiplateforme par Yves Biton

Accueil Tutoriels Exemples guidés

Calcul matriciel : Tutoriel 3 (Fougère de Barnsley)

modification lundi 30 juillet 2021.

Toutes les versions de cet article : [English] [Español] [français]



Dans ce troisième tutoriel sur le calcul matriciel, nous allons utiliser une macro-construction et une macro de construction récursive pour créer une fougère de Barnsley.

Vous pouvez vous référer à cet article Wikipedia.

Démarrez MathGraph32 (version 6.7.3 ou ultérieure) et utilisez l’icône pour créer une figure munie d’un repère. Choisissez un repère orthogonal sans quadrillage et sans graduations.

Utilisez l’icône pour créer trois calculs réels p1, p2 et p3 avec les formules ci-dessous :

Nom du calcul Formule
p1 0.01
p2 0.85
p3 0.07

Il est inutile de définir un calcul p4 car la somme des 4 probabilités est égale à 1.

Nous simulerons un tirage aléatoire par le choix d’un nombre aléatoire compris entre 0 et 1 (1 exclu).

Créez les deux calculs réels suivants :

Nom du calcul Formule Commentaire
alea rand(0) Nombre aléatoire de [0 ;1[
cas si(alea<p1,1,si(alea<p1+p2,2,si(alea<p1+p2+p3,3,4))) cas vaut 1, 2, 3 ou 4 suivant le résultat obtenu dans alea

Nous allons maintenant définir 8 matrices par leurs éléments.

Pour cela déroulez la barre des calculs et cliquez sur l’icône qui permet d’utiliser des outils d’utilisation moins courante.

Dans la liste proposée, choisissez Matrice.

Vous devrez pour chaque matrice définir son nombre de lignes et de colonnes et ensuite donner chacun de ses éléments.

Nom de la matrice Nombre de lignes Nombre de colonnes Éléments
A1 2 2 $\begin{matrix}0 & 0\\ 0 & 0.16\end{matrix}$
A2 2 2 $\begin{matrix}0.85 & 0.04\\ -0.04 & 0.85\end{matrix}$
A3 2 2 $\begin{matrix}0.2 & -0.26\\ 0.23 & 0.22\end{matrix}$
A4 2 2 $\begin{matrix}-0.15 & 0.28\\ 0.26 & 0.24\end{matrix}$
B1 2 1 $\begin{matrix}0 \\ 0 \end{matrix}$
B2 2 1 $\begin{matrix}0 \\ 1.6 \end{matrix}$
B3 2 1 $\begin{matrix}0 \\ 1.6 \end{matrix}$
B4 2 1 $\begin{matrix}0 \\ 0.44 \end{matrix}$

Nous allons maintenant définir deux matrices A (2 lignes et deux colonnes) et B (deux lignes et une colonne).

Pour cela déroulez à nouveau la barre des calculs et cliquez sur l’icône .

Dans la liste proposée, choisissez Calcul matriciel.

Définissez A et B comme ci-dessous :

Nom de la matrice Formule
A si(cas=1,A1,si(cas=2,A2,si(cas=3,A3,A4)))
B si(cas=1,B1,si(cas=2,B2,si(cas=3,B3,B4)))

Déroulez à nouveau la barre des calculs et cliquez sur l’icône .

Dans la liste proposée, choisissez Matrice.

Créez la matrice X comme ci-dessous (ses deux éléments sont nuls) :

A l’aide de l’icône créez un nouveau calcul réel nommé alea’ avec la formule suivante :

rand(0)+alea*0

Nous expliquerons plus loin pourquoi cette formule plutôt que rand(0).

Créez maintenant un nouveau calcul matriciel nommé Y avec la formule suivante :

A*X+B

Il nous reste à créer un point dont les coordonnées dans notre repère sont les éléments de la matrice Y.

Dans la palette des couleurs, activez la couleur rouge, déroulez la barre d’icônes des points et cliquez sur l’icône (création d’un point par ses coordonnées dans un repère).

Complétez la boîte de dialogue comme ci-dessous :

Nous allons maintenant créer une macro-construction dont les éléments sources seront les objets suivants :

Le repère (0 ;I,J)
Le calcul p1
Le calcul p2
Le calcul p3
La matrice A1
La matrice A2
La matrice A3
La matrice A4
La matrice B1
La matrice B2
La matrice B3
La matrice B4
Le calcul alea
La matrice X

Les objets finaux seront les suivants :

Le calcul alea’
La matrice Y
Le point de coordonnées (y(1,1), Y(2,1)

Pour qu’une construction soit valide il faut que les objets finaux dépendent au moins d’un objet source. C’est la raison pour laquelle dans la formule de alea’ nous avons mis comme formule rand(0)+alea*0 de façon que ce calcul dépendant de l’objet source alea.

Une fois cette macro-construction créé, nous créerons une macro de construction itérative qui, à chaque étape, remplacera le calcul alea par le calcul alea’ et la matrice X par la matrice Y. Le nuage de points obtenu représentera notre fougère.

Commençons donc par créer notre macro-construction.

Pour cela il faut cliquer dans la barre d’outils du haut sur l’icône qui fait apparaître des outils supplémentaires.

Cliquez ensuite sur l’icône puis choisissez Choix des objets sources numériques.

Une boîte de dialogue s’ouvre.

Pour sélectionner un objet source numérique, il faut soit sélectionner un objet dans la liste de gauche puis cliquer sur le bouton Insérer soit double-cliquer sur un élément de la liste de gauche.

Vous devez avoir dans la liste de droite les éléments suivants (dans cet ordre) :

(0 ;I,J)
p1
p2
p3
A1
A2
A3
A4
B1
B2
B3
B4
alea
X

Attention : Il est important de ne rajouter alea qu’une fois avoir ajouté les matrices de A1 à B4.

Validez alors votre boîte de dialogue.

Notre macro-construction n’a pas d’objet source graphique.

Choisissons maintenant les objets finaux numériques.

Cliquez sur l’icône puis choisissez Choix des objets finaux numériques.

Dans la liste de gauche cliquez sur alea’ et sur Y pour les sélectionner comme ci-dessous puis validez.

Il nous reste à désigner notre objet final graphique qui est le dernier point rouge que nous avons créé.

Cliquez sur l’icône puis choisissez Choix des objets finaux graphiques.

Cliquez sur le point rouge puis cliquez en bas et à droite sur le bouton rouge STOP.

Avant de finaliser notre construction nous allons donner à notre point rouge un style "pixel".

Dans la palette de style de point choisissez le style de point pixel (en bas et à gauche), cliquez dans la barre supérieure sur l’outil Palette et cliquez sur le point rouge.

Il nous reste à finaliser notre construction.

Cliquez sur l’icône puis choisissez Finir la construction en cours.

Une boîte de dialogue s’ouvre.

Dans le champ Nom de la construction entrez par exemple Barnsley.

Dans le champ Information, entrez ce qui suit :

#1:Le repère
#2:Probabilité du cas 1
#3:Probabilité du cas 2
#4:Probabilité du cas 3
#5:Matrice A pour le cas 1
#6:Matrice A pour le cas 2
#7:Matrice A pour le cas 3
#8:Matrice A pour le cas 4
#9:Matrice B pour le cas 1
#10:Matrice B pour le cas 2
#11:Matrice B pour le cas 3
#12:Matrice B pour le cas 4
#13:Calcul fournissant un nombre aléatoire entre 0 et 1
#14:Valeur initiale de la matrice X

Ce que nous mettons dans le champ information sert à donner une indication à un utilisateur de notre macro pour chaque objet source.

Validez. Notre construction est créée.

Si nous voulions utiliser cette construction dans une autre figure, il nous suffirait de cliquer sur l’icône puis de choisir Enregistrer une construction de la figure dans un fichier. Notre construction serait alors enregistrée dans un fichier de suffixe mgc.

Nous allons maintenant créer un macro de construction itérative qui utilisera la macro-construction que nous venons de créer.

Pour cela, déroulez la barre des outils d’affichage et cliquez sur l’icône qui vous propose alors différents types de macros que vous pouvez créer.

Comme notre figure comporte bien une macro-construction, parmi les outils proposés figure le choix Macro de construction itérative.

Cliquez d’bord à l’endroit où sera affiché l’intitulé de la macro, en haut et à gauche de notre figure.

Une boîte de dialogue s’ouvre.

Remplissez cette boîte comme ci-dessous :

Une fois validée, s’ouvre une autre boîte de dialogue qui permet de choisir les objets sources. Il faut affecter à chacun des 14 éléments sources un objet de la figure.

Par exemple ci-dessous on vient d’affecter au quatrième élément source la probabilité contenu dans le calcul p3.

Voici ci-dessous les affectations à faire :

Element source n° Element à affecter
1 (O ;i,j)
2 p1
3 p2
4 p3
5 A1
6 A2
7 A3
8 A4
9 B1
10 B2
11 B3
12 B4
13 alea
14 X

Validez ensuite votre boîte de dialogue.

Votre macro Construire est maintenant visible en haut et à gauche de la figure.

A noter que les 12 premiers éléments sources sont communs à toutes les implémentations successives de la macro-construction.

Chaque nouvelle itération prend donc comme 12 premiers éléments sources ces éléments communs, le 13 ième étant le premier objet final de l’implémentation précédente de la construction(alea’) et le 14 ième le deuxième élément final soit la matrice Y.

A ce stade il est prudent de sauvegarder votre figure à l’emplacement de votre choix car, une fois que la macro construire aura été exécutée, la figure contiendra un très grand nombre d’objets et fournira un fichier très volumineux si vous l’enregistrez.

Dans la barre d’outils supérieure, vous pouvez maintenant activer l’outil puis cliquer sur Construire.

Au bout de quelques secondes (suivant la puissance de votre machine) vous voyez apparaître notre fougère de Barnsley.

Voici ci-dessous le code Base 64 de la figure obtenue suivi de la figure en ligne.
Code Base 64 :

TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUqAAAC4AAAAQEAAAABAAAABgAIQmFybnNsZXkBkSMxOkxlIHJlcMOocmUKIzI6UHJvYmFiaWxpdMOpIGR1IGNhcyAxCiMzOlByb2JhYmlsaXTDqSBkdSBjYXMgMgojNDpQcm9iYWJpbGl0w6kgZHUgY2FzIDMKIzU6TWF0cmljZSBBIHBvdXIgbGUgY2FzIDEKIzY6TWF0cmljZSBBIHBvdXIgbGUgY2FzIDIKIzc6TWF0cmljZSBBIHBvdXIgbGUgY2FzIDMKIzg6TWF0cmljZSBBIHBvdXIgbGUgY2FzIDQKIzk6TWF0cmljZSBCIHBvdXIgbGUgY2FzIDEKIzEwOk1hdHJpY2UgQiBwb3VyIGxlIGNhcyAyCiMxMTpNYXRyaWNlIEIgcG91ciBsZSBjYXMgMwojMTI6TWF0cmljZSBCIHBvdXIgbGUgY2FzIDQKIzEzOkNhbGN1bCBmb3Vybmlzc2FudCB1biBub21icmUgYWzDqWF0b2lyZSBlbnRyZSAwIGV0IDEKIzE0OlZhbGV1ciBpbml0aWFsZSBkZSBsYSBtYXRyaWNlIFgKAAAADgAAAAMCAAAAFP####8AAAABABFDRWxlbWVudEdlbmVyaXF1ZQAAAAAAGgAAABoAAAAAAAJwMf####8AAAABAAAAAAACcDL#####AAAAAQAAAAAAAnAz#####wAAAAEAAAAAAAJBMf####8AAAAfAAAAAAACQTL#####AAAAHwAAAAAAAkEz#####wAAAB8AAAAAAAJBNP####8AAAAfAAAAAAACQjH#####AAAAHwAAAAAAAkIy#####wAAAB8AAAAAAAJCM#####8AAAAfAAAAAAACQjT#####AAAAHwAAAAAABGFsZWH#####AAAAAQAAAAAAAVj#####AAAAH#####8AAAABAAdDQ2FsY3VsAP####8AA2NhcwA0c2koYWxlYTxwMSwxLHNpKGFsZWE8cDErcDIsMixzaShhbGVhPHAxK3AyK3AzLDMsNCkpKf####8AAAABAA1DRm9uY3Rpb24zVmFyAP####8AAAABAApDT3BlcmF0aW9uBP####8AAAABAA9DUmVzdWx0YXRWYWxldXIAAAAMAAAABAAAAAH#####AAAAAQAKQ0NvbnN0YW50ZT#wAAAAAAAAAAAAAgAAAAADBAAAAAQAAAAMAAAAAwAAAAAEAAAAAQAAAAQAAAACAAAABUAAAAAAAAAAAAAAAgAAAAADBAAAAAQAAAAMAAAAAwAAAAADAAAAAAQAAAABAAAABAAAAAIAAAAEAAAAAwAAAAVACAAAAAAAAAAAAAVAEAAAAAAAAP####8AAAABAAhDQ2FsY01hdAD#####AAFBAClzaShjYXM9MSxBMSxzaShjYXM9MixBMixzaShjYXM9MyxBMyxBNCkpKQAAAAIAAAAAAwgAAAAEAAAADgAAAAU#8AAAAAAAAAAAAAQAAAAEAAAAAgAAAAADCAAAAAQAAAAOAAAABUAAAAAAAAAAAAAABAAAAAUAAAACAAAAAAMIAAAABAAAAA4AAAAFQAgAAAAAAAAAAAAEAAAABgAAAAQAAAAHAAAABgD#####AAFCAClzaShjYXM9MSxCMSxzaShjYXM9MixCMixzaShjYXM9MyxCMyxCNCkpKQAAAAIAAAAAAwgAAAAEAAAADgAAAAU#8AAAAAAAAAAAAAQAAAAIAAAAAgAAAAADCAAAAAQAAAAOAAAABUAAAAAAAAAAAAAABAAAAAkAAAACAAAAAAMIAAAABAAAAA4AAAAFQAgAAAAAAAAAAAAEAAAACgAAAAQAAAALAAAAAQH#####AAVhbGVhJwAOcmFuZCgwKSthbGVhKjAAAAADAP####8AAAACAAlDRm9uY3Rpb24RAAAABQAAAAAAAAAAP+rYUPYavTYAAAADAgAAAAQAAAAMAAAABQAAAAAAAAAAAAAABgH#####AAFZAAVBKlgrQgAAAAMAAAAAAwIAAAAEAAAADwAAAAQAAAANAAAABAAAABD#####AAAAAQAQQ1BvaW50RGFuc1JlcGVyZQH#####AP8AAAAQAAAAAAAAAAAAAABACAAAAAAAAAAABwAAAAAA#####wAAAAEACENUZXJtTWF0AAAAEgAAAAU#8AAAAAAAAAAAAAU#8AAAAAAAAAAAAAkAAAASAAAABUAAAAAAAAAAAAAABT#wAAAAAAAAAAAAAQAAACP#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgAAAAVACSH7VEQtGP####8AAAABAApDUG9pbnRCYXNlAP####8AAAAAAA4AAU8AwCgAAAAAAAAAAAAAAAAAAAAABQABQHuAAAAAAABAf9AAAAAAAP####8AAAABABRDRHJvaXRlRGlyZWN0aW9uRml4ZQD#####AQAAAAAQAAABAAAAAQAAAAEBP#AAAAAAAAD#####AAAAAQAPQ1BvaW50TGllRHJvaXRlAP####8AAAAAAA4AAUkAwBgAAAAAAAAAAAAAAAAAAAAABQABQEgAAAAAAAAAAAAC#####wAAAAEACUNEcm9pdGVBQgD#####AAAAAAAQAAABAAAAAQAAAAEAAAAD#####wAAAAEAFkNEcm9pdGVQZXJwZW5kaWN1bGFpcmUA#####wAAAAAAEAAAAQAAAAEAAAABAAAABP####8AAAABAAlDQ2VyY2xlT0EA#####wEAAAAAAAABAAAAAQAAAAP#####AAAAAQAQQ0ludERyb2l0ZUNlcmNsZQD#####AAAABQAAAAb#####AAAAAQAQQ1BvaW50TGllQmlwb2ludAD#####AQAAAAAQAAABAAAFAAEAAAAHAAAAEgD#####AAAAAAAOAAFKAMAoAAAAAAAAwBAAAAAAAAAAAAUAAgAAAAf#####AAAAAgAHQ1JlcGVyZQD#####AObm5gAAAAEAAAABAAAAAwAAAAkAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFP#AAAAAAAAAAAAAFP#AAAAAAAAD#####AAAAAQAKQ1VuaXRleFJlcAD#####AAR1bml0AAAACv####8AAAABAAtDSG9tb3RoZXRpZQD#####AAAAAQAAAAMDAAAABT#wAAAAAAAAAAAABAAAAAv#####AAAAAQALQ1BvaW50SW1hZ2UA#####wEAAAAAEAACVyIBAAABAAAAAAMAAAAM#####wAAAAEACUNMb25ndWV1cgD#####AAAAAQAAAA0AAAABAP####8AAnAxAAQwLjAxAAAABT+EeuFHrhR7AAAAAQD#####AAJwMgAEMC44NQAAAAU#6zMzMzMzMwAAAAEA#####wACcDMABDAuMDcAAAAFP7HrhR64UewAAAABAP####8ABGFsZWEAB3JhbmQoMCkAAAAHEQAAAAUAAAAAAAAAAD#pgoz0Pw88AAAAAQD#####AANjYXMANHNpKGFsZWE8cDEsMSxzaShhbGVhPHAxK3AyLDIsc2koYWxlYTxwMStwMitwMywzLDQpKSkAAAACAAAAAAMEAAAABAAAABIAAAAEAAAADwAAAAU#8AAAAAAAAAAAAAIAAAAAAwQAAAAEAAAAEgAAAAMAAAAABAAAAA8AAAAEAAAAEAAAAAVAAAAAAAAAAAAAAAIAAAAAAwQAAAAEAAAAEgAAAAMAAAAAAwAAAAAEAAAADwAAAAQAAAAQAAAABAAAABEAAAAFQAgAAAAAAAAAAAAFQBAAAAAAAAD#####AAAAAQAIQ01hdHJpY2UA#####wACQTEAAAACAAAAAgAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAU#xHrhR64UewAAABgA#####wACQTIAAAACAAAAAgAAAAU#6zMzMzMzMwAAAAU#pHrhR64Ue#####8AAAABAAxDTW9pbnNVbmFpcmUAAAAFP6R64UeuFHsAAAAFP+szMzMzMzMAAAAYAP####8AAkEzAAAAAgAAAAIAAAAFP8mZmZmZmZoAAAAZAAAABT#Qo9cKPXCkAAAABT#NcKPXCj1xAAAABT#MKPXCj1wpAAAAGAD#####AAJBNAAAAAIAAAACAAAAGQAAAAU#wzMzMzMzMwAAAAU#0euFHrhR7AAAAAU#0KPXCj1wpAAAAAU#zrhR64UeuAAAABgA#####wACQjEAAAACAAAAAQAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAABgA#####wACQjIAAAACAAAAAQAAAAUAAAAAAAAAAAAAAAU#+ZmZmZmZmgAAABgA#####wACQjMAAAACAAAAAQAAAAUAAAAAAAAAAAAAAAU#+ZmZmZmZmgAAABgA#####wACQjQAAAACAAAAAQAAAAUAAAAAAAAAAAAAAAU#3Cj1wo9cKQAAAAYA#####wABQQApc2koY2FzPTEsQTEsc2koY2FzPTIsQTIsc2koY2FzPTMsQTMsQTQpKSkAAAACAAAAAAMIAAAABAAAABMAAAAFP#AAAAAAAAAAAAAEAAAAFAAAAAIAAAAAAwgAAAAEAAAAEwAAAAVAAAAAAAAAAAAAAAQAAAAVAAAAAgAAAAADCAAAAAQAAAATAAAABUAIAAAAAAAAAAAABAAAABYAAAAEAAAAFwAAAAYA#####wABQgApc2koY2FzPTEsQjEsc2koY2FzPTIsQjIsc2koY2FzPTMsQjMsQjQpKSkAAAACAAAAAAMIAAAABAAAABMAAAAFP#AAAAAAAAAAAAAEAAAAGAAAAAIAAAAAAwgAAAAEAAAAEwAAAAVAAAAAAAAAAAAAAAQAAAAZAAAAAgAAAAADCAAAAAQAAAATAAAABUAIAAAAAAAAAAAABAAAABoAAAAEAAAAGwAAABgA#####wABWAAAAAIAAAABAAAABQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAQD#####AAVhbGVhJwAOcmFuZCgwKSthbGVhKjAAAAADAAAAAAcRAAAABQAAAAAAAAAAP+rYUPYavTYAAAADAgAAAAQAAAASAAAABQAAAAAAAAAAAAAABgD#####AAFZAAVBKlgrQgAAAAMAAAAAAwIAAAAEAAAAHAAAAAQAAAAeAAAABAAAAB0AAAAIAP####8A#wAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAHAAAAAAoAAAAJAAAAIAAAAAU#8AAAAAAAAAAAAAU#8AAAAAAAAAAAAAkAAAAgAAAABUAAAAAAAAAAAAAABT#wAAAAAAAA#####wAAAAEAG0NNYWNyb0NvbnN0cnVjdGlvbkl0ZXJhdGl2ZQD#####AAAA#wEAAP####8QQDGAAAAAAABAM4UeuFHrhgIB7+#7AAAAAAAAAAAAAAAFAAAAAAAAAAAACkNvbnN0cnVpcmUAAAAAAA4AAAAKAAAADwAAABAAAAARAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAASAAAAHgAAAAAAABOIAAAADAEAAP8AAAAAAAAADv##########

Voici la figure obtenue :