Spécialité maths, Terminale • Exercices corrigés à Montréal

Fiche de révision : Python et méthodes numériques (Terminale)

Les questions de programmation du baccalauréat ne demandent presque jamais d'écrire un algorithme entier : elles demandent de compléter trois lignes, de dire ce que renvoie une fonction, ou de justifier un nombre d'étapes. Ce sont des questions courtes, et elles se perdent sur des détails d'une ligne.

Cette fiche liste les huit erreurs qui coûtent des points en algorithmique, avec la ligne exacte à écrire, l'arbre qui dit quelle méthode numérique répond à quelle question, et un encadrement d'intégrale par la méthode des rectangles décortiqué ligne par ligne.

Le fil du chapitre

Un algorithme numérique ne cherche pas la valeur exacte, il fabrique un ENCADREMENT dont on contrôle la largeur. Toutes les erreurs du chapitre viennent d'avoir oublié cela : on teste une égalité de flottants, on décale un indice, ou on augmente le pas sans regarder l'erreur.

Ce chapitre fait partie de Spécialité mathématiques en Terminale

Avant ce chapitre

Cette fiche suppose ces notions acquises. Si une méthode ci-dessous reste opaque, c'est presque toujours l'une d'elles qui manque, pas la fiche.

Remonter plus loin : la chaîne complète (8 chapitres) ↓

Le chemin de remédiation, du plus ancien au plus proche. Un élève qui reprend ce chapitre de zéro le reprend dans cet ordre.

  1. 1Généralités sur les fonctionsSeconde
  2. 2Algorithmique et PythonSeconde
  3. 3Les suites numériquesPremière
  4. 4Python en spécialité mathsPremière
  5. 5Suites et récurrence
  6. 6Algorithmique et ScratchQuatrième
  7. 7La notion de fonctionTroisième
  8. 8Algorithmique et ScratchTroisième

L'essentiel

Les rectangles encadrent, à condition que la fonction soit monotone

  • Sur [a;b][a\,;b] découpé en nn morceaux de largeur h=banh=\frac{b-a}{n}, la somme des rectangles à GAUCHE utilise f(a+kh)f(a+kh) pour kk de 00 à n1n-1, celle à DROITE utilise f(a+kh)f(a+kh) pour kk de 11 à nn.
  • Si ff est CROISSANTE sur [a;b][a\,;b], les rectangles à gauche minorent l'intégrale et ceux de droite la majorent. Si ff est décroissante, c'est l'inverse.
  • Sans monotonie, les deux sommes ne sont pas des bornes : elles restent des valeurs approchées, mais elles n'encadrent rien.
  • L'écart entre les deux sommes vaut exactement (ba)f(b)f(a)n\frac{(b-a)\bigl|f(b)-f(a)\bigr|}{n} : il est PROPORTIONNEL à 1n\frac{1}{n}, donc diviser l'erreur par 1010 demande 1010 fois plus de calculs.
-0.50.511.522.533.50.511.522.533.544.5droite : majorantgauche : minorant
Sur une fonction croissante, les rectangles pleins restent sous la courbe et les pointillés la dépassent : l'aire cherchée est prise entre les deux. Sur une fonction non monotone, aucune des deux sommes n'est une borne.

La méthode des trapèzes a une erreur proportionnelle à 1n2\frac{1}{n^{2}} : pour la même précision, elle demande environ la racine carrée du nombre de calculs. C'est la seule raison de son existence au programme.

Dichotomie : ce que garantit chaque étape

  • On part d'un intervalle [a;b][a\,;b] sur lequel ff change de signe, et à chaque étape on remplace aa ou bb par le milieu, en gardant le changement de signe.
  • Après nn étapes, la longueur de l'intervalle vaut exactement ba2n\frac{b-a}{2^{n}} : elle est divisée par 22 à chaque tour, jamais par autre chose.
  • Pour obtenir une précision ε\varepsilon, il faut donc nn tel que ba2nε\frac{b-a}{2^{n}}\le\varepsilon, soit nlnbaεln2n\ge\frac{\ln\frac{b-a}{\varepsilon}}{\ln 2}.
  • La dichotomie exige la CONTINUITÉ de ff et un changement de signe aux bornes : ce sont les hypothèses du théorème des valeurs intermédiaires, dont elle est la version numérique.

