Publicité
Choux romanesco, Vache qui rit et intégrales curvilignes
15 avril 2018

Deux (deux ?) minutes pour... l'éléphant de Fermi et Von Neumann

Dans mon dernier post, je dessinais des courbes avec deux épicycloïdes. Mais avec une, c'est mieux. Du coup, j'en ai fait une vidéo.

Vignette

Script :

En 1953, le physicien Freeman Dyson présente fièrement à Enrico Fermi ses résultats en électronique quantique. Fermi fait la fine bouche, et lui rétorque alors que son modèle comporte bien trop de paramètres inutiles. Comme le disait selon lui John Von Neumann, avec 4 paramètres, je peux faire une bonne approximation d’un éléphant, et avec un cinquième, je peux lui faire bouger la trompe. Autrement dit, avec suffisamment de paramètres arbitraires, on peut dessiner n’importe quoi.

Plus récemment, l’artiste Jagarikin a twitté un gif montrant comment avec une centaine de cercles, on peut dessiner la jeune fille à la perle de Vermeer.  Ce n’est pas sans rappeler cette vidéo de Santiago Ginnobili dessinant les traits de Homer Simpson. La clé de tous ces dessins, ce sont les approximation par des séries de Fourier, et j’espère que vous aimez la trigonométrie et les nombres complexes, parce que ça tombe bien, j’ai deux minutes pour en parler.

Prenons un cercle, puis prenons un point tournoyant sur le périmètre de ce cercle, que je vais appeller point n°1.
Très bien. Maintenant, prenons un deuxième cercle dont le centre est le point tournoyant, et prenons un autrepoint, que j’appellerai sans surprise point n°2, en rotation sur le pourtour de ce deuxième cercle.
Suivons alors la trajectoire suivie par ce point n°2. Cette courbe que l’on découvre alors, avec ses feuilles régulièrement espacée, est ce que l’on appelle une épicycloïde. Historiquement, ces courbes sont apparues pour la première fois en astronomie.

En effet, si on considère que le premier cercle décrit la rotation du Soleil autour de la Terre, et que le deuxième décrit la rotation d’une planète autour du Soleil, alors les épicycloïdes correspondent aux trajectoires des planètes dans un modèle où la Terre serait au centre de l’Univers. Quand l’astronome de l’Antiquité Ptolémée étudiait les mouvement des astres depuis son modèle géocentrique, c’est donc en étudiant des épicycloïdes qu’il est parvenu à calculer par exemple la date de certaines éclipses.

En choisissant les bons rayons et les bonnes vitesses de rotation, on obtient toute une galerie d’épicycloïdes. On peut obtenir la cardioïde, courbe en forme de cœur, la néphroïde, courbe en forme de rein, ou bien la renonculoïde, courbe en forme, comme son nom l’indique, de renoncule. Oui, pour nommer une épicycloïde, on regarde vaguement la forme de la courbe, et on ajoute -oïde à la fin. J’aurais aussi pu évoquer la deltoïde, en forme de la lettre grecque Δ, ou bien l’astroïde, en forme d’astre.

Ne nous arrêtons pas en si bon chemin. Et si, autour du point n°2, on faisait orbiter un point supplémentaire, que l’on pourrait appeler point numéro 3.  Cette trajectoire, suivie par ce point n°3 est… particulièrement esthétique ! Officiellement, cette courbe porte toujours le nom d’épicycloïde, mais je préfère parler d’épi-épicycloïde, même si je suis le seul à utiliser cette terminologie.

Bien sûr, j’ai choisi les rayons et les vitesses de rotation pour que le résultat vaille le coup d’œil. Je vous rassure, il est parfaitement possible de trouver des échafaudages de cercles tournoyants qui tracent des épicycloïdes particulièrement laides.

Dès lors, il n’y a plus de raisons de se restreindre sur le nombre de cercles pour tracer mon épi-épicycloïde. Voici donc huit cercles orbitant les uns autour des autres. Qu’obtient-on si on suit la trajectoire du point n°8 ? Eh bien, c’est une épicycloïde remarquable, puisqu’il s'agit d’une éléphantoïde !

