Les projets de programmes de mathématiques de Terminale des séries générales laissent une large part à l’observation, l’approche intuitive, l’expérimentation le plus souvent assistée par ordinateur, la connaissance de notions admises. D’autre part, la formation continue des professeurs est de plus en plus réduite, voire tout simplement supprimée dans certaines académies.
Dans ce cours article, nous essaierons de mettre en avant les dangers d’une telle approche de l’enseignement des mathématiques à travers une expérimentation qui trouverait sa place en classe mais mène à des résultats catastrophiques si elle est menée par des professeurs non formés aux subtilités informatiques et si elle s’adresse à des élèves au bagage mathématique pas assez rigoureux.
Les projets de programmes de mathématiques de Terminale des séries générales laissent une large part à l’observation, l’approche intuitive, l’expérimentation le plus souvent assistée par ordinateur, la connaissance de notions admises. D’autre part, la formation continue des professeurs est de plus en plus réduite, voire tout simplement supprimée dans certaines académies.
Dans ce court article, nous essaierons de mettre en avant les dangers d’une telle approche de l’enseignement des mathématiques à travers une expérimentation qui trouverait sa place en classe, mais conduit à des résultats catastrophiques si elle est menée par des professeurs non formés aux subtilités informatiques et si elle s’adresse à des élèves au bagage mathématique pas assez rigoureux.
Le fichier pdf de l’article est téléchargeable à la fin de l’article en ligne.
Cet article a été repris dans le n° 495 du Bulletin de l’APMEP.
Avertissement
La scène qui va vous être présentée peut heurter certaines âmes sensibles et nous la déconseillons aux professeurs de plus de quarante ans qui ont passé leur Bac C, qui ont eu droit à une formation initiale en informatique sans logiciel « tout-à-cliquer » [1] et ont même profité d’une formation continue [2] abondante dispensée par des IREM en plein essor. Certains vont sûrement réagir comme devant ces films-catastrophe hollywoodiens qui durent deux heures alors que dans la réalité tout aurait dû s’arrêter au bout de cinq minutes faute de combattants. Et bien non ! Nous irons jusqu’au bout du drame, les monstres irrationnels qui envahiront notre pseudo salle de classe n’arrêteront pas notre héros qui ira de catastrophe en catastrophe, fonçant tête baissée vers le drame inéluctable.
Film gore de série Z ? Scénario de science-fiction complètement irréaliste ? Drame d’anticipation présentant une réalité presque palpable ? À vous de juger...
La longueur et la technicité de l’article peuvent en rendre difficile la lecture pour des collègues peu familiers des questions abordées, entre mathématiques et informatique. Après un parcours global (pour avoir une idée des questions abordées), le lecteur pourra le reprendre en détail par petits bouts, en analysant chacune des séquences et en testant les programmes proposés (avec Python ou un autre langage). C’est à ce prix que l’article donne sa pleine mesure. De même, les travaux suggérés peuvent être proposés à une classe sur une longue période (un jeu de piste au long cours) : proposer aux élèves des énigmes sur lesquelles ils butent, pour les lever une à une peut devenir le projet d’une année.
L’approche « expérimentale »
Dans l’esprit du programme, il peut paraître intéressant d’essayer d’obtenir des approximations de $\pi$ à l’aide d’approximations par des méthodes d’approximations numériques assistés par ordinateur. Il ne s’agira pas d’utiliser un logiciel de calcul formel mais de faire construire par les élèves des algorithmes de calcul et de les expérimenter à l’aide d’un langage de programmation. Nous utiliserons dans cet article Python 3.
Nous avancerons à vue, dans la peau d’un professeur ayant quelques minutes [3] d’avance sur l’expérience qu’il propose.
Ces expériences laissent une large part à l’intuition. De ce point de vue, il paraît évident que la méthode des trapèzes sera plus efficace que la méthode des rectangles et que plus le pas de la subdivision sera petit, meilleure sera l’approximation. Et pourtant...
Calcul de $\mathbf{\pi}$ et calcul intégral
Comment faire le lien en Tale S entre $\pi$ et le calcul intégral ? La trigonométrie ayant pratiquement disparu de l’enseignement secondaire, on ne peut que se tourner vers l’aire du disque vu dès l’école primaire.
Un premier travail consiste donc à essayer d’orienter les élèves vers le résultat :
$\pi=4\displaystyle\int_{0}^{1} \sqrt{1-t^2} ~;{\rm d} t$
On introduit ensuite cette fonction, que l’on nommera par la suite $f$,
sur Python. On n’utilisera qu’une version aussi épurée que possible du logiciel. On aura cependant besoin de sqrt
qui calcule la racine carrée d’un nombre et de pi
qui donne une valeur approchée de $\pi$ afin de pouvoir la confronter à nos résultats expérimentaux. On importe donc ces deux commandes dans notre session Python :
Ensuite, on définit la fonction $f$ :
Le problème peut alors être posé en ces termes : « comment calculer une approximation de l’intégrale de $f$ sur $[0,1]$ ? »
Méthode des rectangles
C’est la plus simple à introduire. Il fut un temps où on l’étudiait en première dans le cadre de la découverte des suites.
On donne ici des versions générales pouvant servir dans d’autres expériences. Nos fonctions Python prennent comme argument une fonction f
, les bornes a
et b
de l’intervalle d’intégration et le nombre N
de subdivisions. On peut utiliser une boucle for
ou while
. C’est la deuxième option qui a été choisie ici car elle est plus « parlante » . On aurait pu utiliser une subtilité de Python que l’on retrouve dans de nombreux langages :
t+=dt
signifie en fait t
reçoit t+dt
. On utilisera cette notation par la suite. Ici, le gain n’est qu’en écriture mais quand on travaille sur des listes par exemple, cela fait gagner beaucoup de mémoire...mais ceci est une autre histoire.
On peut alors effectuer nos premiers calculs :
Sans travail sur la majoration de l’erreur, on ne peut pas dire grand chose. Alors on compare avec la valeur approchée pi
de $\pi$ que propose Python dans le module math
:
Si on veut faire travailler les élèves sur les boucles, on peut les amener à écrire ceci :
On observe qu’il semble falloir dix millions d’itérations pour obtenir six bonnes décimales de $\pi$.
Pas très efficace...C’est le moment de se souvenir (??) d’un résultat du collège : comment calculer l’aire d’un trapèze ?
Méthode des trapèzes
Après divers petits dessins et le rappel de $\frac{\left({\rm petite base}+{\rm grande base}\right)\times {\rm hauteur}}{2}$, on arrive à :
Normalement, à vue d’œil, ça devrait être plus précis :
Bon. Un élève observateur [4] s’étonne tout de même du dernier résultat, les trapèzes ayant l’air de rester malgré tout sous la courbe représentative de $f$...
« Bonne remarque » répond le professeur, une première goutte de sueur perlant sur son front. « Il s’agit sûrement d’erreurs d’arrondi » .
Pas de répit ! Un autre élève lève la main :
« Monsieur, j’ai trouvé d’autres résultats avec la boucle for
» .
Argh ! Y en a toujours un pour ne pas écouter les consignes et faire ses calculs dans son coin. Sur l’écran de l’élève il y a en effet :
Une nouvelle goutte de sueur perle sur le front du professeur. Il lui revient en tête des pages d’un livre sur l’algorithmique qu’il a lu dans un souci d’autoformation sur le sujet : test d’arrêt, invariant de boucle, tout se mélange dans sa tête [5].
« Vous avez vu monsieur, il n’y a plus de résultat négatif » .
Pour détourner le propos, le professeur propose aux élèves de prendre un plus petit arc de cercle, disons entre $ \frac{\pi}{3}$ et $\frac{\pi}{2}$ en utilisant encore $f$. En effet, la fonction n’étant pas dérivable en 1, le professeur a un peu peur que cela crée des perturbations. Et intuitivement, il se dit qu’en limitant l’intervalle d’intégration, on devrait limiter l’ampleur de l’approximation.
Le problème, c’est qu’il faut faire un peu de trigonométrie : trouver le cosinus et le sinus de $ \frac{\pi}{3} $. Allez, soyons fous...
Après un petit dessin au tableau, le professeur amène donc ses élèves à montrer que :
$\pi=12 \left( \displaystyle\int_{0}^{\frac{1}{2}} f(t) ~;{\rm d} t - \frac{\sqrt{3}}{8}\right)$
Mais là, ça devient très bizarre :
Il n’y a plus de corrélation entre la finesse de la subdivision et la précision du calcul !
La précision à l’air d’aller et venir comme la marée...Ya quelque chose qui cloche là-dedans, mais quoi ? Un ordinateur, ça ne se trompe pas dans les calculs !
Ah et revoilà l’élève avec sa boucle for
:
« Moi ça marche monsieur » :
Il faut lui clouer le bec ! Allons vers un problème mathématique plus compliqué.
On a utilisé des segments de droite horizontaux, des segments de droite obliques...Et si l’on utilisait des segments de parabole : intuitivement, ça colle plus à la courbe, ça devrait être plus précis.
Méthode de SIMPSON
Ce n’est pas au programme, même pas au programme de Maths Sup, mais on nous demande d’observer alors on peut sortir une formule de son chapeau et expliquer à peu près d’où elle vient ou on peut en faire un petit sujet de recherche à la maison...
On interpole la courbe par un arc de parabole. On veut que cet arc passe par les points extrêmes de la courbe et le point d’abscisse le milieu de l’intervalle. Pour cela, on va déterminer les $c_i$ tels que
$\int_a^bf(x) \mathrm{d}x=c_0f(a)+c_1f \left(\frac{a+b}{2}\right)+c_2f(b)$
soit exacte pour $f(x)$ successivement égale à $1$, $x$ et $x^2$.
Posons $h=b-a$ et ramenons-nous au cas $a=0$.
On obtient le système suivant :
$ \begin{array}{l} c_0+c_1+c_2=h\\ c_1+2c_2=h\\ c_1+4c_2=\frac{4}{3}h \end{array} $
Ouh la la, c’est un système $3\times 3$. On peut faire appel à un logiciel de calcul formel comme préconisé dans le programme quand il y a de gros calculs...Ou résoudre ce système à la main !
On trouve alors $c_0=c_2=\frac{h}{6}$ et $c_1=\frac{4}{6}h$ puis,
toujours pour $f(x)$ valant $1$, $x$ ou $x^2$ :
$\int_a^bf(x) \mathrm{d}x=\frac{b-a}{6}\left(f(a)+4f \left(\frac{a+b}{2}\right)+f(b)\right)$
On peut se contenter de donner directement cette formule.
Finalement, le tout est de l’utiliser avec Python :
Ce qui est étonnant, c’est qu’on trouve à peu près la même précision qu’avec la méthode des trapèzes :
Pourquoi pas. Et si nous prenions notre petit arc de cercle :
Alors là, on ne comprend carrément plus rien ! Ça échappe totalement à notre intuition !
L’élève à la boucle for
ne lève plus la main ! Le professeur va quand même observer son écran :
Chez lui aussi, c’est n’importe quoi...
On s’aperçoit qu’on est un peu comme un spécialiste de la tectonique des plaques prenant des photos d’une plage tous les mois à la même heure. Il peut tout à fait se produire que le montage des photos mette en évidence que le niveau de la mer descend et il pourra dire à la radio que le réchauffement de la planète et la fonte des glaces, c’est n’importe quoi.
Ou bien un autre scientifique (ou le même...) peut jeter un caillou dans l’eau la nuit et prendre des photos au flash toutes les T secondes avec T la période de l’onde créée par le caillou et en conclure que jeter un caillou dans l’eau ne produit aucun effet sur la surface de l’eau si le hasard fait bien les choses.
Ici aussi, on observe sans garde-fou théorique une situation et on peut faire et en conclure absolument n’importe quoi pour peu que le hasard du choix de nos mesures ne nous confronte pas aux problèmes, jusqu’à ce qu’enfin, une catastrophe survienne....
Que faire ?...
Finalement, on ne va pas donner cette activité expérimentale aux élèves car elle semble troubler plus qu’éclairer les esprits.
Ou bien, soyons fous, nous allons faire un peu de mathématiques et d’informatique et ne pas se contenter d’observer des résultats au petit bonheur pour chercher à comprendre ce qui se passe.
Avant d’attaquer les mathématiques, il faut avoir à l’esprit que le processeur compte en base 2 et nous en base 10 et que son « zéro » vaut environ $2,2\times 10^{-16}$. En fait, ce n’est pas zéro mais une valeur nommée communément (pas seulement sur Python) epsilon
.
Comme c’est l’ordinateur qui va compter, il faudrait plutôt chercher à le ménager et en tenir compte.
Il nous faut donc quand même regarder sous le capot pour comprendre la panne.
Le problème, c’est que nous ne travaillons pas en précision infinie. En chargeant le module sys
, on a accès à la commande float_info.epsilon
qui donne la différence entre 1.0
et le flottant suivant le plus proche :
Eh oui, la mémoire de l’ordinateur n’est pas infinie. Ses « réels » admettent des successeurs.
Mais attention, entre 0 et 1, les choses sont différentes :
Cet epsilon
n’est pas zéro, rappelons-le, mais détermine à partir de quand deux flottants seront considérés comme égaux par le système.
On peut définir une fonction qui illustrera ce phénomène :
Si on n’y prête pas attention, on peut arriver à des résultats surprenants :
Rappelons également que le processeur est plus à l’aise avec les puissances de 2 car une multiplication par 2 ou une de ses puissances revient à un décalage dans son écriture binaire.
Pour le faire comprendre aux élèves, on peut faire écrire $0,25$ en base 2 : il suffit de poser la division comme à l’école primaire, mais avec les dividende et diviseur écrits en base 2.
Ici, $0,25=\frac{1}{4}$ en base 10 donc $\frac{1}{100}=0,01$ en base 2.
Pour $0,1=\frac{1}{10}$ en base 10, on obtient $\frac{1}{1010}$ en base 2 ; posons la division :
On retrouve alors un reste précédent donc $\frac{1}{10}$ en base 10 admet en base 2 un développement périodique :
0,0 0011 0011 0011...
.
On peut alors savoir comment ces nombres sont codés sur un ordinateur disposant de 24 bits pour la mantisse, faire de même pour $0,3$ et $3\times 0,1$ et découvrir pourquoi 0.3-3*0.1
est non nul.
Reprenons l’affinement successif de notre subdivision mais avec des nombres de subdivisions égaux à des puissances de 2 :
Tout a l’air de bien fonctionner jusqu’à $2^{10}$ mais ensuite, on arrive aux alentours de epsilon
et ça commence à se détraquer informatiquement comme nous l’évoquerons dans l’appendice.
En affinant grossièrement à coups de puissances de 10, nous étions passés à côté du problème.
Comme quoi, agir intuitivement en mathématiques ou en informatique (ici : « plus on subdivise petit, meilleure sera la précision » ) peut entraîner de graves erreurs...
La fonction est aussi à prendre en considération, puisqu’elle demande de soustraire à 1 un tout petit nombre :
De plus, cela explique aussi les différences entre la « méthode while
» et la « méthode for
» .
Le test while t+dt<=b
peut s’arrêter pour de mauvaises raisons. Par exemple :
La boucle peut ainsi s’arrêter inopinément, alors qu’on est loin de la précision demandée.
Précédemment, avec la méthode « gros sabots » , nous n’avions pas vu de différence entre la méthode des trapèzes et la méthode de SIMPSON ce qui contredisait notre intuition. Observons à pas plus feutrés ce qui se passe et incluons les rectangles :
On distingue mieux cette fois la hiérarchie des méthodes selon leur efficacité.
« Monsieur, monsieur, regardez, on peut améliorer l’aspect ! Avec ça :»
« J’ai un beau tableau »
Pfff... Il y a toujours un élève pour s’occuper plus de la forme que du fond
Nous n’avons pas le choix : il est temps à présent d’invoquer les mathématiques pour préciser un peu ces observations, même si ça peut paraître violent de se lancer dans un raisonnement mathématique avec des calculs, des théorèmes, sans machine.
En fait, ces trois méthodes sont des cas particuliers d’une même méthode : on utilise une interpolation polynomiale de la fonction $f$ de degré 0 pour les rectangles, de degré 1 pour les trapèzes et de degré 2 pour SIMPSON.
On peut également voir la méthode de SIMPSON comme le premier pas de l’accélération de convergence de ROMBERG de la méthode des trapèzes...mais bon, on laissera ça pour plus tard.
Nous allons nous contenter dans un premier temps d’étudier l’erreur commise par la méthode des trapèzes. Nous avons juste besoin du théorème de ROLLE qui peut être étudié en Terminale à titre d’exercice.
On considère une fonction $f$ de classe $C^2$ sur un intervalle $[a,b]$. On considère une subdivision régulière de $[a,b]$ et on pose :
$x_j=a+ j\frac{b-a}{N} $
avec $N$ le nombre de subdivisions. On cherche une fonction polynomiale P de degré au plus 1 telle que $P(a)=f(a)$ et $P(b)=f(b)$.
L’intégrale de $P$ sur $[a,b]$ vaut $J=(b-a) \frac{f(a)+f(b)}{2} $.
Soit $x\in]a,b[$. On introduit la fonction $g_x$ définie sur $[a,b]$ par :
$g_x(t)=f(t)-P(t)+k_x(t-a)(b-t)$
avec $k_x$ choisi tel que $g_x(x)=0$.
La fonction $g_x$ est de classe $\mathcal C^2$ et s’annule en $a$, $x$ et $b$ donc on peut appliquer le théorème de ROLLE sur $]a,x[$ et $]x,b[$ et $g’_x$ s’annule donc sur chacun de ces intervalles. On applique alors une nouvelle fois le théorème de ROLLE à $g’_x$ sur $]a,b[$ et $g’’_x$ s’annule donc au moins une fois en un réel $c_x$ de $]a,b[$.
On obtient alors que $k_x= \frac{f’’(c_x)}{2}$. On obtient finalement
que pour tout $x\in]a,b[$, il existe $c_x\in]a,b[$ tel que :
$f(x)-P(x)=-(x-a)(b-x) \frac{f’’(c_x)}{2} $
On peut évidemment inclure les bornes de l’intervalle.
Soit $M_2$ un majorant de $\left|f’’\right|$ sur $[a,b]$. On obtient donc, par intégration de l’égalité précédente :
$\left|\displaystyle\int_{a}^{b}f(x)~;\mathrm{d}x-J\right|\leq \frac{M_2}{12} (b-a)^3$
puis, par application de cette inégalité sur chaque intervalle
$[x_j,x_{j+1}]$ :
$\left|\displaystyle\int_{a}^{b}f(x)~;\mathrm{d}x-J_N\right|\leq \frac{M_2}{12} \frac{(b-a)^3}{N^2}$
avec
$J_N=\frac{b-a}{N}\left(\frac{f(a)}{2}+\displaystyle\sum_{j=1}^{N-1}f(x_j)+\frac{f(b)}{2}\right)$.
On obtient donc que quand $N$ est multiplié par 2, le majorant de l’erreur est divisé par 4.
Cela correspond en effet à ce que nous observons avec Python :
Dans la colonne de gauche se trouvent les résultats déjà calculés. Dans la colonne de droite, le résultat de la ligne $i$ est celui de la ligne $i-1$ de la colonne de gauche divisé par 4 : l’erreur sur le majorant et sur le calcul lui-même est bien corrélée.
On peut montrer de même qu’avec la méthode de SIMPSON, si $f$
est de classe $\mathcal C^4$ sur $[a,b]$, alors le majorant de l’erreur est $ \frac{M_4}{2880} \frac{(b-a)^5}{N^4} $
avec $M_4$ un majorant de $f^{(4)}$ sur $[a,b]$.
Cette fois, on obtient que quand $N$ est multiplié par 2, le majorant de l’erreur est divisé par 16. On observe bien le même phénomène qu’avec la méthode des trapèzes :
Alors, sommes-nous condamnés à ne pas dépasser une précision de 16 décimales ? Pourtant on parle du calcul d’un milliard de décimales de $\pi$. Pourtant, les logiciels de calcul formel dépassent eux aussi
cette limitation.
Pour cela, il faut repenser totalement la façon de calculer et réfléchir à des algorithmes permettant de passer outre la limitation de représentation des nombres. Mais ceci est une autre histoire...
Moralité, comme aurait pu le dire un contemporain français de NEWTON, démonstration mathématique et domination de la machine valent mieux qu’observation et utilisation au petit bonheur ou encore les mathématiques ne sont pas uniquement une science expérimentale assistée par ordinateur [6]
On veut faire une petite expérience toute simple de calcul et on ne se rend pas compte qu’on vient d’ouvrir la boîte de Pandore... Mais comment s’en rendre compte quand les professeurs sont submergés de nouvelles notions à enseigner et qu’ils ne disposent que de l’autoformation pour s’en sortir où à la rigueur d’une « formation » de Bassin d’une journée...
Pour plus de précisions sur l’intégration numérique, on peut se reporter à la thèse soutenue par Laurent FOUSSE (Fou06) en 2006 sur le sujet et au cours de L2 de Bernard PARISSE(Par10).
Appendice : quelques mots sur la manipulations des flottants
En 1985, une norme de représentations des nombres a été proposée afin, entre autre, de permettre de faire des programmes portables : il s’agit de la norme IEEE-754 (Standard for Binary Floating-Point Arithmetic).
En simple précision, un nombre est représenté sur 32 bits (en fait 33...) :
– le premier donne le signe ;
– un 1 implicite puis 23 bits pour la partie fractionnaire ;
– 8 bits pour l’exposant.
Les 24 bits qui ne sont ni le signe, ni l’exposant représentent la mantisse qui appartient à $[1,2[$.
Notons $s_x$ le bit de signe, $e_x$ les bits d’exposant, $m_x=1+f_x$ la mantisse avec $f_x$ la partie fractionnaire.
Il y a deux zéros, $-0$ et $+0$ car les nombres sont forcément signés. Par exemple :
– $s_{-0}=1$ ;
– $ b_{-0}=00000000$
– $f_{-0}=00000000000000000000000$
Il y a aussi deux infinis. Par exemple $s_{-\infty}=1$,
$e_{-\infty}=11111111$ et $f_{-\infty}=0...$.
Il y a enfin le Not a Number, noté NaN, qui est codé comme $+\infty$ mais avec une partie fractionnaire non nulle.
La majorité des résultats troublants observés vient des erreurs d’arrondis, les deux principales étant l’élimination et l’absorption.
La première intervient lors de la soustraction de deux nombres très proches. Par exemple :
La mantisse est ensuite renormalisée pour devenir :
Les zéros ajoutés à droite sont faux.
L’absorption intervient lorsqu’on additionne deux nombres d’ordre de grandeur très différents : les informations concernant le plus petit sont perdues.
Mais après normalisation, on a :
Voici un exemple classique : le calcul de $ \displaystyle\sum_{k=1}^{2^{15}}\frac{1}{k^2}$ dans un sens puis dans l’autre.
Alors :
En fait, le résultat correct est :
Les conséquences de telles erreurs non prises en compte peuvent être plus graves qu’une séance de TP ratée.
Le 4 juin 1996 par exemple, la fusée Ariane 5 a explosé en vol, trente secondes après son décollage. Après enquête, il s’est avéré que la vitesse horizontale de la fusée par rapport au sol était calculée sur des flottants 64 bits puis convertie en entier signé 16 bits. Cette méthode avait été appliquée sur Ariane 4 avec succès car sa vitesse était plus faible donc tenait sur un entier 16 bits, mais ce n’était plus le cas pour Ariane 5... [7]
Un problème d’élimination dans l’horloge des missiles Patriot a causé également la mort de dizaines de personnes pendant la première guerre du Golfe [8].
Pour un exposé beaucoup plus détaillé sur l’arithmétique flottante, voir (LZ04).
Épilogue : bye bye $\mathbf{\pi}$ ?
Et bien non !
Python possède un module de calcul en multiprécision avec les quatre opérations arithmétiques de base et la racine carrée :
Mais ça ne va pas nous avancer à grand chose puisque pour avoir 15 bonnes décimales avec la méthode de SIMPSON, il nous a fallu dix millions d’itérations.
Faisons un petit détour par l’histoire...
Tout commence à peu près en 1671, quand l’écossais James GREGORY découvre la formule suivante :
${\rm Arctan}(x)=\sum_{k=0}^{+\infty} \frac{(-1)^kx^{2k+1}}{2k+1}$
L’inévitable LEIBNIZ en publie une démonstration en 1682 dans son Acta Eruditorum où il est beaucoup question de ces notions désuètes que sont la géométrie et la trigonométrie.
Dans la même œuvre, il démontre ce que nous appelons aujourd’hui le critère spécial des séries aalternées :
Soit $(u_n)$ une suite réelle alternée. Si $\left(\left|u_n\right|\right)$ est décroissante et converge vers 0 alors :
– $\displaystyle\sum_{}^{}u_n$ converge ;
– $\left|R_n\right|\leq \left|u_{n+1}\right|$ où $(R_n)$ est la suite des restes associés à $\displaystyle\sum_{}^{}u_n$.
On peut même envisager d’évoquer une démonstration de ce théorème en terminale puisqu’on y parle essentiellement de suites adjacentes (Voir par exemple (Rod10) page 53).
On en déduit donc que :
$\left|{\rm Arctan}(x)-\sum_{k=0}^n \frac{(-1)^kx^{2k+1}}{2k+1}\right|<\frac{x^{2n+3}}{2n+3}$
On peut alors utiliser Python pour déterminer une fonction Elle n’est pas très efficace. On peut toutefois remarquer que l’inégalité équivaut à $ \left(2+\frac{3}{n}\right)\log \frac{1}{a}
\geq \frac{d}{n}- \frac{\log(2n+3)}{n}$ Donc pour $n$ grand, le rapport entre le nombre de décimales cherchées et le nombre de termes nécessaires est de l’ordre de $2\log \frac{1}{a}$. On peut établir les formules d’addition des tangentes puis montrer que, $a$ et $b$ étant deux réels tels que $ab\neq1$, on a Seul le premier cas va nous intéresser dans ce paragraphe. En 1706, l’anglais John MACHIN en $4\,\arctan\frac{1}{5}-\arctan\frac{1}{239}=\frac{\pi}{4}$ ce qui lui permit d’obtenir 100 bonnes décimales de $\pi$ sans l’aide d’aucune machine mais avec la formule proposée par son voisin écossais. On appelle polynôme de GREGORY le polynôme $G_n(X)=\displaystyle\sum_{k=0}^n \frac{(-1)^kX^{2k+1}}{2k+1}$. Écrivons une fonction Il ne reste plus qu’à l’utiliser dans la formule de MACHIN : Ce n’est pas très optimal car on lance deux fois On récupère une approximation de $\pi$ quelque part pour vérification et on compare juste pour le plaisir (enfin pas seulement car on a un peu peur des erreurs d’arrondi !) : En une seconde et demie, on a mille bonnes décimales de $\pi$ : les voici... Pour d’autres formules avec des arctangentes, on pourra se référer à un vieil article de la revue PLOT ((Bri91)). Moralité : l’arithmétique des ordinateurs, c’est un domaine très compliqué. Il vaut mieux éviter ce genre de désagrément aux élèves et les faire travailler avec des logiciels de calcul formel comme XCAS ou permettant de ne pas s’inquiéter de la précision des calculs. Ou alors, on peut faire travailler les élèves sur quelques notions d’arrondis en base 2. Les erreurs présentées ici ne sont pas dues à Python et on les retrouve sur – avec CAML : – avec SCILAB : – avec giac/XCAS : – avec MAXIMA : – avec GP/PARI : Je tiens à remercier vivement Gérard KUNTZ, Bernard PARISSE, LaurentFOUSSE, François SAUVAGEOT et Jean-Philippe VANROYEN pour leur relecture attentive et leurs conseils précieux.mini_greg(a,d)
avec $0
$\arctan a+\arctan b=\arctan\left(\frac{a+b}{1-ab}\right)\,+\,\varepsilon\pi$
avec $\varepsilon=0$ si $ab<1$, $\varepsilon=1$ si $ab>1$ et $a>0$ et $\varepsilon=-1$ si
$ab>1$ et $a<0$.
déduisit la fameuse formule :greg(a,N)
qui donne une valeur de $G_N(a)$ :greg
.
Dans tous les cas, il faudra que le professeur soit bien conscient des dangers potentiels.
Post-scriptum
d’autres langages :Remerciements
Références