Sur [0;1][0\,;1], dix étapes donnent une précision de 11024\frac{1}{1024}, soit environ 10310^{-3}; vingt étapes donnent 10610^{-6}. Trois chiffres significatifs par dix étapes : c'est le seul ordre de grandeur à retenir.

Euler et Newton : deux récurrences, deux usages

  • Euler approche une SOLUTION d'équation différentielle : yk+1=yk+hf(xk,yk)y_{k+1}=y_{k}+h\,f(x_{k},y_{k}), et pour y=ay+by'=ay+b cela donne yk+1=yk+h(ayk+b)y_{k+1}=y_{k}+h(ay_{k}+b), une suite arithmético-géométrique de raison 1+ah1+ah.
  • Son erreur est proportionnelle au pas hh : diviser l'erreur par 1010 demande 1010 fois plus d'étapes.
  • Newton approche une RACINE d'équation : xk+1=xkf(xk)f(xk)x_{k+1}=x_{k}-\frac{f(x_{k})}{f'(x_{k})}, c'est-à-dire l'abscisse où la tangente en xkx_{k} coupe l'axe.
  • Newton converge très vite quand il converge, mais il exige f(xk)0f'(x_{k})\neq 0 et un point de départ assez proche : rien ne le garantit.

Le repère qui évite la confusion : Euler part d'une équation différentielle et produit une COURBE; Newton part d'une équation numérique et produit un NOMBRE.

Écrire une boucle qui ne se décale pas

  • `range(n)` parcourt les entiers de 00 à n1n-1 : il y a bien nn valeurs, mais la dernière est n1n-1.
  • `range(1, n+1)` parcourt les entiers de 11 à nn : c'est l'écriture à utiliser quand l'énoncé numérote à partir de 11.
  • Un accumulateur s'initialise AVANT la boucle : `s = 0` ou `p = 1` selon qu'on additionne ou qu'on multiplie.
  • Une mise à jour multiplicative, `f = f*k`, évite de recalculer une factorielle entière à chaque tour et fait passer le coût de n2n^{2} à nn opérations.

Les pièges qui coûtent des points

Les erreurs ci-dessous sont celles que je corrige le plus souvent en séance. Chacune coûte des points sur une copie, même quand le raisonnement est juste.

1. Tester l'égalité de deux nombres flottants

toute la question, et le programme tourne indéfiniment

Ce qu'il ne faut pas écrire

« `while x != 2: x = x + 0.1` »

Ce qu'il faut écrire

« `while abs(x - 2) > 1e-9: x = x + 0.1` : une condition d'arrêt numérique s'écrit toujours avec une INÉGALITÉ. »

Pourquoi : Les flottants sont des approximations binaires : 0,1+0,20{,}1+0{,}2 ne vaut pas exactement 0,30{,}3 en machine. Une égalité peut donc n'être jamais atteinte, même quand le raisonnement mathématique dit qu'elle devrait l'être.

2. Décaler les indices dans une somme de rectangles

1 point, et l'encadrement obtenu est faux d'un côté

Ce qu'il ne faut pas écrire

« `for k in range(n): s = s + f(a + k*h)` pour les rectangles à DROITE. »

Ce qu'il faut écrire

« Rectangles à gauche : `for k in range(n): s = s + f(a + k*h)`. Rectangles à droite : `for k in range(1, n+1): s = s + f(a + k*h)`. »

Pourquoi : `range(n)` s'arrête à n1n-1 : la somme de gauche prend f(a)f(a) et pas f(b)f(b), celle de droite prend f(b)f(b) et pas f(a)f(a). Les deux sommes diffèrent exactement du terme h(f(b)f(a))h\bigl(f(b)-f(a)\bigr).

3. Réinitialiser l'accumulateur à l'intérieur de la boucle

toute la question : le programme renvoie le dernier terme, pas la somme

Ce qu'il ne faut pas écrire

« `for k in range(n): s = 0; s = s + f(a + k*h)` »

Ce qu'il faut écrire

« `s = 0` AVANT la boucle, puis `for k in range(n): s = s + f(a + k*h)` à l'intérieur. »

Pourquoi : Un accumulateur mémorise ce qui précède : le remettre à zéro à chaque tour efface tout le travail. Le symptôme est reconnaissable, le résultat est du même ordre de grandeur qu'un seul terme.

