mercredi 4 avril 2018

dessins de fractales avec Maxima

Depuis quelques mois je m'intéresse de plus en plus au logiciel de calcul formel Maxima. Moins populaire que Sage et son interface intégrée à tout navigateur il est pourtant bien plus léger et très complet. Les différentes interfaces graphiques permettant d'accéder à Maxima offrent la possibilité d'effectuer de nombreux tracés géométriques en s'appuyant sur Gnuplot. Il y a par exemple plusieurs fonctions prédéfinies pour tracer les fractales  les plus célèbres.





Avant toute chose il faut commencer par charger le package fractals dans Maxima. Celà se fait tout simplement en intégrant en début de session la commande :

load(fractals)$

Application contractante


le principe général des fonctions suivantes est de calculer n points de la courbe dans une liste L puis de la tracer les arrêtes correspondant à cette liste avec la commande :

plot2d([discrete,L],[style,dots])


Attention cependant à calculer un nombre de points raisonnable ($n\leq 10000$ ) pour que le calcul ne prenne pas trop de temps. Quelques exemples :

  • la fougère fractale avec  fernfale(n) 
  • les arbres fractals avec treefale(n)
  • le triangle de Sierpinsky avec sierpinskiale(n)


n:100000; plot2d([discrete,fernfale(n)], [style,dots]);



n:100000; plot2d([discrete,treefale(n)], [style,dots]);
n:100000; plot2d([discrete,sierpinskiale(n)], [style,dots]);

Courbes fractales

Les fractales suivantes sont calculées en itérant n fois de suite un certain processus, le nombre de points de la liste L générée grossit exponentiellement en fonction de n. On trace ensuite la courbe comme pour les fracatles précédentes avec la commande plot2d([discrete,L],[style,dots]). Là encore attention au temps de calcul nécessaire, il reste raisonnable tant que $n\leq 5$, avec du temps on peut aller à $n=6$ mais au delà c'est difficile!

  • la courbe de  Hilbert s'obtient avec hilbertmap(n)
  • le flocon de Von Kock est généré par  snowmap(P,n)où P est une liste  qui décrit le polygone de départ  
n:5; plot2d([discrete,hilbertmap(n)], [style,dots]);



n:5; plot2d([discrete,snowmap([-1,sqrt(3)*%i,1,-1],5)(n)], [style,dots]);




Les ensembles de  Mandelbrot et de  Julia

J'ai déjà écrit ici un billet sur la construction de ces ensembles , on trouve dans maxima des commandes pour les tracer directement. L'ensemble de Julia est l'ensemble des données initiales $z_0$ telles que la suite définie par $z_{n+1}=z_n^2+c$ reste bornée :

  • le paramètre c est fixé par la variable julia_parameter
  • ensuite utiliser julia(plot_options) pour faire calcul et tracé
  • sinon on peut aussi utiliser plot3d(julia_set,plot_options)
L'ensemble de Mandelbrot correspond lui à l'ensemble des données initiales $z_0$  telles que la suite définie par $z_{n+1}=z_n^2+z_0$ reste bornée. On pourra tracer cet ensemble avec la commande mandelbrot(plot_options) ou avec plot3d(mandelbrot_set,plot_options)
julia_parameter:%i; julia (-0.9, 0, [iterations, 20], [x, -2, 2],[y, -1, 1],[grid, 400, 400])$


mandelbrot ([iterations, 30], [x, -2.25, 0.75], [y, -1.2, 1.2],
[grid,400,400],[color_bar_tics, 0, 6,36])$


On peut aussi   tracer l'ensemble de Julia des points  $z_0$ tels que  la suite définie par $z_{n+1}=i\times sin(z_n)$ diverge avec le commande suvante


plot3d (julia_sin, [x, -1,1], [y, 2,4],[grid,200,200],
        [zlabel,""],[ztics,false],[elevation,0], [azimuth,0],[mesh_lines_color,false],
        [palette, [gradient, violet, magenta, blue, cyan,green,yellow,orange,red,black]])$

dans chaque cas on a personnalisé l'affichage à partir des optionsde plot3d
  • les limites de la fenêtre graphique [x,xmin,xmax],[y,ymin,ymax]
  •  visualisation de'un graphe 3D sous forme d'une surface avec des couleurs dépendant de l'élévation avec [elevation,0]
  • nombre de points  de la grille [grid, n,n](se limiter à $n\leq 400$)
  • choix du nombre d'itérations [iteration, n]  (se limiter à $n\leq 40$)
ces options se trouvent facilement dans l'aide en ligne de Maxima

Aucun commentaire:

Enregistrer un commentaire

Pour écrire des formules mathématiques vous pouvez utiliser la syntaxe latex en mettant vos formules entre des "dollars" $ \$....\$ $ par exemple :
- $\sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}$ s'obtient avec \sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}
- $\mathbb R$ s'obtient avec {\mathbb R} et $\mathcal D$ s'obtient avec {\mathcal D}
- pour les crochets $\langle .,. \rangle$ dans les commentaires utilisez \langle .,. \rangle
vous pouvez écrire du html dans les commentaires :
- italique <i> ... </i> gras <b> ... </b>
- lien <a href="http://adresse "> .... </a>