Mais comment ce pachyderme a-t-il bien pu se retrouver là ? Pour le comprendre, on va devoir mettre en équation toutes ces épicycloïdes, et c’est là que la trigonométrie va rentrer en jeu. Forcément, ça va être un peu technique, mais je vais essayer de vous prouver que la trigo, ça peut être cool, même si j’espère que pour vous ça ne sera pas trop douloureux.

Reprenons un cercle. Disons, de centre O et de rayon 10, et un point P1 sur ce cercle. En notant t l’angle formé entre le rayon OP1 et l’horizontale, la trigonométrie nous indique que le vecteur OP1, et donc le point P1, ont pour abscisse 10 cos(t), et pour ordonnée 10 sin(t). Maintenant, on ajoute un nouveau cercle centré sur P1, disons de rayon 4. Sur ce cercle, on a un point P2, qui tourne deux fois plus vite que P1. Cela signifie que l’angle formé entre le rayon P1P2 et l’horizontale est deux fois plus grand que le premier angle, et vaut donc 2t. Le vecteur P1P2 a donc pour coordonnées (4 cos(2t), 4 sin(2t)), si bien que le point P2 a pour abscisse 10 cos(t) + 4 cos(2t) et pour ordonnée 10 sin(t) + 4 sin(2t). Bref, on a finalement l’équation paramétrique de l’épicycloïde.

En généralisant la construction, on peut voir que l’équation paramétrique de ces cycloïdes pourront s’écrire sous la forme de somme de fonctions cosinus de différentes fréquences pour les abscisses, et d’une somme de sinus de différentes fréquences pour les ordonnées. Dans cette équation, les nombres réels a correspondent aux rayons des cercles, et les nombres entiers n sont les vitesses de rotations des cercles. Si on connait cette équation, on peut donc retrouver tous les éléments pour construire avec des cercles roulants l’épicycloïde qui nous intéresse.

Mais le problème qui se pose à nous est plutôt le problème opposé. Comment calculer la taille des cercles qui permettent de tracer une épicycloïde que l’on aurait sous le nez ?

Prenons par exemple cette courbe, une superbe handspinneroïde. Comment vais-je pouvoir procéder pour la dessiner façon spirographe ? Une première idée, c’est de chercher une équation paramétrique, c’est à dire l’expression de l’abscisse x et de l’ordonnée y en fonction du temps t que met un point à parcourir la courbe. On prend donc un point, ici en violet, qui suit l’épicycloïde, ce qui nous donne, en bleu, l’abscisse en fonction du temps t, et en rouge, l’ordonnée en fonction du temps t. On va s’intéresser seulement à x(t) pour l’instant.

Puisque mon épicycloïde est une courbe fermée, la fonction x est périodique, d’une période τ=2π. Ça tombe bien, on connaît justement toute une tripotée de fonction pas trop compliquées de période τ=2π. Il y a les fonctions cosinus et la fonction sinus, et toutes leur variante de période τ/2, τ/3, τ/4, etc.

Faisons alors l’hypothèse que x(t)  peut s’écrire sous la forme d’une combinaison linéaire de toutes les fonctions de période τ que l’on vient de lister, parce que, après tout, pourquoi pas. Cela veut dire que, a priori, on pourrait écrire x(t) =  a₀ + a₁ cos(t) + a₂ cos(2t) + a₃ cos(3t) … + b₁ sin(t) + b₂ sin(2t) + b₃ sin(3t) + ….
Je vous passe la théorie qui nous dit que la fonction x est un point dans un espace vectoriel muni d’un produit scalaire où f scalaire g est défini par l’intégrale entre 0 et τ de f(t) g(t) dt, et je passe à la conclusion : si x(t) peut s’écrire sous cette forme que l’on veut, alors les coefficients aₖ et bₖ peuvent être calculés, et ce à l’aide d’intégrales. Ces nombres sont ce que l’on appelle les coefficients de Fourier réels de la fonction x, du nom de Joseph Fourier, qui au début du XIXe siècle a utilisé cette décomposition pour résoudre une histoire d'équation de propagation de chaleur. En fait, il ne s’est pas contenté d’utiliser cette décomposition pour les équations de la chaleur, mais il a montré qu’elles pouvaient s’appliquer à n’importe quelle fonction. À l’époque, tout ça manquait de rigueur, mais la théorie de Fourier venait de naitre, donnant un nouveau champs d’investigation pour des générations de mathématiciens après lui, et je ne parle pas de la floppée d’applications concrètes. Bref, faisons les calculs dans le cas de la courbe qui nous intéresse : pour x(t), on trouve 6 cos t + 1.5 cos 2t + 2 cos 4t + 2.6 sin 2t, et pour y(t), on trouve une équation du même style