4. Annoncer un encadrement sans avoir vérifié la monotonie

1 point, et l'encadrement peut être écrit à l'envers

Ce qu'il ne faut pas écrire

« Les rectangles à gauche donnent 0,630{,}63 et ceux de droite 0,760{,}76, donc 0,63I0,760{,}63\le I\le 0{,}76. »

Ce qu'il faut écrire

« ff est DÉCROISSANTE sur [1;2][1\,;2], donc les rectangles à droite minorent et ceux de gauche majorent : 0,635I0,7600{,}635\le I\le 0{,}760. »

Pourquoi : L'encadrement vient de la monotonie, pas de la méthode. Sur une fonction qui monte puis descend, les deux sommes tombent du même côté de l'intégrale et n'encadrent rien du tout.

5. Augmenter le pas d'Euler sans regarder ce que devient la solution

1 à 2 points, et une valeur physiquement impossible rendue sans commentaire

Ce qu'il ne faut pas écrire

« Avec h=1,5h=1{,}5, la méthode d'Euler appliquée à y=yy'=-y et y0=1y_{0}=1 donne y1=0,5y_{1}=-0{,}5 : c'est la valeur approchée cherchée. »

Ce qu'il faut écrire

« La solution exacte ex\mathrm{e}^{-x} est strictement positive, or Euler donne y1=0,5y_{1}=-0{,}5 : le pas est trop grand et le résultat n'a aucun sens. Il faut reprendre avec hh nettement plus petit. »

12345-1-0.50.511.5solution exacteEuler, pas 1,5
La solution exacte reste positive et décroît doucement; la ligne brisée d'Euler, avec un pas de 1,51{,}5, passe sous l'axe dès la première étape et oscille. Aucun calcul n'est faux, seul le pas l'est.

Pourquoi : Euler remplace la courbe par sa tangente sur toute la longueur du pas. Si le pas dépasse l'échelle de variation de la solution, la tangente traverse l'axe et l'approximation devient absurde, sans qu'aucune erreur de calcul soit commise.

6. Appliquer Newton sans vérifier que la dérivée ne s'annule pas

1 point, et l'algorithme peut diviser par zéro

Ce qu'il ne faut pas écrire

