Suites numériques Programmation Python
Comprendre la singularité des objets mathématiques que sont les fractales à travers l'exemple d'un flocon de Koch que l'on programmera en Python à l'aide du module Turtle.
La fractale est un objet mathématique basé sur la répétition. Sa structure est identique, quelle que soit l'échelle à laquelle on l'observe.
Certaines fractales sont bien connues. On a par exemple l'ensemble de Mandelbrot, donc le script se trouve par défaut sur la calculatrice NumWorks. Le flocon de Koch est l'une de ces fractales très populaires et dont la réalisation est simple à comprendre. Elle repose sur une série d'instructions que l'on peut répéter à l'infini :
On veut modéliser le nombre de segments se trouvant sur une ligne du flocon (comme montré précédemment sur la figure) par une suite .
A l'état initial , on ne dispose que d'un seul segment horizontal. Quelle est la valeur de (qui correspond au dessin de gauche sur la figure) ?
On a et .
Quelle est la relation de récurrence entre et ?
En déduire la formule explicite de la suite .
On s'intéresse maintenant à la longueur de chacun de ces segments.
Soit la longueur du segment d'origine. On donne . Quelle est la longueur d'un segment après la première itération ?
Après la première itération, chaque segment mesure .
On note la suite qui modélise la longueur d'un segment au bout de itérations. Quelle est la relation de récurrence entre et ? En déduire une expression de .
On a avec , d'où
On souhaite maintenant s'intéresser à la longueur totale du côté du flocon après itérations.
On appelle la suite associée à cette longueur. Exprimer en fonction de et .
On rappelle que et . A l'aide de l'application Suites, faire apparaître le tableau de valeurs des trois suites entre 0 et 15. Quelle conjecture peut-on faire sur la convergence de ?
Démontrer cette conjecture.
Il s'agit d'une suite géométrique de raison supérieure à 1. Elle tend donc vers l'infini.
Nous allons enfin nous intéresser à l'évolution de la surface située sous la courbe au fil des itérations.
On considère un triangle équilatéral de côté . Calculer son aire en fonction de .
Le triangle équilatéral de côté admet une hauteur de longueur .
Sa surface est donc égale à .
D'après l'étude précédente de la suite , établir que l'aire de chacun des triangles formés à chaque itération évolue selon une suite géométrique de raison .
A chaque itération, la longueur d'un segment est multipliée par . L'aire d'un triangle est donc multipliée par .
On appelle l'aire formée par l'ensemble des triangles apparaissant à chaque itération sous la courbe, pour . D'après les questions précédentes, exprimer en fonction de et montrer qu'il s'agit d'une suite géométrique.
A chaque itération, il apparaît 4 fois plus de triangles (suite ) dont l'aire est 9 fois plus petite. D'où, pour tout :
Il s'agit bien de la définition d'une suite géométrique de raison .
On rappelle que l'aire contenue sous le triangle à est égale à . En déduire l'aire se trouvant sous la courbe après itérations lorsque tend vers l'infini.
On sait que l'aire contenue sous la courbe est la somme des apparaissant à chaque itération. On utilise la formule de la somme des termes consécutifs d'une suite géométrique :
Lorsque tend vers l'infini, la suite tend vers .
Que peut-on dire sur la convergence des suites et ? Quelle est la particularité géométrique de cette fractale ?
La suite est divergente, elle n'admet pas de limite finie, tandis que la suite est convergente.
Le flocon de Koch est un objet géométrique de longueur infinie dans un espace fini !
Pour représenter graphiquement ce flocon de Koch à l'aide d'un programme, nous allons utiliser le module Turtle de la calculatrice qui permet de piloter une tortue à l'écran à l'aide d'instructions basiques.
Par défaut, la tortue démarre au centre de l'écran, tournée vers la droite. L'instruction forward(x)
permet de faire avance la tortue de pixels. Les instructions left(a)
et right(a)
permettent de faire pivoter la tortue à gauche ou à droite de degrés.
Ecrire un programme permettant de tracer un côté du flocon de Koch après une itération. On utilisera une fonction cote(l)
, étant défini comme la longueur du segment initial.
On n'oubliera pas de faire précéder l'algorithme de la ligne from turtle import *
qui permet d'importer toutes les fonctions du module Turtle.
from turtle import * def cote(l): forward(l/3) left(60) forward(l/3) right(120) forward(l/3) left(60) forward(l/3)
On aimerait écrire une fonction qui permet de tracer le segment après itérations.
Les mouvements utilisés sur cette première itération sont exactement identiques à chaque itération sur chaque segment. Nous allons donc utiliser la récursivité, un concept de programmation qui permet à une fonction de s'appeler elle-même.
Ici, le bloc d'instruction que l'on souhaite répéter, et qui doit donc s'appeler lui-même correspond à la fonction que nous avons écrite précédemment.
Compléter l'algorithme suivant :
from turtle import * def cote(l,n): if n == 0: forward(l) else: cote(...,n-1) left(...) cote(...,n-1) right(...) cote(...,n-1) left(...) cote(...,n-1)
A quoi servent les instructions en ligne 3 et 4 ?
Ecrire une fonction flocon(l,n)
, faisant appel à la fonction définie précédemment et permettant de tracer le flocon dans sa totalité.
Un script est disponible sur cette page.
Les instructions en ligne 3 et 4 permettent d'arrêter la récursion. La fonction cesse de s'appeler elle-même.
On peut ensuite inciter à réaliser d'autres types de fractales en utilisant la récursivité, comme par exemple l'arbre de Pythagore.