Petite déconvenue, puisque ces équations ne correspondent pas vraiment aux équations générale des épicycloïdes que l’on a trouvé tout à l’heure. Déjà, parce que x(t) ne devrait être une somme que de cosinus, et y(t) que de sinus, ce qui n’est pas ici le cas. En jouant un peu avec les mal-aimées formules de trigo, on peut malgré tout se ramener à une forme un peu plus intéressante, avec seulement des cosinus, ou seulement des sinus. On introduit alors une phase à nos fonctions cosinus et sinus. Oui, en fait, j’ai menti tout à l’heure quand j’ai parlé de l’équation paramétrique d’une épicycloïde quelconque, puisqu’il faut aussi prendre en compte la phase de chaque cercle. Je m’explique. J’ai en effet présupposé que lorsque l’angle t est égal à 0, les rayons des cercles étaient tous horizontaux, ce qui n’a aucune raison d’être le cas. On peut supposer, par exemple, que dans la position initiale, le rayon du premier cercle n’est pas horizontal, mais forme un angle de 30° avec l’horizontal. Ce 30°, c’est la phase du premier cercle, et en prenant cela en compte, on obtient une paramétrisation des épicycloïdes un peu plus correcte. Dans ces formules, les coefficients a sont les rayons des cercles, les coefficients θ leur phase, et les coefficients n leur vitesse de rotation.

Il reste malgré tout un autre problème, c’est que les coefficients de x(t) que l’on vient de calculer devraient être égaux à ceux de y(t), ce qui n’est pas vraiment le cas ici. En fait, l’expression de x(t) nous donne les caractéristiques de la construction d’une épicycloïde, et celle de y(t) donne les caractéristiques d’une autre, et celles-ci semblent n’avoir aucun rapport avec la courbe que je cherche à construire. En fait, si. Si je prend l’abscisse du point traceur de la première, et l’ordonnée de la deuxième, on retrouve mon handspinneroïde. C’est pas la construction que l’on espérait, mais on va s’en contenter dans un premier temps.

J’ai donc a priori tout ce qu’il faut pour fabriquer un système de cercles qui me permettrait de dessiner n’importe quelle courbe, comme une toile de maitre à la façon de Jagarikin. Passons donc à un cas pratique. M’est-il possible de trouver deux épicycloïdes qui permettent de tracer une courbe qui ressemblerait à cet éléphant, par exemple ? Bien sûr, il suffit de calculer les intégrales de tout à l’heure. Mais si je veux faire ça, j’ai besoin d’avoir les coordonnées des points de la silhouette, afin d’obtenir les fonctions x et y. Pour les déterminer, un petit logiciel de dessin vectoriel fera l’affaire, et pour le calcul des coefficients, une approximation des intégrales par la méthode des rectangles sera suffisante. Ça demande beaucoup de calculs, et il existe des algorithmes qui permettent de les faire assez rapidement, mais je vais me contenter ici des formules les plus simples à appliquer. Bref, la théorie de Fourier me donne l’équation paramétrique de la courbe, et quelques manipulations supplémentaires permettent de confirmer qu’avec les bons échafaudages de cercles tournicotant, on peut dessiner ce que l’on veut, la preuve avec ce bon pachyderme. À ce propos, le moteur de calcul Wolfram alpha possède dans sa base de données un grand nombre d’équation de courbes, notamment un nombre impressionnant pokémonoïdes, dont les équation paramétriques pleines de fonctions trigonométriques permettent d’affirmer que la théorie de Fourier n’est pas bien loin.