« xk+1=xkf(xk)f(xk)x_{k+1}=x_{k}-\frac{f(x_{k})}{f'(x_{k})} converge toujours vers la racine. »

Ce qu'il faut écrire

« La méthode exige f(xk)0f'(x_{k})\neq 0 à chaque étape et un point de départ assez proche de la racine. Sur une fonction convexe dont on part du bon côté, la convergence est assurée; sinon, rien ne la garantit. »

0.511.522.53-3-2-112345x0x1tangentes
Chaque tangente coupe l'axe plus près de la racine que le point d'où elle part : c'est tout le principe de Newton. Le pas de 22 à 1,51{,}5 est grand, celui de 1,51{,}5 à 1,4171{,}417 est déjà minuscule.

Pourquoi : Newton remplace la courbe par sa tangente : si la tangente est horizontale, elle ne coupe jamais l'axe et la division est impossible. C'est aussi pourquoi les sujets précisent presque toujours la convexité de ff sur l'intervalle.

7. Confondre l'erreur en hh et l'erreur en h2h^{2}

1 point d'interprétation, souvent la dernière question du sujet

Ce qu'il ne faut pas écrire

« La méthode des trapèzes est deux fois plus précise que celle des rectangles. »

Ce qu'il faut écrire

« L'erreur des rectangles est proportionnelle à 1n\frac{1}{n}, celle des trapèzes à 1n2\frac{1}{n^{2}} : passer de n=10n=10 à n=100n=100 divise la première par 1010 et la seconde par 100100. »

Pourquoi : L'ordre d'une méthode dit comment l'erreur RÉAGIT au raffinement, pas de combien elle est plus petite à nn fixé. C'est ce qui décide du coût de calcul pour une précision demandée.

8. Renvoyer une valeur à l'intérieur de la boucle

toute la question : la fonction renvoie après un seul tour

Ce qu'il ne faut pas écrire

« `for k in range(n): s = s + u(k); return s` avec le `return` indenté dans la boucle. »

Ce qu'il faut écrire

« Le `return` se place APRÈS la boucle, à l'indentation de la boucle elle-même : il ne s'exécute qu'une fois tout le travail terminé. »

Pourquoi : En Python, l'indentation EST la structure du programme. Un `return` indenté d'un cran de trop interrompt la boucle au premier passage, et le résultat renvoyé est celui du terme initial.

9. Compter les étapes d'une dichotomie avec une division par 1010

1 point, et un nombre d'étapes trois fois trop petit

Ce qu'il ne faut pas écrire

« Chaque étape divise l'intervalle par 1010, donc trois étapes suffisent pour trois décimales. »

Ce qu'il faut écrire

« Chaque étape divise la longueur par 22 : après nn étapes elle vaut ba2n\frac{b-a}{2^{n}}. Pour 10310^{-3} sur [0;1][0\,;1], il faut 2n10002^{n}\ge 1000, donc n=10n=10. »

Pourquoi : La dichotomie coupe en DEUX, pas en dix : c'est son nom. Le repère utile est 210=10242^{10}=1024, donc environ trois décimales gagnées toutes les dix étapes.

Quelle méthode choisir

Quelle méthode numérique pour quelle question

On regarde ce que l'énoncé demande d'approcher : un nombre, une aire, une courbe, ou une limite.

  • Si « déterminer une valeur approchée de la solution de f(x)=0f(x)=0 » dichotomie si l'énoncé fournit un changement de signe, Newton s'il fournit la dérivée et la convexité

    Exemple : x3+x3=0x^{3}+x-3=0 sur [1;2][1\,;2], par dichotomie

  • Si « encadrer abf(x)dx\int_{a}^{b}f(x)\,dx » méthode des rectangles, à condition que ff soit MONOTONE sur l'intervalle

    Exemple : 12dxx\int_{1}^{2}\frac{dx}{x} encadré par 0,6350{,}635 et 0,7600{,}760 avec n=4n=4

  • Si « donner une valeur approchée de abf(x)dx\int_{a}^{b}f(x)\,dx », sans encadrement méthode des trapèzes, plus précise à nombre d'étapes égal

  • Si « tracer ou tabuler une solution d'équation différentielle » méthode d'Euler, avec un pas assez petit pour que la solution garde son sens physique

    Exemple : charge d'un condensateur, y=yRC+ERCy'=-\frac{y}{RC}+\frac{E}{RC}

  • Si « déterminer le plus petit rang tel que » boucle NON bornée `while`, avec un compteur incrémenté à chaque tour

    La boucle `for` est réservée au cas où le nombre de tours est connu à l'avance.

  • Si « calculer une somme ou un produit de nn termes » boucle bornée `for` avec un accumulateur initialisé avant la boucle, et une mise à jour multiplicative pour les factorielles

Aucune de ces méthodes ne donne la valeur exacte, et toutes les questions de conclusion attendent le mot « valeur approchée » ou « encadrement ». Écrire une égalité entre le résultat numérique et la valeur exacte coûte un demi-point.

Boucle bornée ou non bornée, et où placer chaque ligne

On se demande si le nombre de tours est connu AVANT de commencer.

  • Si le nombre de tours est donné par l'énoncé, comme nn subdivisions boucle `for k in range(n)`, sans compteur supplémentaire

  • Si on répète jusqu'à atteindre une précision boucle `while` avec une condition d'INÉGALITÉ, et un compteur incrémenté dans la boucle

    Exemple : `while b - a > 1e-3:` pour une dichotomie

  • Si on cherche le premier rang qui dépasse un seuil boucle `while` sur la condition contraire, puis renvoyer le compteur, jamais la valeur atteinte

    Incrémenter le compteur APRÈS la mise à jour garantit qu'il désigne le rang du dépassement.

  • Si une variable doit mémoriser un cumul l'initialiser AVANT la boucle, à 00 pour une somme et à 11 pour un produit

  • Si la fonction doit renvoyer un résultat placer le `return` après la boucle, au même niveau d'indentation qu'elle

Une boucle `while` dont la condition ne peut jamais devenir fausse tourne indéfiniment. Avant de rendre, on vérifie qu'au moins une variable de la condition est modifiée à chaque tour.

La rédaction attendue

Le correcteur coche des étapes. Les voici dans l'ordre, avec la phrase de conclusion qu'il attend mot pour mot.

Compléter un programme, comme au baccalauréat

Quand l'utiliser : L'énoncé donne une fonction Python à trous et demande de compléter deux ou trois lignes.

  1. 1 Lire d'abord le `return` : il dit ce que la fonction doit produire, et donc ce que les variables doivent contenir à la fin.
  2. 2 Repérer l'initialisation des accumulateurs avant la boucle et vérifier leur valeur de départ, 00 ou 11.
  3. 3 Écrire la ligne de mise à jour en réutilisant la relation de récurrence de l'énoncé, telle quelle.
  4. 4 Vérifier les bornes de `range` en comptant les termes sur un petit cas, par exemple n=2n=2.
  5. 5 Contrôler l'indentation : ce qui est dans la boucle, ce qui est après.
  6. 6 Simuler mentalement deux tours et comparer aux deux premières valeurs calculées à la main.

Phrase de conclusion

Pour n=4n=4, la fonction renvoie le couple (0,635;0,760)(0{,}635\,;0{,}760), qui encadre bien ln20,693\ln 2\approx 0{,}693.

Le piège : Compléter la ligne de mise à jour sans vérifier les bornes de la boucle. Un décalage d'indice donne un programme qui tourne, ne renvoie aucune erreur, et produit une valeur légèrement fausse : c'est la pire des situations en examen.

Barème : En général 1 point par ligne complétée, plus 1 point pour la valeur renvoyée sur un cas donné.

Justifier un nombre d'étapes ou une précision

Quand l'utiliser : L'énoncé demande combien d'étapes garantissent une précision donnée, ou quelle précision donne un nombre d'étapes.

  1. 1 Écrire l'expression EXACTE de la largeur ou de l'erreur en fonction du nombre d'étapes : ba2n\frac{b-a}{2^{n}} pour la dichotomie, (ba)f(b)f(a)n\frac{(b-a)|f(b)-f(a)|}{n} pour les rectangles.
  2. 2 Poser l'inéquation demandée, avec la précision de l'énoncé.
  3. 3 Résoudre : logarithme et division par ln2\ln 2 pour une puissance, division simple pour un quotient en 1n\frac{1}{n}.
  4. 4 Arrondir à l'entier SUPÉRIEUR, puisqu'on cherche un nombre d'étapes suffisant.
  5. 5 Vérifier avec nn et avec n1n-1, et écrire les deux valeurs.

Phrase de conclusion

L'écart entre les deux sommes vaut 0,5n\frac{0{,}5}{n}; il est inférieur à 10310^{-3} dès que n500n\ge 500, donc 500500 subdivisions suffisent.

Le piège : Confondre la précision demandée et l'écart entre les deux sommes. L'encadrement a pour largeur cet écart : la valeur approchée obtenue est donc précise à cet écart près, pas à sa moitié, sauf si l'on prend le milieu.

Barème : 1 point pour l'expression de l'erreur, 1 point pour l'inéquation résolue, 1 point pour l'entier et sa vérification.

Vérifier avant de rendre

Cinq minutes de vérification récupèrent plus de points qu'un exercice de plus commencé à la hâte.

L'exercice type décortiqué

Encadrer une intégrale par la méthode des rectangles

On veut encadrer I=12dxxI=\int_{1}^{2}\frac{dx}{x}, dont on sait par ailleurs qu'il vaut ln2\ln 2.

1. Justifier que la fonction inverse est décroissante sur [1;2][1\,;2] et en déduire quelle somme minore et laquelle majore. 2. Compléter le programme ci-dessous. 3. Calculer l'encadrement obtenu pour n=4n=4. 4. Donner l'écart entre les deux sommes en fonction de nn. 5. Combien de subdivisions faut-il pour un écart inférieur à 10310^{-3} ?

python
def rectangles(f, a, b, n):
    h = (b - a)/n
    gauche = 0
    droite = 0
    for k in range(n):
        gauche = gauche + f(a + k*h)
        droite = droite + f(a + (k + 1)*h)
    return h*gauche, h*droite

Étape 1

Sur [1;2][1\,;2], la dérivée de x1xx\mapsto\frac{1}{x} vaut 1x2<0-\frac{1}{x^{2}}<0 : la fonction est strictement décroissante. Les rectangles à GAUCHE utilisent donc la plus grande valeur de chaque morceau et MAJORENT l'intégrale; ceux de droite la minorent.

Pourquoi

C'est la monotonie, et elle seule, qui transforme deux valeurs approchées en un encadrement. Cette phrase vaut un point entier et se perd par omission bien plus que par erreur.

Étape 2

Dans la boucle, `gauche` accumule f(a+kh)f(a+kh) pour kk de 00 à n1n-1, et `droite` accumule f(a+(k+1)h)f(a+(k+1)h) pour les mêmes kk, c'est-à-dire f(a+jh)f(a+jh) pour jj de 11 à nn. Une seule boucle suffit pour les deux sommes.

Pourquoi

Le décalage d'une unité est écrit dans l'expression, pas dans les bornes de `range` : c'est l'écriture la plus sûre, puisqu'une seule boucle ne peut pas se désynchroniser.

Étape 3

Pour n=4n=4, h=0,25h=0{,}25. Somme de gauche : 0,25×(1+11,25+11,5+11,75)=0,25×3,03810,75950{,}25\times\left(1+\frac{1}{1{,}25}+\frac{1}{1{,}5}+\frac{1}{1{,}75}\right)=0{,}25\times 3{,}0381\approx 0{,}7595.

Pourquoi

On écrit les quatre valeurs de la fonction avant de multiplier par hh : le facteur hh se sort de la somme, ce qui divise par quatre le nombre de multiplications et le risque d'erreur.

Étape 4

Somme de droite : 0,25×(11,25+11,5+11,75+12)=0,25×2,53810,63450{,}25\times\left(\frac{1}{1{,}25}+\frac{1}{1{,}5}+\frac{1}{1{,}75}+\frac{1}{2}\right)=0{,}25\times 2{,}5381\approx 0{,}6345. D'où l'encadrement 0,6345ln20,75950{,}6345\le\ln 2\le 0{,}7595.

Pourquoi

Les deux sommes ne diffèrent que par leur premier et leur dernier terme, ce qui donne un contrôle direct : leur différence doit valoir h(f(1)f(2))h\bigl(f(1)-f(2)\bigr).

Étape 5

Contrôle : ln20,6931\ln 2\approx 0{,}6931, qui appartient bien à [0,6345;0,7595][0{,}6345\,;0{,}7595].

Pourquoi

La valeur exacte est fournie par l'énoncé précisément pour cela. Un ln2\ln 2 hors de l'encadrement dirait immédiatement que l'une des deux sommes est décalée.

Étape 6

Écart : (ba)f(b)f(a)n=1×121n=0,5n\frac{(b-a)\bigl|f(b)-f(a)\bigr|}{n}=\frac{1\times\left|\frac{1}{2}-1\right|}{n}=\frac{0{,}5}{n}. Pour n=4n=4, cela vaut 0,1250{,}125, ce qui est bien 0,75950,63450{,}7595-0{,}6345.

Pourquoi

La formule se vérifie sur le cas déjà calculé avant de servir à la question suivante. C'est la seule façon d'être sûr de ne pas s'être trompé de facteur.

Étape 7

0,5n103\frac{0{,}5}{n}\le 10^{-3} équivaut à n500n\ge 500. Il faut donc 500500 subdivisions, et 499499 ne suffisent pas puisque 0,54991,002×103\frac{0{,}5}{499}\approx 1{,}002\times 10^{-3}.

Pourquoi

La vérification sur n1n-1 démontre le mot « au moins » de l'énoncé. Elle montre aussi la faiblesse de la méthode : cinq cents calculs pour trois décimales, là où les trapèzes en demanderaient une vingtaine.

Conclusion rédigée

La fonction inverse étant décroissante sur [1;2][1\,;2], les rectangles à droite minorent et ceux de gauche majorent : pour n=4n=4 on obtient 0,6345ln20,75950{,}6345\le\ln 2\le 0{,}7595, l'écart valant 0,5n\frac{0{,}5}{n}, et il faut 500500 subdivisions pour descendre sous 10310^{-3}.

L'erreur classique sur cet exercice : Annoncer l'encadrement dans l'ordre habituel « gauche puis droite » sans avoir regardé le sens de variation. Sur une fonction décroissante c'est la somme de GAUCHE qui majore, et l'encadrement écrit à l'envers est compté faux même quand les deux nombres sont justes.

À savoir par cœur

  • `range(n)` donne 00 à n1n-1; `range(1, n+1)` donne 11 à nn. C'est là que se logent tous les décalages.
  • Un accumulateur s'initialise AVANT la boucle, à 00 pour une somme, à 11 pour un produit.
  • Une condition d'arrêt numérique s'écrit avec une inégalité, jamais avec une égalité de flottants.
  • Rectangles : ils n'encadrent que si ff est MONOTONE, et l'écart vaut (ba)f(b)f(a)n\frac{(b-a)|f(b)-f(a)|}{n}.
  • Dichotomie : la longueur est divisée par 22 à chaque étape, donc ba2n\frac{b-a}{2^{n}} après nn étapes. 210=10242^{10}=1024.
  • Euler : yk+1=yk+hf(xk,yk)y_{k+1}=y_{k}+h\,f(x_{k},y_{k}), erreur proportionnelle au pas. Un pas trop grand donne des valeurs impossibles.
  • Newton : xk+1=xkf(xk)f(xk)x_{k+1}=x_{k}-\frac{f(x_{k})}{f'(x_{k})}, l'abscisse où la tangente coupe l'axe. Il faut f(xk)0f'(x_{k})\neq 0.
  • Rectangles : erreur en 1n\frac{1}{n}. Trapèzes : erreur en 1n2\frac{1}{n^{2}}.
  • Le `return` se place APRÈS la boucle, au même niveau d'indentation qu'elle.

Questions fréquentes

Pourquoi ne faut-il jamais tester l'égalité de deux nombres décimaux en Python ?

Parce que les nombres à virgule sont stockés en binaire de façon approchée : additionner un dixième et deux dixièmes ne donne pas exactement trois dixièmes en machine. Une condition d'arrêt fondée sur une égalité peut donc n'être jamais vérifiée et faire tourner le programme indéfiniment. On écrit toujours une inégalité sur une valeur absolue.

Quand la méthode des rectangles donne-t-elle un vrai encadrement ?

Seulement si la fonction est monotone sur l'intervalle. Si elle est croissante, les rectangles à gauche minorent et ceux de droite majorent; si elle est décroissante, c'est l'inverse. Sur une fonction qui monte puis descend, les deux sommes tombent du même côté et ne bornent plus rien du tout.

Combien d'étapes faut-il pour une dichotomie précise à trois décimales ?

Chaque étape divise la longueur de l'intervalle par deux, donc après n étapes elle vaut la longueur de départ divisée par deux puissance n. Sur un intervalle de longueur un, dix étapes donnent environ un millième, puisque deux puissance dix vaut mille vingt-quatre. On gagne donc à peu près trois décimales toutes les dix étapes.

Comment fonctionne la méthode d'Euler ?

Elle remplace la courbe solution par sa tangente sur chaque petit intervalle de longueur égale au pas. À partir d'un point connu, on avance en ligne droite dans la direction donnée par l'équation différentielle, puis on recommence. Plus le pas est petit, meilleure est l'approximation, et l'erreur est proportionnelle au pas.

Pourquoi la méthode de Newton peut-elle échouer ?

Parce qu'elle suit la tangente jusqu'à l'axe des abscisses. Si la tangente est horizontale, elle ne coupe jamais l'axe et le calcul divise par zéro. Si le point de départ est loin de la racine, la suite peut aussi s'éloigner ou osciller. C'est pour cela que les énoncés précisent la convexité de la fonction et le point de départ.

Quelle différence entre une boucle bornée et une boucle non bornée ?

Une boucle bornée répète un nombre de tours connu à l'avance et s'écrit avec le mot for. Une boucle non bornée répète tant qu'une condition reste vraie et s'écrit avec le mot while : on l'utilise pour chercher un seuil ou atteindre une précision. Dans ce cas, il faut s'assurer qu'une variable de la condition change à chaque tour.

Passer à la pratique

Exercices corrigés : Python et méthodes numériques

Une méthode se prouve sur une copie, pas sur une fiche. La série du même chapitre reprend chacun de ces pièges dans un exercice, avec le corrigé rédigé étape par étape.

  • 15 exercices corrigés
  • 150 points
  • 225 minutes
Faire les exercices
Fiche précédente La convexité

Voir aussi

Vous cherchez un tuteur à Montréal pour ce chapitre ?

Contactez-moi pour une première séance. On reprend les points de méthode qui font perdre des points en évaluation, puis on les met à l'épreuve sur des exercices du niveau réel de l'examen.

Site par Studio Squalli