Objectif

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 :

  • Couper un segment en trois parties
  • Construire un triangle équilatéral sur la partie centrale du segment, dont on ne conservera pas la base
Le tracé du flocon repose sur la construction d'un triangle équilatéral sur la partie centrale du segment.

Flocon de Koch et suites numériques

  1. 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 unu_n.

    1. A l'état initial n=0n=0, on ne dispose que d'un seul segment horizontal. Quelle est la valeur de u1u_1 (qui correspond au dessin de gauche sur la figure) ?

    2. On a u0=1u_0=1 et u1=4u_1=4.

    3. Quelle est la relation de récurrence entre unu_n et un+1u_{n+1} ?

    4. un+1=un×4u_{n+1}=u_{n} \times 4

    5. En déduire la formule explicite de la suite unu_n.

    6. un=4nu_n=4^n

  2. On s'intéresse maintenant à la longueur de chacun de ces segments.

    1. Soit ll la longueur du segment d'origine. On donne l=3l=3. Quelle est la longueur d'un segment après la première itération ?

    2. Après la première itération, chaque segment mesure l3=1\displaystyle\frac{l}{3} = 1.

    3. On note vnv_n la suite qui modélise la longueur d'un segment au bout de nn itérations. Quelle est la relation de récurrence entre vn+1v_{n+1} et vnv_n ? En déduire une expression de vnv_n.

    4. On a vn+1=vn3\displaystyle v_{n+1}=\frac{v_n}{3} avec v0=3v_0=3, d'où vn=3×(13)n=31nv_n=\displaystyle 3 \times \left(\frac{1}{3}\right)^n = 3^{1-n}

  3. On souhaite maintenant s'intéresser à la longueur totale du côté du flocon après nn itérations.

    1. On appelle wnw_n la suite associée à cette longueur. Exprimer wnw_n en fonction de unu_n et vnv_n.

    2. wn=un×vnw_n=u_n \times v_n

    3. On rappelle que u0=1u_0=1 et v0=3v_0=3. 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 wnw_n ?

    4. On définit w(n) comme étant le produit de u et v.
      La suite semble tendre vers l'infini.
    5. Démontrer cette conjecture.

    6. wn=un×vn=4n×3×(13)n=3×(43)n\displaystyle w_n = u_n \times v_n = 4^n \times 3 \times \left(\frac{1}{3}\right)^n = 3 \times \left(\frac{4}{3}\right)^n

      Il s'agit d'une suite géométrique de raison supérieure à 1. Elle tend donc vers l'infini.

  4. Nous allons enfin nous intéresser à l'évolution de la surface située sous la courbe au fil des itérations.

    1. On considère un triangle équilatéral de côté cc. Calculer son aire en fonction de cc.

    2. Le triangle équilatéral de côté cc admet une hauteur de longueur c23\displaystyle \frac{c\,\sqrt{2}}{3}.

      Sa surface est donc égale à c234\displaystyle \frac{c^2\,\sqrt{3}}{4}.

    3. D'après l'étude précédente de la suite unu_n, établir que l'aire de chacun des triangles formés à chaque itération évolue selon une suite géométrique de raison 19\displaystyle\frac{1}{9}.

    4. A chaque itération, la longueur d'un segment est multipliée par 13\displaystyle \frac{1}{3}. L'aire d'un triangle est donc multipliée par 19\displaystyle \frac{1}{9}.

    5. On appelle ana_n l'aire formée par l'ensemble des triangles apparaissant à chaque itération sous la courbe, pour n1n \geq 1. D'après les questions précédentes, exprimer an+1a_{n+1} en fonction de ana_n et montrer qu'il s'agit d'une suite géométrique.

    6. A chaque itération, il apparaît 4 fois plus de triangles (suite vnv_n) dont l'aire est 9 fois plus petite. D'où, pour tout n1n \geq 1 :

      an+1=49an\displaystyle a_{n+1}= \frac{4}{9} a_n

      Il s'agit bien de la définition d'une suite géométrique de raison 49\displaystyle\frac{4}{9}.

    7. On rappelle que l'aire contenue sous le triangle à n=1n=1 est égale à 34\displaystyle\frac{\sqrt{3}}{4}. En déduire l'aire se trouvant sous la courbe après nn itérations lorsque nn tend vers l'infini.

    8. On sait que l'aire contenue sous la courbe est la somme des ana_n apparaissant à chaque itération. On utilise la formule de la somme des termes consécutifs d'une suite géométrique :

      A=34×1(49)n1149=34×95×(1(49)n1)\displaystyle A = \frac{\sqrt{3}}{4}\times\frac{1-\left(\frac{4}{9}\right)^{n-1}}{1-\frac{4}{9}} = \frac{\sqrt{3}}{4} \times \frac{9}{5} \times \left( 1- \left(\frac{4}{9} \right)^{n-1} \right)

      Lorsque nn tend vers l'infini, la suite tend vers 9320\displaystyle \frac{9\sqrt{3}}{20}.

  5. Que peut-on dire sur la convergence des suites wnw_n et ana_n ? Quelle est la particularité géométrique de cette fractale ?

  6. La suite wnw_n est divergente, elle n'admet pas de limite finie, tandis que la suite ana_n est convergente.

    Le flocon de Koch est un objet géométrique de longueur infinie dans un espace fini !

Programmer un flocon de Koch

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.

Flocon de Koch.

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 xx pixels. Les instructions left(a) et right(a) permettent de faire pivoter la tortue à gauche ou à droite de aa degrés.

  1. Ecrire un programme permettant de tracer un côté du flocon de Koch après une itération. On utilisera une fonction cote(l), ll étant défini comme la longueur du segment initial.

    Les segments représentés sont de longueur l/3.

    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.

  2. from turtle import *
    def cote(l):
      forward(l/3)
      left(60)
      forward(l/3)
      right(120)
      forward(l/3)
      left(60)
      forward(l/3)
            
  3. On aimerait écrire une fonction qui permet de tracer le segment après nn 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)
              
  4. A quoi servent les instructions en ligne 3 et 4 ?

  5. Ecrire une fonction flocon(l,n), faisant appel à la fonction définie précédemment et permettant de tracer le flocon dans sa totalité.

  6. Un flocon de Koch avec 5 itérations.

    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.

    Arbre de Pythagore réalisé avec Turtle