Ce qui est également sympa, c’est que l’on peut calculer plus ou moins de coefficients, suivant la précision que l’on souhaite obtenir. L’éléphant ici présent est construit à partir de deux épicycloïdes à 25 cercles, mais on peut en réduire le nombre, pour calculer l’essence de ce qu’est un éléphant. Et ça, c’est quand même cool !

Mais il reste un petit gout de pas terminé. Avoir deux ensembles de cercles qui tracent un dessins, c’est bien, mais moi, je n’en voulais qu’un seul ! On a du se fourvoyer quelque part. Revenons au moment où nous cherchions l’équation d’une épicycloïde. Il y a une autre façon de décrire par une équation la position de leurs points. Plutôt que d’utiliser les coordonnées cartésiennes, on va considérer que l’on est dans le plan complexe. On reprend un cercle de rayon 10, et un point P1 qui gravite sur ce cercle. En notant t l’angle formé entre OP1 et l’axe horizontal, on peut dire que P1 a pour affixe complexe 10exp(it). On peut aussi prendre en compte la phase du cercle, en multipliant par exp(iθ), où θ est la phase du cercle. Si, à présent, on ajoute un point P2 qui tourne sur un cercle de rayon 4 autour de P1 et deux fois plus vite, on peut voir que le point aura pour affixe 10 exp(it) + 4 exp(2it).

En poursuivant la construction, on peut obtenir une paramétrisation des points des épicycloïdes, sous la forme d’une somme d’exponentielles complexes. Cette somme, c’est ce que l’on appelle la décomposition en série de Fourier complexe de l’équation de la courbe. Les coefficients entiers relatifs n indiquent les vitesses de rotation des cercles, et les coefficients complexes a nous fournissent le rayon des cercles (le module de a), ainsi que leur phase (l'argument de a).

Je vous passe une nouvelle fois les détails, mais il est possible, étant donné un dessin quelconque, de calculer ces coefficients à l’aide d’un bon calcul d’intégrale. Passons plutôt à la pratique. Je prends un éléphant, j’échantillonne son profil, je calcule les coefficients de Fourier, j’en déduis les caractéristiques des cercles, je trace l’épicycloïde qui en résulte, et paf, j’obtiens un éléphant !

Alors, bon, c’est une version approximative du dessin original, mais il y a de bonnes raisons à cela. Déjà, j’ai échantillonné la silhouette de l’éléphant avec à peine 250 points, ce qui est beaucoup, mais malgré tout pas énorme vu sa complexité. Mais ce qui rend mon dessin approximatif, c’est plutôt le nombre de cercles utilisés. Vu que mon éléphant n’est pas vraiment une épicycloïde, il faudrait calculer un nombre infini de coefficients pour avoir la précision maximale. En pratique, c’est bien sûr impossible, donc j’ai du me limiter. Avec 50 cercles, la précision est plutôt bonne, et avec 80 je considère que la courbe est parfaite pour le dessin que je souhaitais obtenir. Pour une meilleure précision, il suffit donc d’augmenter mon nombre de cercles, c’est à dire, calculer davantage de coefficients de Fourier. Dans la vidéo où l’épicycloïde trace les traits de Homer Simpson, l’auteur a utilisé pas moins de 1000 cercles. Forcément, la précision est incroyable !

Bref, grâce aux coefficients de Fourier, il m’a été possible de très bien résumer mon éléphant en utilisant seulement 80 paramètres complexes, là où un dessin point par point avec des segments aurait demandé au moins 410 points. On peut d’ailleurs réduire le nombre de cercle en supprimant les plus petits d’entres eux, et sans trop perdre en précision dans le tracé. C’est une excellente manière de compresser des données. C’est d’ailleurs pour cette raison que la théorie de Fourier entre autres est utilisé dans la compression de fichiers, notamment des photos avec le format jpeg, ou de la musique avec le format mp3. Mais ce n’est pas là dessus que je veux insister, il y a en effet trop de choses à raconter sur les transformations de Fourier pour être exhaustif dans une vidéo qui ne cherche qu’à dessiner de mignons éléphants.

La véritable question, c’est plutôt, comment dessiner notre nouvel animal préféré comme Fermi et Von Numann prétendent être capable de le faire, avec pas plus de 4 paramètres ? En 1975, le chimiste James Wei a pris le pari de réaliser cette prouesse, mais a lamentablement échoué, puisque son dessin d’éléphant demandait tout de même 30 paramètres. Il a fallu attendre 2009, et pas moins d’une équipe de trois biologistes pour obtenir le plus léger des éléphants. Grâce à la technique de décomposition de Fourier en somme de sinus et de cosinus, Mayer, Khairy et Howard ont pu dessiner cette courbe. Un peu cartoon, oui, mais il s’agit bien d’un éléphant, surtout si on rajoute un point aux coordonnées (20,20). Leur équation fait apparaitre 8 paramètres réels, ce qu’une pirouette mathématique ramène à seulement 4 paramètres complexes. Von Neumann avait raison : avec seulement 4 paramètres on peut approximer la silhouette d’un éléphant ! Un cinquième paramètre est utilisé pour faire bouger la trompe, ou, plus précisément, pour indiquer l’abscisse du point d’attache au corps ; le détail des mouvements de cette trompe n’est cependant pas explicité dans le papier. Notons également que c’est ce cinquième paramètre qui code la position de l’œil. Bref, pari réussi.

Bien sûr, cette histoire d’éléphant de Fermi et Von Neumann est anecdotique, et le papier de Wei, comme celui de Mayer, Khairy et Howard, ont été rédigés au second degré. Il n’empêche que cette blague de théoricien a traversé les âges pour une bonne raison. Si on peut retrouver l’allure d’un éléphant avec seulement 4 paramètres, cela veut dire qu’il faut toujours faire très attention à la façon dont on détermine l’ajustement d’une série statistique. Une régression affine demande deux paramètres, une régression parabolique en demande trois, et il semble qu’une régression pachydermique en demande 4. C’est ce que l’on appelle le problème de l’overfitting, maltraduit en français par surapprentissage, et je vous renvois aux vidéos de Lê de la chaine Science 4 all pour détailler toutes ces notions. En attendant, je vous laisse dessiner n’importe quoi avec des épicycloïdes !


Fichiers Geogebra

Éléphant_réel, Elephant_complexe

Sources :

A meeting with Enrico Fermi, Freeman Dyson
Drawing an elephant with four complex parameters, Jürgen Mayer, Khaled Khairy, Jonathon Howard (papier, code source)
History of the Science of Modeling an Elephant

Knot braider, the Wallace line - pour dessiner ses propres épicycloïdes

Fourier curve, the Wallace line
Fourier analysis, David Morin

Illustrations :
Paignton Zoo, Elephant towel animal, Elmer coloring, Felis silvestris silvestris, Elephas maximus,

Publicité
Publicité
Commentaires
T
Merci LJJ pour cette démo de comment tracer son animal préféré avec des épicycloïdes, mais du coup si on met des paramètres quelconques ça marche ou bien il faut toujours échantilloner son dessin pour calculer les coeff. de Fourier? Dans ce cas le dessin paramétrique sera toujours moins précis que l'original??!
Répondre
T
Ah oui d'accord
Répondre
G
Super video<br /> <br /> <br /> <br /> Tu m'a d’ailler donner envie de code moi même un petit script et sa fonctionne super bien :)<br /> <br /> <br /> <br /> https://codepen.io/Gannon/full/NYQmaK/
Répondre
Publicité
Publicité