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

Exercices corrigés : Python, méthodes numériques et sciences (Terminale)

Voici une série d'exercices corrigés de méthodes numériques en Python, au niveau de la classe de Terminale spécialité mathématiques du programme français, telle qu'elle est suivie au Lycée Marie de France et au Collège Stanislas à Montréal.

En Terminale, un algorithme ne donne jamais une valeur exacte : il donne une valeur approchée, et la question posée au bac porte presque toujours sur l'ERREUR. Combien vaut-elle, comment la majorer, comment évolue-t-elle quand on divise le pas par deux. Chaque exercice de cette série pose cette question, et la réponse vient du cours d'analyse, pas de la machine. Vous y programmez une somme partielle qui approche le nombre e avec son reste majoré (exercice 1), la dichotomie et son nombre d'étapes (exercice 2), la méthode des rectangles qui encadre ∫01e−x2 dx\int_{0}^{1}e^{-x^{2}}\,dx (exercice 3), la méthode d'Euler et sa forme explicite (exercice 4), la loi binomiale sans factorielle (exercice 5), la méthode de Newton guidée par la convexité (exercice 6) et la méthode des trapèzes, dont l'erreur suit le carré du pas (exercice 7).

Les problèmes portent ces méthodes en sciences : la charge d'un condensateur par la méthode d'Euler (exercice 9) et le suivi cinétique d'une réaction par régression logarithmique (exercice 10). Les classiques de la partie C ajoutent le seuil de la série harmonique (exercice 11), la suite de Fibonacci dans une liste (exercice 12), l'estimation de π\pi par la méthode de Monte-Carlo (exercice 13), le point fixe du cosinus comparé à Newton (exercice 14) et la simulation de la somme de deux dés (exercice 15). L'exercice 8 fait corriger cinq affirmations fausses, dont « Newton converge quel que soit le point de départ ».

La partie D reprend les exemples d'algorithme que le programme officiel cite chapitre par chapitre et que la série n'avait pas encore : sécante pour la continuité, Briggs pour le logarithme, Brouncker et les milieux pour le calcul intégral, relation de Pascal et planche de Galton pour les probabilités. Son fil : un algorithme se juge à sa vitesse et à ses limites, et les deux se lisent sur les mathématiques avant de lancer la machine.

Série autocorrigée Tape tes réponses et vérifie-les question par question : la page te dit juste ou faux avant d'ouvrir la correction. Avec un compte, chaque bonne réponse du premier coup rapporte des points, et tes réponses justes restent remplies quand tu reviens.

Ce chapitre fait partie de Spécialité mathématiques en Terminale
Avant de commencer Fiche de révision : les pièges et la méthode de ce chapitre

Avant ce chapitre

Ces notions sont supposées acquises ici. Si le premier exercice résiste, le blocage vient presque toujours de l'une d'elles, pas du chapitre lui-même.

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. 1 Algorithmique et Scratch Quatrième
  2. 2 La notion de fonction Troisième
  3. 3 Algorithmique et Scratch Troisième
  4. 4 Généralités sur les fonctions Seconde
  5. 5 Algorithmique et Python Seconde
  6. 6 Les suites numériques Première
  7. 7 Python en spécialité maths Première
  8. 8 Suites et récurrence

Rappel de cours

  • • Une somme partielle se programme avec un accumulateur, et la mise à jour multiplicative d'une factorielle, f = f*k, évite de la recalculer entièrement à chaque tour.
  • • Dichotomie : à chaque étape la longueur de l'intervalle est divisée par 22, donc après nn étapes elle vaut b−a2 n\frac{b-a}{2^{\,n}}.
  • • Pour ff monotone sur [a ;b][a\,;b], les rectangles à gauche et à droite ENCADRENT l'intégrale, et l'écart entre les deux vaut (b−a)∣f(b)−f(a)∣n\frac{(b-a)\left|f(b)-f(a)\right|}{n}.
  • • Méthode d'Euler pour y′=ay+by'=ay+b : yk+1=yk+h(ayk+b)y_{k+1}=y_k+h\left(ay_k+b\right), soit une suite arithmético-géométrique de raison 1+ah1+ah.
  • • Méthode de Newton : xk+1=xk−f(xk)f′(xk)x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}, c'est-à-dire l'abscisse où la tangente coupe l'axe des abscisses.
  • • Loi binomiale : P(X=k)=(nk)p k(1−p) n−kP(X=k)=\binom{n}{k}p^{\,k}(1-p)^{\,n-k}, et (nk+1)=(nk)×n−kk+1\binom{n}{k+1}=\binom{n}{k}\times\frac{n-k}{k+1}.
  • • L'erreur de la méthode des rectangles et celle de la méthode d'Euler sont proportionnelles au pas ; celle de la méthode des trapèzes est proportionnelle au carré du pas.
  • • Une condition d'arrêt numérique s'écrit toujours avec une inégalité, jamais avec une égalité de flottants.
  • • Méthode de la sécante : xk+1=xk−f(xk)×xk−xk−1f(xk)−f(xk−1)x_{k+1}=x_{k}-f(x_{k})\times\frac{x_{k}-x_{k-1}}{f(x_{k})-f(x_{k-1})}, c'est-à-dire Newton avec la pente d'une corde à la place de f′(xk)f'(x_{k}).
  • • Méthode des milieux : Mn=h∑f(a+(k+12)h)M_{n}=h\sum f\left(a+\left(k+\frac{1}{2}\right)h\right). Pour une fonction concave, Tn≤∫abf≤MnT_{n}\leq\int_{a}^{b}f\leq M_{n} ; pour une fonction convexe, l'inverse.
  • • Relation de Pascal dans une liste : L = [1] + [L[j] + L[j + 1] for j in range(len(L) - 1)] + [1] fait passer d'une ligne du triangle à la suivante.

Partie A : les bases (/50)

Exercice 1 : Approcher le nombre e et majorer le reste

On admet que e=∑k=0+∞1k!e=\sum_{k=0}^{+\infty}\frac{1}{k!}, et l'on pose Sn=∑k=0n1k!S_n=\sum_{k=0}^{n}\frac{1}{k!}. On veut calculer SnS_n en Python.

def S(n):
    s = 0
    f = 1
    for k in range(n+1):
        if k > 0:
            f = f*k
        s = s + 1/f
    return s
  • a) Expliquez le rôle de la variable f et donnez S5S_5 au millionième.
  • b) Que vaut S10S_{10} ? Comparez à e≈2,718281828e\approx 2{,}718281828.
  • c) On admet la majoration 0<e−Sn<1n×n!0<e-S_n<\frac{1}{n\times n!}. Vérifiez-la pour n=10n=10.
  • d) Pourquoi met-on f = f*k à jour dans la boucle plutôt que de recalculer k!k! à chaque tour ?

Tape tes réponses, la page te dit juste ou faux 0/4

a)
b)
c)
d)
Voir la correction

Réponses

  • a) f contient k!k! ; S5≈2,716667S_{5}\approx 2{,}716667
  • b) S10≈2,7182818S_{10}\approx 2{,}7182818, écart ≈2,7×10−8\approx 2{,}7\times 10^{-8}
  • c) 110×10!≈2,756×10−8\frac{1}{10\times 10!}\approx 2{,}756\times 10^{-8} majore l'écart
  • d) Une multiplication par tour au lieu de kk
a)

La variable f contient la factorielle du rang courant : elle vaut 11 pour k=0k=0, puis elle est multipliée par kk à chaque nouveau tour, ce qui donne successivement 11, 11, 22, 66, 2424, 120120. On accumule donc 10!+11!+⋯+15!=1+1+0,5+0,16‾+0,0416‾+0,0083‾\frac{1}{0!}+\frac{1}{1!}+\dots+\frac{1}{5!}=1+1+0{,}5+0{,}1\overline{6}+0{,}041\overline{6}+0{,}008\overline{3}, soit S5≈2,716667S_5\approx 2{,}716667. Deux accumulateurs travaillent en parallèle, l'un additif pour la somme, l'autre multiplicatif pour la factorielle, chacun initialisé à l'élément neutre de son opération, 00 et 11.

b)

On obtient S10≈2,7182818011S_{10}\approx 2{,}7182818011, à comparer à e≈2,7182818285e\approx 2{,}7182818285. Les huit premières décimales coïncident, et l'écart vaut environ 2,7×10−82{,}7\times 10^{-8}. Onze termes suffisent donc à une précision que le balayage de l'exercice suivant n'atteindrait qu'après des millions de tours : c'est la puissance des factorielles au dénominateur, qui décroissent bien plus vite que n'importe quelle suite géométrique.

c)

Pour n=10n=10 : 10!=3 628 80010!=3\,628\,800, donc 110×10!=136 288 000≈2,756×10−8\frac{1}{10\times 10!}=\frac{1}{36\,288\,000}\approx 2{,}756\times 10^{-8}. L'écart réellement constaté, 2,731×10−82{,}731\times 10^{-8}, lui est bien inférieur ✓. Cette majoration est ce que l'énoncé de bac attend : elle GARANTIT la précision sans connaître ee, alors que la comparaison de la question b) suppose déjà connue la valeur cherchée. C'est toute la différence entre constater une erreur et la majorer.

d)

Pour une raison de COÛT. Recalculer k!k! à chaque tour demande kk multiplications, donc au total 1+2+⋯+n=n(n+1)21+2+\dots+n=\frac{n(n+1)}{2} multiplications, un nombre proportionnel à n2n^2. La mise à jour f = f*k n'en demande qu'UNE par tour, soit nn au total. Pour n=1000n=1000, cela fait environ 500 000500\,000 opérations contre 10001000. Le principe est général et se retrouve à l'exercice 5 avec les coefficients binomiaux : quand un terme se déduit du précédent par une opération simple, on ne le recalcule jamais depuis le début.

Le fil de la série est posé dès cet exercice : le programme fournit une valeur approchée, et c'est une INÉGALITÉ démontrée qui dit combien elle vaut. Un résultat numérique sans majoration de l'erreur ne vaut rien au bac.

Coche ici les exercices faits ou à revoir : un compte gratuit, sans mot de passe, retient tes coches et tes réponses justes d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander l'exercice qui te manque. Crée ton espace, un courriel suffit.

Exercice 2 : Dichotomie et nombre d'étapes

Soit ff définie sur [0 ;1][0\,;1] par f(x)=ex−3xf(x)=e^{x}-3x. On a f(0)=1>0f(0)=1>0 et f(1)=e−3≈−0,28<0f(1)=e-3\approx -0{,}28<0, et l'on admet que ff s'annule une seule fois sur cet intervalle, en un réel α\alpha.

from math import exp

def f(x):
    return exp(x) - 3*x

a = 0
b = 1
while b - a > 0.001:
    m = (a + b)/2
    if f(a)*f(m) > 0:
        a = m
    else:
        b = m
print(a, b)
  • a) Détaillez les trois premières étapes : donnez mm, le signe de f(m)f(m) et le nouvel intervalle.
  • b) Expliquez le test f(a)*f(m) > 0. Que traduit-il ?
  • c) Combien d'étapes la boucle effectue-t-elle ? Combien en faudrait-il pour une précision de 10−610^{-6} ?
  • d) Comparez au balayage de pas 10−610^{-6} sur [0 ;1][0\,;1] en nombre de tours.

Tape tes réponses, la page te dit juste ou faux 0/6

a)
Intervalle après l'étape 3 ;
b)
c)
d)
Voir la correction

Réponses

  • a) [0,5;1][0{,}5;1], [0,5;0,75][0{,}5;0{,}75], [0,5;0,625][0{,}5;0{,}625]
  • b) Même signe en aa et mm : la racine est dans [m;b][m;b]
  • c) 1010 étapes ; 2020 pour 10−610^{-6}
  • d) 10610^{6} tours contre 2020
a)

Étape 1 : m=0,5m=0{,}5 et f(0,5)=e0,5−1,5≈0,1487>0f(0{,}5)=e^{0{,}5}-1{,}5\approx 0{,}1487>0, du même signe que f(0)f(0), donc la racine est à droite et l'intervalle devient [0,5 ;1][0{,}5\,;1]. Étape 2 : m=0,75m=0{,}75 et f(0,75)≈2,117−2,25=−0,133<0f(0{,}75)\approx 2{,}117-2{,}25=-0{,}133<0, donc l'intervalle devient [0,5 ;0,75][0{,}5\,;0{,}75]. Étape 3 : m=0,625m=0{,}625 et f(0,625)≈1,8682−1,875=−0,0068<0f(0{,}625)\approx 1{,}8682-1{,}875=-0{,}0068<0, donc l'intervalle devient [0,5 ;0,625][0{,}5\,;0{,}625]. En trois étapes la longueur est passée de 11 à 0,1250{,}125.

b)

Un produit de deux nombres est strictement positif si et seulement si ils ont le MÊME signe. Le test f(a)*f(m) > 0 demande donc si ff prend le même signe en aa et au milieu : dans ce cas la racine ne peut pas se trouver dans [a ;m][a\,;m], et l'on remplace aa par mm. Sinon ff change de signe entre aa et mm, le théorème des valeurs intermédiaires garantit une racine dans cette moitié, et l'on remplace bb par mm. On conserve ainsi à chaque étape un intervalle contenant α\alpha, ce qui est l'INVARIANT de l'algorithme.

c)

La longueur après nn étapes vaut 12 n\frac{1}{2^{\,n}}. On veut 12 n≤10−3\frac{1}{2^{\,n}}\le 10^{-3}, soit 2 n≥10002^{\,n}\ge 1000 : comme 29=5122^{9}=512 et 210=10242^{10}=1024, il faut n=10n=10 étapes. Pour 10−610^{-6}, il faut 2 n≥1062^{\,n}\ge 10^{6}, et comme 219=524 2882^{19}=524\,288 et 220=1 048 5762^{20}=1\,048\,576, il faut n=20n=20 étapes. Autrement dit, TRIPLER la précision en nombre de décimales ne double même pas le travail : chaque étape gagne un facteur 22, donc environ 0,30{,}3 décimale.

d)

Le balayage de pas 10−610^{-6} sur [0 ;1][0\,;1] demanderait jusqu'à 10610^{6} tours, soit un million, contre 2020 pour la dichotomie : le rapport est de cinquante mille. La raison est structurelle : le balayage avance de façon ADDITIVE, la dichotomie progresse de façon MULTIPLICATIVE. En contrepartie, la dichotomie exige de connaître un intervalle où la fonction change de signe, alors que le balayage n'exige rien et trouve toutes les racines rencontrées. Le programme donne finalement 0,618<α<0,6200{,}618<\alpha<0{,}620, la valeur étant α≈0,6191\alpha\approx 0{,}6191.

Le fil : la précision d'un algorithme n'est jamais une question d'exécution, c'est une question de MAJORATION connue d'avance. Ici, b−a2 n\frac{b-a}{2^{\,n}} donne le nombre d'étapes avant même de lancer le programme.

Exercice 3 : Méthode des rectangles et encadrement d'une intégrale

On veut calculer I=∫01e−x2 dxI=\int_{0}^{1}e^{-x^{2}}\,dx. Cette fonction n'a pas de primitive exprimable avec les fonctions du programme : seule une méthode numérique permet d'en approcher la valeur.

On découpe [0 ;1][0\,;1] en nn intervalles de largeur 1n\frac{1}{n} et l'on somme les aires des rectangles appuyés sur l'extrémité gauche, puis sur l'extrémité droite.

  • a) Écrivez les deux programmes, rect_gauche(n) et rect_droite(n).
  • b) Justifiez que ces deux sommes ENCADRENT II, et donnez l'encadrement obtenu pour n=10n=10.
  • c) Exprimez l'écart entre les deux sommes en fonction de nn, puis déterminez nn pour que cet écart soit inférieur à 10−310^{-3}.
  • d) Quelle valeur approchée de II proposez-vous à partir de l'encadrement de la question b), et avec quelle précision ?

Tape tes réponses, la page te dit juste ou faux 0/4

b)
c)
d)
Voir la correction

Réponses

  • a) Deux boucles, sommes divisées par nn
  • b) 0,714605≤I≤0,7778170{,}714605\leq I\leq 0{,}777817
  • c) Écart 1−e−1n\frac{1-e^{-1}}{n} ; n=633n=633
  • d) I≈0,746211I\approx 0{,}746211, à 0,03160{,}0316 près garanti
a)

def rect_gauche(n): puis s = 0 puis for k in range(n): puis s = s + exp(-(k/n)**2) puis return s/n. Pour les rectangles à droite, seule la plage change : for k in range(1, n+1). Chaque rectangle a pour largeur 1n\frac{1}{n} et pour hauteur la valeur de ff à l'une des extrémités ; on met la division par nn en facteur à la fin plutôt que dans la boucle, ce qui économise nn divisions.

b)

La fonction x↦e−x2x\mapsto e^{-x^{2}} est strictement DÉCROISSANTE sur [0 ;1][0\,;1], puisque x↦−x2x\mapsto -x^2 y est décroissante et l'exponentielle croissante. Sur chaque sous-intervalle, la valeur à gauche est donc le maximum de ff et la valeur à droite son minimum : le rectangle de gauche contient l'aire sous la courbe, celui de droite est contenu dedans. Par somme, rect_droite(n)≤I≤rect_gauche(n)\text{rect\_droite}(n)\le I\le \text{rect\_gauche}(n). Pour n=10n=10 on obtient 0,714605≤I≤0,7778170{,}714605\le I\le 0{,}777817.

c)

Les deux sommes ont tous leurs termes communs sauf le premier de l'une et le dernier de l'autre : leur différence vaut 1n(f(0)−f(1))=1−e−1n≈0,632121n\frac{1}{n}\left(f(0)-f(1)\right)=\frac{1-e^{-1}}{n}\approx\frac{0{,}632121}{n}. Pour n=10n=10 cela donne 0,06320{,}0632, ce que confirme l'encadrement de b) ✓. On veut 0,632121n<10−3\frac{0{,}632121}{n}<10^{-3}, soit n>632,1n>632{,}1 : il faut donc n=633n=633 sous-intervalles. Ce chiffre est le point important de l'exercice : l'erreur des rectangles est proportionnelle à 1n\frac{1}{n}, donc gagner UNE décimale coûte DIX fois plus de travail.

d)

On propose le milieu de l'encadrement, 0,714605+0,7778172≈0,746211\frac{0{,}714605+0{,}777817}{2}\approx 0{,}746211, avec une précision au moins égale à la demi-largeur, soit 0,03160{,}0316. En réalité on fait beaucoup mieux : la valeur exacte est I≈0,746824I\approx 0{,}746824, donc l'erreur commise n'est que de 6,1×10−46{,}1\times 10^{-4}, cinquante fois meilleure que la garantie. Prendre le milieu de deux rectangles revient exactement à la méthode des TRAPÈZES de l'exercice 7, ce qui explique ce gain.

Le fil : l'encadrement n'est pas une commodité, c'est ce qui rend le résultat démontrable. On sait que II est entre deux nombres calculés, et l'écart entre eux, connu par une formule, dit à l'avance combien de rectangles il faut découper.

from math import exp

def rect_gauche(n):
    s = 0
    for k in range(n):
        s = s + exp(-(k/n)**2)
    return s/n

def rect_droite(n):
    s = 0
    for k in range(1, n+1):
        s = s + exp(-(k/n)**2)
    return s/n
0,20,40,60,810,20,40,60,811,21,41,6rectangles a gauche : 0,7778integrale : 0,7468f decroissante : les rectangles majorent

Exercice 4 : Méthode d'Euler et forme explicite

On considère l'équation différentielle y′=−2y+6y'=-2y+6 avec la condition initiale y(0)=1y(0)=1. La méthode d'Euler de pas hh construit la suite yk+1=yk+h(−2yk+6)y_{k+1}=y_k+h\left(-2y_k+6\right).

  • a) Écrivez un programme qui affiche y(1)y(1) approché par la méthode d'Euler de pas h=0,1h=0{,}1, et donnez la valeur obtenue.
  • b) Montrez que yn=3−2(1−2h)ny_n=3-2\left(1-2h\right)^{n}.
  • c) Résolvez exactement l'équation différentielle et comparez à la valeur du a), puis à celle obtenue avec h=0,01h=0{,}01.
  • d) Que devient (1−2n)n\left(1-\frac{2}{n}\right)^{n} quand nn tend vers +∞+\infty ? Quel résultat cela démontre-t-il sur la méthode ?

Tape tes réponses, la page te dit juste ou faux 0/5

a)
c)
d)
Voir la correction

Réponses

  • a) y(1)≈2,78525y(1)\approx 2{,}78525
  • b) yn=3−2(1−2h)ny_{n}=3-2(1-2h)^{n}
  • c) y(1)=3−2e−2≈2,729329y(1)=3-2e^{-2}\approx 2{,}729329 ; Euler h=0,01h=0{,}01 : 2,7347612{,}734761
  • d) Limite e−2e^{-2} : Euler converge et surestime
a)

h = 0.1 puis y = 1 puis for k in range(10): puis y = y + h*(-2*y + 6) puis print(y). Il faut bien 1010 tours pour aller de t=0t=0 à t=1t=1 avec un pas de 0,10{,}1, soit 1h\frac{1}{h} tours. Le programme affiche environ 2,785252{,}78525.

b)

La relation se réécrit yk+1=yk(1−2h)+6hy_{k+1}=y_k(1-2h)+6h : c'est une suite ARITHMÉTICO-GÉOMÉTRIQUE de raison q=1−2hq=1-2h. Son point fixe LL vérifie L=L(1−2h)+6hL=L(1-2h)+6h, soit 2hL=6h2hL=6h et L=3L=3, valeur indépendante de hh, ce qui est rassurant. En posant zk=yk−3z_k=y_k-3, on obtient zk+1=zk(1−2h)z_{k+1}=z_k(1-2h) : la suite (zk)(z_k) est géométrique de raison 1−2h1-2h et de premier terme z0=1−3=−2z_0=1-3=-2. D'où zn=−2(1−2h)nz_n=-2(1-2h)^{n} puis yn=3−2(1−2h)ny_n=3-2(1-2h)^{n}. Pour h=0,1h=0{,}1 et n=10n=10 : y10=3−2×0,810=3−2×0,1073742≈2,785252y_{10}=3-2\times 0{,}8^{10}=3-2\times 0{,}1073742\approx 2{,}785252 ✓, ce qui confirme l'affichage sans exécuter le programme.

c)

Les solutions de y′=−2y+6y'=-2y+6 s'écrivent y(t)=Ce−2t+3y(t)=Ce^{-2t}+3, la constante 33 étant la solution particulière constante. La condition y(0)=1y(0)=1 donne C+3=1C+3=1, soit C=−2C=-2, d'où y(t)=3−2e−2ty(t)=3-2e^{-2t}. Ainsi y(1)=3−2e−2≈2,729329y(1)=3-2e^{-2}\approx 2{,}729329. Euler avec h=0,1h=0{,}1 donnait 2,7852522{,}785252, soit une erreur de 5,6×10−25{,}6\times 10^{-2}. Avec h=0,01h=0{,}01, c'est-à-dire 100100 tours, on obtient 3−2×0,98100≈2,7347613-2\times 0{,}98^{100}\approx 2{,}734761, soit une erreur de 5,4×10−35{,}4\times 10^{-3} : diviser le pas par dix a divisé l'erreur par dix. L'erreur de la méthode d'Euler est proportionnelle au pas.

d)

En posant n=1hn=\frac{1}{h}, la valeur d'Euler en t=1t=1 vaut 3−2(1−2n)n3-2\left(1-\frac{2}{n}\right)^{n}. Or (1−2n)n=exp⁡(nln⁡(1−2n))\left(1-\frac{2}{n}\right)^{n}=\exp\left(n\ln\left(1-\frac{2}{n}\right)\right), et comme ln⁡(1+u)∼u\ln(1+u)\sim u en 00, l'exposant tend vers −2-2 : la limite est e−2e^{-2}. La méthode d'Euler CONVERGE donc vers la solution exacte quand le pas tend vers zéro, ce qui n'était pas évident a priori. On voit aussi le SENS de l'erreur : puisque 1−x<e−x1-x<e^{-x} pour x>0x>0, on a (1−2h)n<e−2(1-2h)^{n}<e^{-2}, donc yn>y(1)y_n>y(1), et Euler surestime toujours ici.

Le fil : la méthode d'Euler n'est pas une boîte noire, c'est une suite arithmético-géométrique dont on sait tout écrire. La forme explicite donne la valeur, l'ordre de l'erreur et le sens du biais, sans lancer aucun programme.

h = 0.1
y = 1
for k in range(10):
    y = y + h*(-2*y + 6)
print(y)

Exercice 5 : Loi binomiale sans factorielle

Une variable aléatoire XX suit la loi binomiale de paramètres n=50n=50 et p=0,3p=0{,}3. On veut calculer des probabilités en Python sans passer par des factorielles gigantesques.

  • a) Démontrez la relation (nk+1)=(nk)×n−kk+1\binom{n}{k+1}=\binom{n}{k}\times\frac{n-k}{k+1}.
  • b) Écrivez une fonction proba(n, p, k) qui renvoie P(X=k)P(X=k) en utilisant cette relation, et donnez P(X=15)P(X=15) au millionième.
  • c) Écrivez un programme qui calcule P(X≥20)P(X\ge 20) et donnez sa valeur.
  • d) Pourquoi évite-t-on d'écrire directement n!k! (n−k)!\frac{n!}{k!\,(n-k)!} lorsque nn vaut plusieurs centaines ?

Tape tes réponses, la page te dit juste ou faux 0/3

b)
c)
d)
Voir la correction

Réponses

  • a) Quotient des factorielles : n−kk+1\frac{n-k}{k+1}
  • b) P(X=15)≈0,122347P(X=15)\approx 0{,}122347
  • c) P(X≥20)≈0,084803P(X\geq 20)\approx 0{,}084803
  • d) Les factorielles dépassent 1030810^{308}
a)

On part de la définition : (nk+1)=n!(k+1)! (n−k−1)!\binom{n}{k+1}=\frac{n!}{(k+1)!\,(n-k-1)!} et (nk)=n!k! (n−k)!\binom{n}{k}=\frac{n!}{k!\,(n-k)!}. Le quotient vaut donc (nk+1)(nk)=k! (n−k)!(k+1)! (n−k−1)!\frac{\binom{n}{k+1}}{\binom{n}{k}}=\frac{k!\,(n-k)!}{(k+1)!\,(n-k-1)!}. Or (k+1)!=(k+1)×k!(k+1)!=(k+1)\times k! et (n−k)!=(n−k)×(n−k−1)!(n-k)!=(n-k)\times(n-k-1)!, donc tout se simplifie et il reste n−kk+1\frac{n-k}{k+1}, d'où la relation ✓.

b)

def proba(n, p, k): puis c = 1 puis for i in range(k): puis c = c*(n - i)/(i + 1) puis return c*p**k*(1 - p)**(n - k). La boucle applique kk fois la relation de a) en partant de (n0)=1\binom{n}{0}=1. On obtient P(X=15)≈0,122347P(X=15)\approx 0{,}122347. La valeur k=15k=15 est aussi l'espérance, E(X)=np=50×0,3=15E(X)=np=50\times 0{,}3=15 : c'est bien la valeur la plus probable, et pourtant elle ne se produit qu'une fois sur huit environ.

c)

s = 0 puis for k in range(20, 51): puis s = s + proba(50, 0.3, k) puis print(s). On trouve P(X≥20)≈0,084803P(X\ge 20)\approx 0{,}084803. On peut aussi écrire P(X≥20)=1−P(X≤19)P(X\ge 20)=1-P(X\le 19), ce qui demande vingt termes au lieu de trente et un : à résultat égal, on choisit la somme la plus courte. Attention à la borne : range(20, 51) doit aller jusqu'à 5050 INCLUS, sans quoi il manque un terme.

d)

Parce que les factorielles explosent : 200!200! compte plus de trois cent soixante chiffres. Python sait manipuler de tels entiers exactement, mais lentement, et surtout le passage aux flottants pour multiplier par pkp^{k} provoque un dépassement de capacité, la plage des flottants s'arrêtant vers 1030810^{308}. La formule récursive, elle, ne manipule que des nombres de taille raisonnable, car elle alterne multiplications et divisions : le coefficient reste toujours proche de sa valeur finale. C'est la même idée qu'à l'exercice 1 avec la factorielle mise à jour d'un tour à l'autre.

Le fil : une formule mathématiquement correcte peut être numériquement inutilisable. La réécrire en récurrence ne change rien au résultat exact, mais rend le calcul possible, et c'est exactement ce que le programme de Terminale appelle un algorithme efficace.

def proba(n, p, k):
    c = 1
    for i in range(k):
        c = c*(n - i)/(i + 1)
    return c*p**k*(1 - p)**(n - k)

s = 0
for k in range(20, 51):
    s = s + proba(50, 0.3, k)
print(s)

Partie B : problèmes et raisonnement (/50)

Exercice 6 : Méthode de Newton et convexité

Pour approcher 7\sqrt{7}, on applique la méthode de Newton à la fonction f(x)=x2−7f(x)=x^2-7 : partant de x0=3x_0=3, on remplace à chaque étape xkx_k par l'abscisse du point où la TANGENTE à la courbe en xkx_k coupe l'axe des abscisses.

  • a) Montrez que la relation de récurrence s'écrit xk+1=12(xk+7xk)x_{k+1}=\frac{1}{2}\left(x_k+\frac{7}{x_k}\right), et écrivez le programme correspondant.
  • b) Calculez x1x_1, x2x_2 et x3x_3, puis comparez à 7≈2,645751311\sqrt{7}\approx 2{,}645751311. Combien de décimales exactes gagne-t-on par étape ?
  • c) La fonction ff est convexe sur ]0 ;+∞[]0\,;+\infty[. Que peut-on en déduire sur la position de la tangente, et donc sur le sens de variation de la suite ?
  • d) Combien d'étapes de dichotomie faudrait-il, en partant de [2 ;3][2\,;3], pour atteindre la précision de x3x_3 ?

Tape tes réponses, la page te dit juste ou faux 0/5

b)
c)
d)
Voir la correction

Réponses

  • a) xk+1=12(xk+7xk)x_{k+1}=\frac{1}{2}\left(x_{k}+\frac{7}{x_{k}}\right)
  • b) 83\frac{8}{3}, 2,6458332{,}645833, 2,6457513122{,}645751312 : décimales doublées
  • c) Suite décroissante minorée par 7\sqrt{7}
  • d) 3030 étapes de dichotomie
a)

La tangente en xkx_k a pour équation y=f′(xk)(x−xk)+f(xk)y=f'(x_k)(x-x_k)+f(x_k), soit y=2xk(x−xk)+xk2−7y=2x_k(x-x_k)+x_k^2-7. Elle coupe l'axe des abscisses lorsque y=0y=0, donc x=xk−xk2−72xk=2xk2−xk2+72xk=xk2+72xk=12(xk+7xk)x=x_k-\frac{x_k^2-7}{2x_k}=\frac{2x_k^2-x_k^2+7}{2x_k}=\frac{x_k^2+7}{2x_k}=\frac{1}{2}\left(x_k+\frac{7}{x_k}\right) ✓. Le programme s'écrit x = 3 puis for k in range(3): puis x = (x + 7/x)/2 puis print(x). On reconnaît la moyenne de xkx_k et de 7xk\frac{7}{x_k}, deux nombres dont le produit vaut toujours 77 : si l'un est trop grand, l'autre est trop petit, et leur moyenne est meilleure que les deux.

b)

x1=12(3+73)=12×163=83≈2,666667x_1=\frac{1}{2}\left(3+\frac{7}{3}\right)=\frac{1}{2}\times\frac{16}{3}=\frac{8}{3}\approx 2{,}666667, puis x2≈2,645833x_2\approx 2{,}645833, puis x3≈2,645751312x_3\approx 2{,}645751312. Les erreurs valent respectivement 2,1×10−22{,}1\times 10^{-2}, 8,2×10−58{,}2\times 10^{-5} et 1,2×10−91{,}2\times 10^{-9} : le nombre de décimales exactes DOUBLE à chaque étape. C'est la convergence dite quadratique, sans commune mesure avec la dichotomie, qui n'en gagne que 0,30{,}3 par étape.

c)

f′′(x)=2>0f''(x)=2>0, donc ff est convexe et sa courbe est au-DESSUS de chacune de ses tangentes. En particulier, la tangente en xkx_k coupe l'axe des abscisses AVANT que la courbe ne le fasse, du côté où l'on vient : pour xk>7x_k>\sqrt7, on obtient xk+1>7x_{k+1}>\sqrt7. La suite reste donc minorée par 7\sqrt7 à partir du rang 00, et l'on vérifie qu'elle est décroissante : xk−xk+1=xk2−72xk>0x_k-x_{k+1}=\frac{x_k^2-7}{2x_k}>0 dès que xk>7x_k>\sqrt7. Décroissante et minorée, elle converge, et sa limite LL vérifie L=12(L+7L)L=\frac{1}{2}\left(L+\frac{7}{L}\right), donc L2=7L^2=7 et L=7L=\sqrt7. La convexité est ce qui rend la démonstration possible.

d)

La dichotomie sur [2 ;3][2\,;3] donne après nn étapes une précision de 12 n\frac{1}{2^{\,n}}. Pour atteindre 1,2×10−91{,}2\times 10^{-9}, il faut 2 n≥11,2×10−9≈8,3×1082^{\,n}\ge\frac{1}{1{,}2\times 10^{-9}}\approx 8{,}3\times 10^{8}, soit n=30n=30 étapes, contre TROIS pour Newton. La contrepartie est que Newton exige la dérivée et un point de départ correct, alors que la dichotomie ne demande qu'un changement de signe et ne peut pas échouer.

Le fil : ici encore l'algorithme seul ne prouve rien. C'est la convexité qui garantit que la suite reste du bon côté, et c'est la monotonie plus la minoration qui démontrent la convergence. Le programme se contente d'afficher les décimales.

x = 3
for k in range(3):
    x = (x + 7/x)/2
print(x)
22,22,42,62,833,23,4−4−3−2−11234tangente en x0 = 3elle coupe l'axe en x1 = 8/3courbe au-dessus de sa tangente

Exercice 7 : Compléter un programme : la méthode des trapèzes

On reprend I=∫01e−x2 dxI=\int_{0}^{1}e^{-x^{2}}\,dx. La méthode des trapèzes remplace chaque rectangle par le trapèze dont les deux côtés verticaux valent ff aux deux extrémités du sous-intervalle.

Le programme suivant la met en oeuvre. Trois éléments sont incomplets.

La figure représente quatre trapèzes, pour n=4n=4.

0,250,50,7510,250,50,751y = e^(−x²)
from math import exp

def f(x):
    return exp(-x*x)

def trapezes(n):
    h = 1/n
    s = ...
    for k in range(1, n):
        s = s + ...
    return ...

print(trapezes(10))
  • a) Complétez les trois éléments du programme, en justifiant l'aire d'un trapèze.
  • b) Donnez la valeur obtenue pour n=10n=10, sachant que I≈0,74682413I\approx 0{,}74682413. Quelle est l'erreur ?
  • c) La valeur pour n=20n=20 vaut 0,746670840{,}74667084. Comparez les deux erreurs et concluez sur l'ordre de la méthode.
  • d) Montrez que la méthode des trapèzes donne exactement la moyenne des deux sommes de rectangles de l'exercice 3. Pourquoi est-elle bien meilleure que chacune d'elles ?

Tape tes réponses, la page te dit juste ou faux 0/5

a)
b)
c)
d)
Voir la correction

Réponses

  • a) s = (f(0) + f(1))/2, s = s + f(k*h), return s*h
  • b) 0,746210800{,}74621080, erreur ≈6,13×10−4\approx 6{,}13\times 10^{-4}
  • c) Erreur divisée par 44 : ordre h2h^{2}
  • d) Moyenne des rectangles : 0,7462110{,}746211
a)

Un trapèze de hauteur hh et de bases f(xk)f(x_k) et f(xk+1)f(x_{k+1}) a pour aire h×f(xk)+f(xk+1)2h\times\frac{f(x_k)+f(x_{k+1})}{2}. En sommant sur tous les sous-intervalles, chaque valeur intérieure apparaît DEUX fois, une fois comme base droite et une fois comme base gauche, alors que f(0)f(0) et f(1)f(1) n'apparaissent qu'une fois. On complète donc par s = (f(0) + f(1))/2, puis s = s + f(k*h) dans la boucle, puis return s*h. C'est la formule classique : les extrémités comptent pour moitié, les points intérieurs pour un.

b)

Le programme affiche 0,746210800{,}74621080. L'erreur vaut ∣0,74621080−0,74682413∣≈6,13×10−4\left|0{,}74621080-0{,}74682413\right|\approx 6{,}13\times 10^{-4}. À comparer avec l'exercice 3 : les rectangles à gauche donnaient 0,7778170{,}777817, soit une erreur de 3,1×10−23{,}1\times 10^{-2}, cinquante fois plus grande pour exactement le même nombre d'évaluations de ff.

c)

Pour n=20n=20, l'erreur vaut ∣0,74667084−0,74682413∣≈1,53×10−4\left|0{,}74667084-0{,}74682413\right|\approx 1{,}53\times 10^{-4}. Le rapport des deux erreurs vaut 6,13×10−41,53×10−4≈4\frac{6{,}13\times 10^{-4}}{1{,}53\times 10^{-4}}\approx 4 : DOUBLER le nombre de sous-intervalles a divisé l'erreur par QUATRE, et non par deux. L'erreur des trapèzes est donc proportionnelle à h2h^2, alors que celle des rectangles est proportionnelle à hh. Pour gagner une décimale, il suffit de multiplier nn par un peu plus de trois, contre dix pour les rectangles.

d)

La somme des rectangles à gauche vaut h(f(x0)+f(x1)+⋯+f(xn−1))h\left(f(x_0)+f(x_1)+\dots+f(x_{n-1})\right) et celle des rectangles à droite h(f(x1)+⋯+f(xn))h\left(f(x_1)+\dots+f(x_n)\right). Leur moyenne vaut h(f(x0)+f(xn)2+f(x1)+⋯+f(xn−1))h\left(\frac{f(x_0)+f(x_n)}{2}+f(x_1)+\dots+f(x_{n-1})\right), ce qui est exactement la formule des trapèzes ✓. Pour n=10n=10 on retrouve bien 0,777817+0,7146052=0,746211\frac{0{,}777817+0{,}714605}{2}=0{,}746211. Le gain s'explique simplement : les deux sommes de rectangles se trompent en sens CONTRAIRES, l'une par excès et l'autre par défaut, et d'à peu près la même quantité. En prenant la moyenne, les deux erreurs se compensent en grande partie, et il ne reste que l'effet de la COURBURE de ff, d'où l'ordre h2h^2.

Le fil : améliorer un algorithme ne veut pas dire faire plus de tours, mais mieux utiliser les mêmes valeurs. Les trapèzes n'évaluent pas ff plus souvent que les rectangles, ils se contentent de la combiner intelligemment.

from math import exp

def f(x):
    return exp(-x*x)

def trapezes(n):
    h = 1/n
    s = (f(0) + f(1))/2
    for k in range(1, n):
        s = s + f(k*h)
    return s*h

print(trapezes(10))

Exercice 8 : Cinq affirmations à corriger

Chacune des cinq affirmations suivantes est FAUSSE. Dites pourquoi, puis énoncez la version correcte.

  • a) « Si un programme de dichotomie renvoie un encadrement, c'est la preuve que la fonction est continue sur l'intervalle. »
  • b) « La méthode d'Euler donne la valeur exacte de la solution dès que le pas est assez petit. »
  • c) « Pour la méthode des rectangles comme pour celle des trapèzes, doubler nn divise l'erreur par quatre. »
  • d) « Pour calculer P(X=k)P(X=k) d'une loi binomiale avec n=500n=500, on écrit directement le quotient de factorielles. »
  • e) « La méthode de Newton converge quel que soit le point de départ. »

Tape tes réponses, la page te dit juste ou faux 0/5

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) Faux : la continuité est une hypothèse
  • b) Faux : Euler converge sans être exacte
  • c) Faux : rectangles en hh, trapèzes en h2h^{2}
  • d) Faux : coefficients de proche en proche
  • e) Faux : Newton peut diverger
a)

FAUX. Le programme ne teste RIEN d'autre que des signes : il divise l'intervalle en deux et compare des produits, opérations qui ont un résultat même pour une fonction discontinue. Sur x↦1x−0,5x\mapsto\frac{1}{x-0{,}5}, qui change de signe en 0,50{,}5 sans s'y annuler, la dichotomie sur [0 ;1][0\,;1] renverrait un encadrement de 0,50{,}5, où la fonction n'est même pas définie. Version correcte : « la continuité est une HYPOTHÈSE à vérifier avant d'appliquer le théorème des valeurs intermédiaires, et c'est lui, non le programme, qui garantit l'existence d'une racine ».

b)

FAUX. Pour tout pas h>0h>0 fixé, la méthode d'Euler commet une erreur non nulle : l'exercice 4 la calcule exactement, yn=3−2(1−2h)ny_n=3-2(1-2h)^{n} contre 3−2e−23-2e^{-2}. Version correcte : « la méthode d'Euler CONVERGE vers la solution exacte quand le pas tend vers 00, mais tout calcul effectif se fait avec un pas fixé, donc avec une erreur non nulle ». Diviser le pas par dix divise l'erreur par dix, sans jamais l'annuler.

c)

FAUX, seuls les trapèzes ont ce comportement. L'erreur des rectangles est proportionnelle au pas hh, donc doubler nn ne la divise que par DEUX ; celle des trapèzes est proportionnelle à h2h^2, donc doubler nn la divise par quatre. C'est exactement ce qu'on mesure à l'exercice 7. Version correcte : « rectangles, erreur en hh ; trapèzes, erreur en h2h^2 ». Le mot d'ordre du chapitre est là : on ne compare pas deux méthodes sur un seul essai, on regarde comment l'erreur RÉAGIT quand on raffine.

d)

FAUX. 500!500! est un entier de plus de mille chiffres ; Python le calcule exactement, mais le convertir en flottant pour le multiplier par pkp^{k} dépasse la capacité des nombres à virgule flottante, dont le maximum est de l'ordre de 1030810^{308}. Version correcte : « on calcule les coefficients binomiaux de proche en proche par (nk+1)=(nk)×n−kk+1\binom{n}{k+1}=\binom{n}{k}\times\frac{n-k}{k+1}, ce qui garde tous les nombres manipulés dans une plage raisonnable ».

e)

FAUX. Newton peut diverger, osciller, ou s'arrêter net si f′(xk)=0f'(x_k)=0, puisque l'on divise par la dérivée. Sur f(x)=x2−7f(x)=x^2-7 partant de x0=0x_0=0, la tangente est horizontale et ne coupe jamais l'axe. Version correcte : « la convergence de Newton est GARANTIE sous des hypothèses de convexité et de bon choix du point de départ, comme à l'exercice 6, mais n'a rien d'automatique ». C'est le prix de sa rapidité, là où la dichotomie, plus lente, ne peut pas échouer.

Ces cinq erreurs disent la même chose : un algorithme ne démontre rien par lui-même. Il produit des nombres, et ce sont les théorèmes d'analyse, valeurs intermédiaires, convexité, majoration du reste, qui disent ce que ces nombres valent.

Exercice 9 : Charge d'un condensateur et méthode d'Euler

Un condensateur de capacité C=1,0C=1{,}0 μ\muF se charge à travers une résistance R=2,0R=2{,}0 kΩ\Omega sous une tension E=5,0E=5{,}0 V. La tension uu à ses bornes vérifie τ u′+u=E\tau\,u'+u=E avec τ=RC\tau=RC, et u(0)=0u(0)=0.

On approche cette évolution par la méthode d'Euler : uk+1=uk+h E−ukτu_{k+1}=u_k+h\,\frac{E-u_k}{\tau}.

  • a) Calculez τ\tau en millisecondes, puis écrivez le programme donnant u(τ)u(\tau) avec un pas h=0,2h=0{,}2 ms.
  • b) Montrez que un=E(1−(1−hτ)n)u_n=E\left(1-\left(1-\frac{h}{\tau}\right)^{n}\right), et donnez la valeur obtenue au a).
  • c) Résolvez exactement l'équation différentielle, donnez u(τ)u(\tau) et comparez aux résultats d'Euler pour h=0,2h=0{,}2 ms puis h=0,02h=0{,}02 ms.
  • d) Au bout de combien de temps la tension atteint-elle 99%99\% de EE ? Dans quel sens la méthode d'Euler se trompe-t-elle ici, et pourquoi ?

Tape tes réponses, la page te dit juste ou faux 0/6

a)
b)
c)
d)
Voir la correction

Réponses

  • a) τ=2,0\tau=2{,}0 ms, 1010 tours
  • b) un=E(1−qn)u_{n}=E(1-q^{n}) ; u10≈3,2566u_{10}\approx 3{,}2566 V
  • c) u(τ)≈3,1606u(\tau)\approx 3{,}1606 V ; Euler h=0,02h=0{,}02 : 3,16983{,}1698 V
  • d) t≈9,2t\approx 9{,}2 ms ; Euler surestime
a)

τ=RC=2,0×103×1,0×10−6=2,0×10−3\tau=RC=2{,}0\times 10^{3}\times 1{,}0\times 10^{-6}=2{,}0\times 10^{-3} s, soit 2,02{,}0 ms. Il faut donc 2,00,2=10\frac{2{,}0}{0{,}2}=10 tours pour aller de 00 à τ\tau. Le programme s'écrit tau = 2.0 puis h = 0.2 puis u = 0 puis for k in range(10): puis u = u + h*(5 - u)/tau puis print(u), toutes les durées étant exprimées en millisecondes, ce qui est licite puisque seul le RAPPORT hτ\frac{h}{\tau} intervient.

b)

La relation se réécrit uk+1=uk(1−hτ)+hEτu_{k+1}=u_k\left(1-\frac{h}{\tau}\right)+\frac{hE}{\tau}, suite arithmético-géométrique de raison q=1−hτq=1-\frac{h}{\tau}. Son point fixe vérifie L=Lq+hEτL=Lq+\frac{hE}{\tau}, soit Lhτ=hEτL\frac{h}{\tau}=\frac{hE}{\tau} et L=EL=E, ce qui est physiquement attendu : le condensateur chargé atteint la tension du générateur. En posant zk=uk−Ez_k=u_k-E, on obtient zk+1=qzkz_{k+1}=qz_k avec z0=−Ez_0=-E, donc zn=−Eq nz_n=-Eq^{\,n} et un=E(1−q n)u_n=E\left(1-q^{\,n}\right) ✓. Pour h=0,2h=0{,}2 ms : q=0,9q=0{,}9 et u10=5(1−0,910)=5×0,651322≈3,2566u_{10}=5\left(1-0{,}9^{10}\right)=5\times 0{,}651322\approx 3{,}2566 V.

c)

L'équation u′=E−uτu'=\frac{E-u}{\tau} a pour solutions u(t)=E+Ke−t/τu(t)=E+Ke^{-t/\tau}, et la condition u(0)=0u(0)=0 donne K=−EK=-E, d'où u(t)=E(1−e−t/τ)u(t)=E\left(1-e^{-t/\tau}\right). Donc u(τ)=5(1−e−1)≈3,1606u(\tau)=5\left(1-e^{-1}\right)\approx 3{,}1606 V, ce qui est le résultat classique : à t=τt=\tau, le condensateur est chargé à 63%63\%. Euler avec h=0,2h=0{,}2 ms donnait 3,25663{,}2566 V, soit une erreur de 9,6×10−29{,}6\times 10^{-2} V ; avec h=0,02h=0{,}02 ms, c'est-à-dire 100100 tours, on obtient 5(1−0,99100)≈3,16985\left(1-0{,}99^{100}\right)\approx 3{,}1698 V, soit une erreur de 9,2×10−39{,}2\times 10^{-3} V. L'erreur a bien été divisée par dix comme le pas.

d)

On résout E(1−e−t/τ)=0,99EE\left(1-e^{-t/\tau}\right)=0{,}99E, soit e−t/τ=0,01e^{-t/\tau}=0{,}01, donc tτ=ln⁡100\frac{t}{\tau}=\ln 100 et t=τln⁡100≈2,0×4,605≈9,2t=\tau\ln 100\approx 2{,}0\times 4{,}605\approx 9{,}2 ms. C'est la règle usuelle en électronique : la charge est pratiquement terminée au bout de cinq constantes de temps. Quant au sens de l'erreur, Euler SURESTIME la tension : puisque 1−x<e−x1-x<e^{-x} pour x>0x>0, on a q n=(1−hτ)n<e−1q^{\,n}=\left(1-\frac{h}{\tau}\right)^{n}<e^{-1}, donc un>u(τ)u_n>u(\tau). L'explication physique est la même qu'en radioactivité : sur chaque pas, Euler applique la vitesse de charge du DÉBUT de l'intervalle, or cette vitesse diminue à mesure que uu se rapproche de EE. On charge donc trop vite.

Le fil : une équation différentielle linéaire du premier ordre et une suite arithmético-géométrique sont le même objet, l'une continue et l'autre discrète. Passer de l'une à l'autre donne la valeur, l'ordre de l'erreur et son signe, ce qu'aucune exécution de programme ne fournirait.

tau = 2.0
h = 0.2
u = 0
for k in range(10):
    u = u + h*(5 - u)/tau
print(u)
123456789100,511,522,533,544,555,5E = 5,0 Vu(tau) = 3,16 V soit 63 % de Epoints : Euler, pas de 0,2 ms

Exercice 10 : Problème de synthèse : suivi cinétique d'une réaction

On suit la disparition d'un réactif AA par spectrophotométrie. On relève la concentration en mol/L aux instants suivants, exprimés en minutes : t = [0, 10, 20, 30, 40] et c = [0.100, 0.061, 0.037, 0.022, 0.014].

On veut décider si la réaction est d'ordre 11, c'est-à-dire si dcdt=−k c\frac{dc}{dt}=-k\,c, puis en déduire la constante de vitesse et le temps de demi-réaction.

10203040500,020,040,060,080,10,12t (min)c (mol/L)
  • a) Écrivez un programme qui affiche les logarithmes népériens des concentrations puis leurs écarts successifs. Que constate-t-on, et que peut-on en conclure ?
  • b) Déduisez-en la constante de vitesse kk à partir des valeurs extrêmes, puis le temps de demi-réaction t1/2t_{1/2}.
  • c) La quantité de AA consommée par litre entre 00 et 4040 min vaut ∫040k c(t) dt\int_{0}^{40}k\,c(t)\,dt. Calculez-la par la méthode des trapèzes sur les cinq points, et comparez à c(0)−c(40)c(0)-c(40).
  • d) L'écart trouvé au c) est-il un défaut des mesures ou de la méthode ? Dans quel sens se trompe la méthode des trapèzes ici ?

Tape tes réponses, la page te dit juste ou faux 0/5

a)
b)
c)
d)
Voir la correction

Réponses

  • a) Écarts de ln⁡c\ln c presque constants : ordre 11
  • b) k≈0,0492k\approx 0{,}0492 min−1^{-1}, t1/2≈14,1t_{1/2}\approx 14{,}1 min
  • c) Trapèzes : ≈0,0870\approx 0{,}0870 mol/L contre 0,0860{,}086
  • d) Défaut de méthode : surestimation par convexité
a)

from math import log puis L = [] puis for x in c: puis L.append(log(x)), puis une seconde boucle for i in range(1, len(L)): puis print(L[i] - L[i-1]). On obtient les logarithmes −2,3026-2{,}3026, −2,7969-2{,}7969, −3,2968-3{,}2968, −3,8167-3{,}8167, −4,2687-4{,}2687, et les écarts successifs −0,4943-0{,}4943, −0,5000-0{,}5000, −0,5199-0{,}5199, −0,4520-0{,}4520. Ces écarts sont pratiquement CONSTANTS, aux incertitudes de mesure près : ln⁡c\ln c est donc une fonction affine du temps, ce qui caractérise l'ordre 11. En effet, c(t)=c0e−ktc(t)=c_0e^{-kt} donne ln⁡c(t)=ln⁡c0−kt\ln c(t)=\ln c_0-kt, une droite de pente −k-k. Un ordre 22 aurait donné 1c\frac{1}{c} affine, et c'est ce test de linéarisation, plutôt que l'allure de la courbe, qui tranche.

b)

La pente vaut ln⁡c(40)−ln⁡c(0)40=−4,2687+2,302640=−1,966140≈−0,04915\frac{\ln c(40)-\ln c(0)}{40}=\frac{-4{,}2687+2{,}3026}{40}=\frac{-1{,}9661}{40}\approx -0{,}04915, donc k≈0,0492k\approx 0{,}0492 min−1^{-1}. Le temps de demi-réaction vérifie c(t1/2)=c02c\left(t_{1/2}\right)=\frac{c_0}{2}, soit e−kt1/2=12e^{-k t_{1/2}}=\frac{1}{2} et t1/2=ln⁡2k≈0,69310,04915≈14,1t_{1/2}=\frac{\ln 2}{k}\approx\frac{0{,}6931}{0{,}04915}\approx 14{,}1 min. Ce résultat est cohérent avec le tableau : la concentration passe de 0,1000{,}100 à 0,0500{,}050 entre les relevés de 1010 et 2020 minutes. Pour un ordre 11, t1/2t_{1/2} ne dépend PAS de la concentration initiale, propriété que l'on vérifie ici en constatant que la concentration est encore divisée par deux, à peu près, entre 1414 et 2828 minutes.

c)

Les valeurs de la vitesse v=kcv=kc valent 0,0049150{,}004915, 0,0029980{,}002998, 0,0018190{,}001819, 0,0010810{,}001081 et 0,0006880{,}000688 mol/(L⋅\cdotmin). La formule des trapèzes avec h=10h=10 min donne 10×(0,004915+0,0006882+0,002998+0,001819+0,001081)=10×0,008700≈0,087010\times\left(\frac{0{,}004915+0{,}000688}{2}+0{,}002998+0{,}001819+0{,}001081\right)=10\times 0{,}008700\approx 0{,}0870 mol/L. La valeur attendue est c(0)−c(40)=0,100−0,014=0,086c(0)-c(40)=0{,}100-0{,}014=0{,}086 mol/L. L'écart relatif vaut 0,0870−0,0860,086≈1,2%\frac{0{,}0870-0{,}086}{0{,}086}\approx 1{,}2\%, ce qui valide à la fois le modèle et l'intégration.

d)

C'est essentiellement un défaut de la MÉTHODE, et son sens est prévisible. La fonction t↦kc0e−ktt\mapsto kc_0e^{-kt} est convexe, puisque sa dérivée seconde k3c0e−ktk^3c_0e^{-kt} est positive : sa courbe est donc au-dessous de chacune de ses cordes, et chaque trapèze, construit sur une corde, RECOUVRE l'aire réelle. La méthode surestime, ce que l'on constate ✓. Un pas de 1010 minutes est d'ailleurs grossier face à un temps de demi-réaction de 1414 minutes : avec des relevés toutes les 55 minutes, l'erreur serait divisée par quatre, l'erreur des trapèzes étant proportionnelle au carré du pas comme à l'exercice 7. Les incertitudes de mesure, elles, jouent aussi, mais dans un sens imprévisible, alors que la convexité impose un biais systématique dans un seul sens.

Le fil de la série se referme ici : linéariser pour identifier le modèle, majorer pour garantir la précision, et connaître la convexité pour savoir DANS QUEL SENS on se trompe. Ces trois gestes sont ceux que l'épreuve de spécialité et celle de physique-chimie évaluent l'une comme l'autre.

from math import log

t = [0, 10, 20, 30, 40]
c = [0.100, 0.061, 0.037, 0.022, 0.014]
for i in range(1, len(c)):
    print(log(c[i]) - log(c[i-1]))

k = (log(c[0]) - log(c[4]))/40
print(k, log(2)/k)
1020304050−5−4,5−4−3,5−3−2,5−2ln c est affine en t : ordre 1pente -0,04915 : k = 0,0492 /min

Partie C : les classiques (/50)

Exercice 11 : La série harmonique et son seuil

On pose Hn=1+12+13+⋯+1n=∑k=1n1kH_{n}=1+\frac{1}{2}+\frac{1}{3}+\dots+\frac{1}{n}=\sum_{k=1}^{n}\frac{1}{k} pour n≥1n\geq 1. On admet que la suite (Hn)(H_{n}) tend vers +∞+\infty.

def seuil(A):
    n = 0
    H = 0
    while H <= A:
        n = n + 1
        H = H + 1/n
    return n
  • a) Calculez H4H_{4} sous forme de fraction irréductible.
  • b) Écrivez une fonction seuil(A) qui renvoie le plus petit entier nn tel que Hn>AH_{n}>A.
  • c) Que renvoient seuil(3) et seuil(5) ?
  • d) On admet que ln⁡(n+1)≤Hn≤1+ln⁡n\ln(n+1)\leq H_{n}\leq 1+\ln n. Déduisez-en un encadrement du plus petit nn tel que Hn>10H_{n}>10, et expliquez pourquoi le programme est alors peu adapté.

Tape tes réponses, la page te dit juste ou faux 0/6

a)
b)
c)
d)
Voir la correction

Réponses

  • a) H4=2512H_{4}=\frac{25}{12}
  • b) Boucle while H <= A, nn incrémenté avant d'ajouter 1n\frac{1}{n}
  • c) 1111 et 8383
  • d) Entre 8 1048\,104 et 22 02622\,026 (en fait 12 36712\,367)
a)

H4=1+12+13+14=12+6+4+312=2512≈2,083H_{4}=1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}=\frac{12+6+4+3}{12}=\frac{25}{12}\approx 2{,}083.

b)

Deux accumulateurs : n compte les termes, H accumule la somme. On ajoute un terme TANT QUE la somme ne dépasse pas le seuil : def seuil(A): puis n = 0 puis H = 0 puis while H <= A: puis n = n + 1 puis H = H + 1/n puis return n. L'ordre des deux lignes de la boucle compte : on incrémente nn AVANT d'ajouter 1n\frac{1}{n}, sinon on diviserait par zéro au premier tour.

c)

seuil(3) renvoie 1111, car H10≈2,929≤3H_{10}\approx 2{,}929\leq 3 et H11≈3,020>3H_{11}\approx 3{,}020>3. seuil(5) renvoie 8383, avec H83≈5,002H_{83}\approx 5{,}002. Passer de 33 à 55 multiplie déjà le nombre de termes par plus de sept.

d)

Si Hn>10H_{n}>10, alors 1+ln⁡n≥Hn>101+\ln n\geq H_{n}>10, donc ln⁡n>9\ln n>9 et n>e9≈8 103n>e^{9}\approx 8\,103. Inversement, dès que ln⁡(n+1)>10\ln(n+1)>10, c'est-à-dire n+1>e10≈22 026n+1>e^{10}\approx 22\,026, on a Hn>10H_{n}>10. Le seuil est donc compris entre 8 1048\,104 et 22 02622\,026 (il vaut en fait 12 36712\,367). Le programme s'en sort encore, mais pour Hn>50H_{n}>50 il faudrait de l'ordre de e50≈5×1021e^{50}\approx 5\times 10^{21} tours : des milliers d'années de calcul. La série diverge si lentement que le balayage devient inutilisable, et c'est l'encadrement par le logarithme qui répond.

Un algorithme de seuil ne termine que si la suite dépasse vraiment le seuil, ce qu'il faut DÉMONTRER avant de lancer la boucle : ici, c'est la divergence admise de (Hn)(H_{n}). Et même quand il termine, un encadrement mathématique permet souvent de prévoir le résultat, ou de savoir qu'on ne l'obtiendra pas en temps raisonnable.

Exercice 12 : La suite de Fibonacci dans une liste

On définit u0=1u_{0}=1, u1=1u_{1}=1 et, pour tout entier naturel nn, un+2=un+1+unu_{n+2}=u_{n+1}+u_{n}.

On complète le programme ci-dessous, qui construit la liste des termes de u0u_{0} à uNu_{N}.

def fibo(N):
    L = [1, 1]
    for n in range(2, N + 1):
        ...
    return L
  • a) Complétez la ligne manquante du programme.
  • b) Que valent u10u_{10} et u20u_{20} ?
  • c) Calculez u20u19\frac{u_{20}}{u_{19}} au millionième et comparez au nombre d'or φ=1+52\varphi=\frac{1+\sqrt{5}}{2}.
  • d) Que renvoie sum(fibo(9)), et vérifiez la relation u0+u1+⋯+u9=u11−1u_{0}+u_{1}+\dots+u_{9}=u_{11}-1.

Tape tes réponses, la page te dit juste ou faux 0/5

a)
b)
c)
d)
Voir la correction

Réponses

  • a) L.append(L[-1] + L[-2])
  • b) u10=89u_{10}=89, u20=10 946u_{20}=10\,946
  • c) ≈1,618034=φ\approx 1{,}618034=\varphi
  • d) 143=u11−1143=u_{11}-1
a)

La liste commence par [1, 1] et chaque nouveau terme est la somme des DEUX derniers : L.append(L[-1] + L[-2]). En Python, L[-1] désigne le dernier élément de la liste et L[-2] l'avant-dernier, ce qui évite de manipuler des indices.

b)

Les termes successifs sont 1,1,2,3,5,8,13,21,34,55,891, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 : u10=89u_{10}=89. En poursuivant, u19=6 765u_{19}=6\,765 et u20=10 946u_{20}=10\,946. Attention au décalage d'indice : la liste fibo(10) contient ONZE termes, de u0u_{0} à u10u_{10}.

c)

u20u19=10 9466 765≈1,618034\frac{u_{20}}{u_{19}}=\frac{10\,946}{6\,765}\approx 1{,}618034, et φ≈1,618034\varphi\approx 1{,}618034 : les six premières décimales coïncident. On peut montrer que si le rapport un+1un\frac{u_{n+1}}{u_{n}} converge vers ℓ>0\ell>0, alors ℓ=1+1ℓ\ell=1+\frac{1}{\ell}, soit ℓ2−ℓ−1=0\ell^{2}-\ell-1=0, dont la racine positive est exactement φ\varphi.

d)

fibo(9) est la liste de u0u_{0} à u9u_{9}, dont la somme vaut 1+1+2+3+5+8+13+21+34+55=1431+1+2+3+5+8+13+21+34+55=143. Et u11=144u_{11}=144, donc u11−1=143u_{11}-1=143 ✓. La relation se démontre par récurrence : si ∑k=0nuk=un+2−1\sum_{k=0}^{n}u_{k}=u_{n+2}-1, alors ∑k=0n+1uk=un+2−1+un+1=un+3−1\sum_{k=0}^{n+1}u_{k}=u_{n+2}-1+u_{n+1}=u_{n+3}-1.

Une liste Python permet de garder TOUS les termes, là où une boucle avec deux variables ne garde que les deux derniers. Le choix dépend de la question : pour une somme ou un tracé, la liste ; pour un seul terme de rang élevé, deux variables suffisent et économisent la mémoire.

def fibo(N):
    L = [1, 1]
    for n in range(2, N + 1):
        L.append(L[-1] + L[-2])
    return L

print(fibo(20)[20], sum(fibo(9)))

Exercice 13 : Estimer π par la méthode de Monte-Carlo

On choisit au hasard un point M(x ;y)M(x\,;y) dans le carré [0 ;1]×[0 ;1][0\,;1]\times[0\,;1], xx et yy étant tirés indépendamment et uniformément. On note pp la probabilité que MM soit dans le quart de disque de centre OO et de rayon 11, c'est-à-dire que x2+y2≤1x^{2}+y^{2}\leq 1.

M(x ; y)O11
from random import random

def estimation_pi(n):
    c = 0
    for k in range(n):
        x = random()
        y = random()
        ...
    return ...
  • a) Justifiez que p=π4p=\frac{\pi}{4} et donnez-en une valeur approchée au millième.
  • b) Complétez le programme pour qu'il renvoie une estimation de π\pi à partir de nn points.
  • c) Un essai avec n=10 000n=10\,000 donne 7 8367\,836 points dans le quart de disque. Quelle estimation de π\pi obtient-on ?
  • d) On note FnF_{n} la fréquence des points dans le quart de disque. D'après l'inégalité de concentration, P(∣Fn−p∣≥δ)≤p(1−p)nδ2P(|F_{n}-p|\geq\delta)\leq\frac{p(1-p)}{n\delta^{2}}. Quelle valeur de nn garantit P(∣Fn−p∣≥0,01)≤0,05P(|F_{n}-p|\geq 0{,}01)\leq 0{,}05 ?

Tape tes réponses, la page te dit juste ou faux 0/4

a)
b)
c)
d)
Voir la correction

Réponses

  • a) p=π4≈0,785p=\frac{\pi}{4}\approx 0{,}785
  • b) Compter les points avec x2+y2≤1x^{2}+y^{2}\leq 1, renvoyer 4*c/n
  • c) π≈3,1344\pi\approx 3{,}1344
  • d) n≥33 710n\geq 33\,710
a)

Le tirage étant uniforme dans le carré d'aire 11, la probabilité d'une zone est son aire. Le quart de disque de rayon 11 a pour aire π×124=π4\frac{\pi\times 1^{2}}{4}=\frac{\pi}{4}. Donc p=π4≈0,785p=\frac{\pi}{4}\approx 0{,}785.

b)

On compte les points qui tombent dans le quart de disque, puis on multiplie la fréquence par 44 : dans la boucle, if x**2 + y**2 <= 1: puis c = c + 1, et à la fin return 4*c/n. La fonction random() du module random renvoie un nombre au hasard dans [0 ;1[[0\,;1[.

c)

La fréquence vaut 7 83610 000=0,7836\frac{7\,836}{10\,000}=0{,}7836, d'où l'estimation π≈4×0,7836=3,1344\pi\approx 4\times 0{,}7836=3{,}1344. L'erreur est d'environ 0,0070{,}007 : on n'a que deux décimales exactes avec dix mille points.

d)

p(1−p)=π4(1−π4)≈0,1685p(1-p)=\frac{\pi}{4}\left(1-\frac{\pi}{4}\right)\approx 0{,}1685. On veut 0,1685n×0,012≤0,05\frac{0{,}1685}{n\times 0{,}01^{2}}\leq 0{,}05, soit n≥0,16850,05×0,0001≈33 710n\geq\frac{0{,}1685}{0{,}05\times 0{,}0001}\approx 33\,710. Il faut au moins 33 71033\,710 points pour avoir la fréquence à 0,010{,}01 près avec un risque d'au plus 5 %5\ \%, c'est-à-dire π\pi à 0,040{,}04 près seulement. En pratique on majore souvent p(1−p)p(1-p) par 14\frac{1}{4}, ce qui donne 50 00050\,000 points sans connaître pp.

La méthode de Monte-Carlo transforme un calcul d'aire en simulation, et elle a l'avantage de marcher en toute dimension. Son défaut est sa lenteur : l'erreur ne décroît qu'en 1n\frac{1}{\sqrt{n}}, si bien que gagner une décimale coûte cent fois plus de points. C'est pourquoi on la réserve aux problèmes où les méthodes déterministes, rectangles ou trapèzes, deviennent impraticables.

from random import random

def estimation_pi(n):
    c = 0
    for k in range(n):
        x = random()
        y = random()
        if x**2 + y**2 <= 1:
            c = c + 1
    return 4*c/n

Exercice 14 : Le point fixe du cosinus

On cherche le réel α\alpha de [0 ;1][0\,;1] tel que cos⁡α=α\cos\alpha=\alpha. On pose g(x)=cos⁡x−xg(x)=\cos x-x.

  • a) Montrez que gg est strictement décroissante sur [0 ;1][0\,;1] et que l'équation cos⁡x=x\cos x=x y a une unique solution α\alpha.
  • b) On considère la suite u0=1u_{0}=1, un+1=cos⁡(un)u_{n+1}=\cos(u_{n}). Calculez u1u_{1}, u2u_{2} et u3u_{3} au dix-millième.
  • c) On admet que la suite converge vers α\alpha et qu'il faut 3232 itérations pour que ∣un−α∣≤10−6|u_{n}-\alpha|\leq 10^{-6}. Donnez α\alpha au millionième.
  • d) La méthode de Newton appliquée à gg s'écrit xk+1=xk−cos⁡xk−xk−sin⁡xk−1x_{k+1}=x_{k}-\frac{\cos x_{k}-x_{k}}{-\sin x_{k}-1}. Partant de x0=1x_{0}=1, calculez x1x_{1} et x2x_{2} au millionième.
  • e) Combien d'itérations de Newton suffisent pour atteindre la précision de c), sachant que x3≈0,739085133x_{3}\approx 0{,}739085133 ?

Tape tes réponses, la page te dit juste ou faux 0/8

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) g′(x)=−sin⁡x−1<0g'(x)=-\sin x-1<0 ; g(0)>0>g(1)g(0)>0>g(1)
  • b) 0,54030{,}5403 ; 0,85760{,}8576 ; 0,65430{,}6543
  • c) α≈0,739085\alpha\approx 0{,}739085
  • d) x1≈0,750364x_{1}\approx 0{,}750364, x2≈0,739113x_{2}\approx 0{,}739113
  • e) 33 itérations
a)

g′(x)=−sin⁡x−1g'(x)=-\sin x-1. Sur [0 ;1][0\,;1], sin⁡x≥0\sin x\geq 0, donc g′(x)≤−1<0g'(x)\leq-1<0 : gg est strictement décroissante. gg est continue, g(0)=1>0g(0)=1>0 et g(1)=cos⁡1−1≈−0,46<0g(1)=\cos 1-1\approx-0{,}46<0 : par le corollaire du théorème des valeurs intermédiaires, gg s'annule une unique fois sur [0 ;1][0\,;1].

b)

En radians : u1=cos⁡1≈0,5403u_{1}=\cos 1\approx 0{,}5403 ; u2=cos⁡(0,5403)≈0,8576u_{2}=\cos(0{,}5403)\approx 0{,}8576 ; u3=cos⁡(0,8576)≈0,6543u_{3}=\cos(0{,}8576)\approx 0{,}6543. Les termes oscillent autour de la limite en se resserrant : la suite n'est pas monotone, parce que le cosinus est DÉCROISSANT sur [0 ;1][0\,;1]. Oublier de mettre la calculatrice en radians donne cos⁡1≈0,9998\cos 1\approx 0{,}9998 et une suite qui ne converge pas vers la bonne valeur.

c)

α≈0,739085\alpha\approx 0{,}739085, nombre parfois appelé nombre de Dottie. Trente-deux itérations pour six décimales : chaque itération divise l'écart par environ ∣sin⁡α∣≈0,67|\sin\alpha|\approx 0{,}67, ce qui fait gagner moins de 0,20{,}2 décimale par tour.

d)

x1=1−cos⁡1−1−sin⁡1−1=1−−0,459698−1,841471≈1−0,249636=0,750364x_{1}=1-\frac{\cos 1-1}{-\sin 1-1}=1-\frac{-0{,}459698}{-1{,}841471}\approx 1-0{,}249636=0{,}750364. Puis x2≈0,739113x_{2}\approx 0{,}739113. L'erreur est déjà inférieure à 3×10−53\times 10^{-5} au deuxième pas.

e)

∣x3−α∣|x_{3}-\alpha| est de l'ordre de 10−1010^{-10} : TROIS itérations suffisent, contre 3232 pour le point fixe. Newton double le nombre de décimales exactes à chaque étape ; le point fixe n'en gagne qu'une fraction constante. En contrepartie, Newton demande la dérivée et un bon point de départ.

Trois algorithmes résolvent la même équation cos⁡x=x\cos x=x : la dichotomie (un bit par étape, sûre), le point fixe (une fraction de décimale par étape, simple à programmer), Newton (décimales doublées à chaque étape, rapide mais exigeante). Choisir entre eux est une question d'analyse : monotonie, dérivée, point de départ.

y = cos xu₀u₁u₂u₃

Exercice 15 : Simuler la somme de deux dés

On lance deux dés équilibrés à six faces et l'on note SS la somme des deux faces. On simule nn lancers avec le programme ci-dessous.

from random import randint

def frequence7(n):
    c = 0
    for k in range(n):
        ...
    return ...
  • a) Déterminez P(S=7)P(S=7), puis E(S)E(S) en utilisant S=D1+D2S=D_{1}+D_{2}.
  • b) Sachant que V(D1)=3512V(D_{1})=\frac{35}{12}, calculez V(S)V(S) en justifiant.
  • c) Complétez le programme pour qu'il renvoie la fréquence des sommes égales à 77 sur nn lancers.
  • d) Pour n=1 000n=1\,000, majorez P(∣Fn−16∣≥0,05)P\left(\left|F_{n}-\frac{1}{6}\right|\geq 0{,}05\right) à l'aide de l'inégalité de concentration.
  • e) Une simulation de 1 0001\,000 lancers donne 9191 sommes égales à 77. Ce résultat est-il surprenant ? Quelle erreur de programme pourrait l'expliquer ?

Tape tes réponses, la page te dit juste ou faux 0/6

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) P(S=7)=16P(S=7)=\frac{1}{6}, E(S)=7E(S)=7
  • b) V(S)=356V(S)=\frac{35}{6}
  • c) s = randint(1, 6) + randint(1, 6), compter les 77, return c/n
  • d) ≤0,0556\leq 0{,}0556
  • e) Écart 0,076≥0,050{,}076\geq 0{,}05 : très suspect, fréquence proche de 111\frac{1}{11}
a)

Sur les 3636 couples équiprobables, 66 donnent 77 : (1,6)(1,6), (2,5)(2,5), (3,4)(3,4), (4,3)(4,3), (5,2)(5,2), (6,1)(6,1). P(S=7)=636=16P(S=7)=\frac{6}{36}=\frac{1}{6}. Par linéarité de l'espérance, E(S)=E(D1)+E(D2)=3,5+3,5=7E(S)=E(D_{1})+E(D_{2})=3{,}5+3{,}5=7.

b)

Les deux dés sont INDÉPENDANTS, donc la variance de la somme est la somme des variances : V(S)=3512+3512=356≈5,833V(S)=\frac{35}{12}+\frac{35}{12}=\frac{35}{6}\approx 5{,}833. Sans l'indépendance, cette additivité serait fausse ; l'espérance, elle, s'additionne toujours.

c)

Dans la boucle : s = randint(1, 6) + randint(1, 6), puis if s == 7: et c = c + 1. En sortie : return c/n. Tirer UN nombre entre 22 et 1212 avec randint(2, 12) serait faux : les onze sommes ne sont pas équiprobables.

d)

p(1−p)nδ2=16×561 000×0,052=0,13892,5≈0,0556\frac{p(1-p)}{n\delta^{2}}=\frac{\frac{1}{6}\times\frac{5}{6}}{1\,000\times 0{,}05^{2}}=\frac{0{,}1389}{2{,}5}\approx 0{,}0556. La probabilité que la fréquence s'écarte de 16\frac{1}{6} d'au moins 0,050{,}05 est au plus d'environ 5,6 %5{,}6\ \%.

e)

La fréquence observée vaut 0,0910{,}091, et ∣0,091−16∣≈0,076≥0,05\left|0{,}091-\frac{1}{6}\right|\approx 0{,}076\geq 0{,}05. D'après d), un écart d'au moins 0,050{,}05 a une probabilité d'au plus 5,6 %5{,}6\ \% si le programme est juste : le résultat est très suspect. Or 0,0910{,}091 est presque exactement 111≈0,0909\frac{1}{11}\approx 0{,}0909, la fréquence qu'on obtiendrait avec randint(2, 12), qui rend les onze sommes équiprobables. L'erreur de c) est la coupable probable.

Simuler ne remplace pas le calcul : il sert à le CONTRÔLER. On calcule d'abord la loi, l'espérance et la variance, puis l'inégalité de concentration dit quel écart entre fréquence simulée et probabilité est normal. Un écart trop grand signale une erreur de programme plus souvent qu'une erreur de calcul.

from random import randint

def frequence7(n):
    c = 0
    for k in range(n):
        s = randint(1, 6) + randint(1, 6)
        if s == 7:
            c = c + 1
    return c/n

Partie D : les autres algorithmes du programme (/50)

Exercice 16 : La méthode de la sécante

On cherche la solution α\alpha de l'équation xex=1x\mathrm{e}^{x}=1, c'est-à-dire le zéro de f(x)=xex−1f(x)=x\mathrm{e}^{x}-1 sur [0 ;1][0\,;1]. La méthode de la sécante part de deux valeurs x0=0x_{0}=0 et x1=1x_{1}=1 ; à chaque étape, elle trace la CORDE qui joint les points de la courbe d'abscisses xk−1x_{k-1} et xkx_{k}, et prend pour xk+1x_{k+1} l'abscisse du point où cette corde coupe l'axe des abscisses.

La figure montre la courbe, la corde [M0M1][M_{0}M_{1}] qui donne x2x_{2}, puis la corde [M2M1][M_{2}M_{1}] qui donne x3x_{3}. Le programme ci-dessous est incomplet.

−0,20,20,40,60,811,2−1,5−1−0,50,511,52M0M1M2
from math import exp

def f(x):
    return x*exp(x) - 1

def secante(a, b, n):
    for k in range(n):
        c = ...
        a = b
        b = c
    return b
  • a) Démontrez que l'équation f(x)=0f(x)=0 admet une unique solution α\alpha dans [0 ;1][0\,;1].
  • b) Démontrez que la corde passant par (a ;f(a))(a\,;f(a)) et (b ;f(b))(b\,;f(b)) coupe l'axe des abscisses au point d'abscisse c=b−f(b)b−af(b)−f(a)c=b-f(b)\frac{b-a}{f(b)-f(a)}. Calculez x2x_{2} en valeur exacte, puis au millième.
  • c) Complétez la ligne c = ... du programme. Que se passerait-il si l'on inversait les deux lignes a = b et b = c ?
  • d) Le programme affiche successivement x3≈0,503314x_{3}\approx 0{,}503314, x4≈0,578616x_{4}\approx 0{,}578616, x5≈0,566532x_{5}\approx 0{,}566532, x6≈0,567138x_{6}\approx 0{,}567138 et x7≈0,5671433x_{7}\approx 0{,}5671433, alors que α≈0,5671433\alpha\approx 0{,}5671433. À partir de quel rang l'erreur est-elle inférieure à 10−610^{-6} ? Combien d'étapes faudrait-il à la dichotomie sur [0 ;1][0\,;1] pour la même précision ?
  • e) Expliquez en quoi la méthode de la sécante est une méthode de Newton dans laquelle on a remplacé f′(xk)f'(x_{k}) par un taux d'accroissement. Quel avantage en tire-t-on ?

Tape tes réponses, la page te dit juste ou faux 0/7

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) f′(x)=(1+x)ex>0f'(x)=(1+x)\mathrm{e}^{x}>0, f(0)<0<f(1)f(0)<0<f(1) : une unique solution
  • b) c=b−f(b)b−af(b)−f(a)c=b-f(b)\frac{b-a}{f(b)-f(a)} ; x2=1e≈0,368x_{2}=\frac{1}{\mathrm{e}}\approx 0{,}368
  • c) c = b - f(b)*(b - a)/(f(b) - f(a)) ; lignes inversées : a=ba=b, division par zéro
  • d) Rang 77 ; 2020 étapes de dichotomie
  • e) Newton avec f′(xk)f'(x_{k}) remplacé par la pente de la corde : pas besoin de f′f', un seul calcul de ff par étape
a)

ff est dérivable sur [0 ;1][0\,;1] et f′(x)=ex+xex=(1+x)ex>0f'(x)=\mathrm{e}^{x}+x\mathrm{e}^{x}=(1+x)\mathrm{e}^{x}>0 : ff est continue et strictement croissante. De plus f(0)=−1<0f(0)=-1<0 et f(1)=e−1≈1,718>0f(1)=\mathrm{e}-1\approx 1{,}718>0. D'après le théorème des valeurs intermédiaires, appliqué à une fonction continue strictement monotone, l'équation f(x)=0f(x)=0 admet une unique solution α\alpha dans [0 ;1][0\,;1]. C'est ce qui autorise à parler de LA solution vers laquelle l'algorithme doit converger.

b)

La corde a pour coefficient directeur le taux d'accroissement m=f(b)−f(a)b−am=\frac{f(b)-f(a)}{b-a} et passe par (b ;f(b))(b\,;f(b)) : son équation est y=f(b)+m(x−b)y=f(b)+m(x-b). Elle coupe l'axe quand y=0y=0, soit x−b=−f(b)mx-b=-\frac{f(b)}{m}, c'est-à-dire c=b−f(b)b−af(b)−f(a)c=b-f(b)\frac{b-a}{f(b)-f(a)}, à condition que f(b)≠f(a)f(b)\neq f(a). Avec a=0a=0 et b=1b=1 : x2=1−(e−1)×1−0(e−1)−(−1)=1−e−1e=1e≈0,368x_{2}=1-(\mathrm{e}-1)\times\frac{1-0}{(\mathrm{e}-1)-(-1)}=1-\frac{\mathrm{e}-1}{\mathrm{e}}=\frac{1}{\mathrm{e}}\approx 0{,}368. Contrôle sur la figure : la première corde coupe l'axe un peu avant 0,40{,}4 ✓. On est encore loin de α\alpha : la courbe est convexe, et la corde passe au-dessus.

c)

La ligne à écrire est la formule de b) : c = b - f(b)*(b - a)/(f(b) - f(a)). Ensuite, le couple (a ;b)(a\,;b) doit devenir (b ;c)(b\,;c) : les deux DERNIERS points calculés. L'ordre des deux affectations compte. Si l'on écrit b = c d'abord, l'ancienne valeur de b est perdue, et a = b copie la NOUVELLE valeur : on obtient a=b=ca=b=c. Au tour suivant, f(b)−f(a)=0f(b)-f(a)=0 et le programme s'arrête sur une division par zéro. C'est le même piège que l'affectation simultanée des deux termes de la suite de Fibonacci à l'exercice 12.

d)

Les erreurs valent environ 0,0640{,}064 pour x3x_{3}, 0,0110{,}011 pour x4x_{4}, 6,1×10−46{,}1\times 10^{-4} pour x5x_{5}, 5,7×10−65{,}7\times 10^{-6} pour x6x_{6} et 2,9×10−92{,}9\times 10^{-9} pour x7x_{7} : la précision 10−610^{-6} est atteinte au rang 77, et pas avant, puisque 5,7×10−6>10−65{,}7\times 10^{-6}>10^{-6}. Le nombre de décimales exactes passe de 11 à 33, puis 55, puis 88 : chaque étape en gagne environ autant que les deux précédentes réunies. Pour la dichotomie, l'intervalle mesure 12n\frac{1}{2^{n}} après nn étapes, et 12n≤10−6\frac{1}{2^{n}}\leq 10^{-6} demande n=20n=20, puisque 219<106≤2202^{19}<10^{6}\leq 2^{20}, comme à l'exercice 2. La sécante fait donc en six cordes ce que la dichotomie fait en vingt coupes.

e)

La méthode de Newton de l'exercice 6 pose xk+1=xk−f(xk)f′(xk)x_{k+1}=x_{k}-\frac{f(x_{k})}{f'(x_{k})} : elle suit la TANGENTE. La sécante pose xk+1=xk−f(xk)×xk−xk−1f(xk)−f(xk−1)x_{k+1}=x_{k}-f(x_{k})\times\frac{x_{k}-x_{k-1}}{f(x_{k})-f(x_{k-1})} : c'est la même formule, où le nombre dérivé f′(xk)f'(x_{k}) est remplacé par le taux d'accroissement entre les deux derniers points, c'est-à-dire la pente d'une corde au lieu de celle d'une tangente. L'avantage : on n'a jamais besoin de connaître f′f', et chaque étape ne coûte qu'UN nouveau calcul de ff, la valeur précédente étant réutilisée. On paie ce confort d'une convergence un peu moins rapide que celle de Newton, mais bien plus rapide que la dichotomie.

Ce qui décide de la vitesse d'un algorithme de résolution, c'est l'information qu'il exploite : le SIGNE seul pour la dichotomie, une pente de corde pour la sécante, la dérivée pour Newton.

from math import exp

def f(x):
    return x*exp(x) - 1

def secante(a, b, n):
    for k in range(n):
        c = b - f(b)*(b - a)/(f(b) - f(a))
        a = b
        b = c
    return b

Exercice 17 : L'algorithme de Brouncker pour ln 2

En 1668, William Brouncker calcule l'aire sous l'hyperbole d'équation y=11+xy=\frac{1}{1+x} entre 00 et 11. Il la remplit de rectangles de plus en plus fins : la figure montre les quatre premiers, d'aires 12\frac{1}{2}, 112\frac{1}{12}, puis deux plus petits. Il en tire la somme Sn=11×2+13×4+15×6+⋯+1(2n−1)×2nS_{n}=\frac{1}{1\times 2}+\frac{1}{3\times 4}+\frac{1}{5\times 6}+\dots+\frac{1}{(2n-1)\times 2n}, que calcule le programme ci-dessous.

0,250,50,7510,250,50,7511/21/12
def brouncker(n):
    s = 0
    for k in range(1, n + 1):
        s = s + 1/((2*k - 1)*(2*k))
    return s
  • a) Calculez ∫01dt1+t\int_{0}^{1}\frac{dt}{1+t}. Sur la figure, vérifiez que le rectangle posé sur [0 ;14]\left[0\,;\frac{1}{4}\right] entre les hauteurs 23\frac{2}{3} et 45\frac{4}{5} a pour aire 15×6\frac{1}{5\times 6}.
  • b) Démontrez que 1(2k−1)×2k=12k−1−12k\frac{1}{(2k-1)\times 2k}=\frac{1}{2k-1}-\frac{1}{2k}. Déduisez-en Sn=1−12+13−14+⋯−12nS_{n}=1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\dots-\frac{1}{2n}, puis calculez S3S_{3} sous forme de fraction.
  • c) Pour t∈[0 ;1]t\in[0\,;1], justifiez que 1−t+t2−⋯−t2n−1=1−t2n1+t1-t+t^{2}-\dots-t^{2n-1}=\frac{1-t^{2n}}{1+t}. En intégrant, démontrez que Sn=ln⁡2−RnS_{n}=\ln 2-R_{n}, où Rn=∫01t2n1+t dtR_{n}=\int_{0}^{1}\frac{t^{2n}}{1+t}\,dt.
  • d) Démontrez que 0≤Rn≤12n+10\leq R_{n}\leq\frac{1}{2n+1}. Déduisez-en la limite de (Sn)(S_{n}), et la plus petite valeur de nn qui GARANTIT ln⁡2−Sn≤10−3\ln 2-S_{n}\leq 10^{-3}.
  • e) Le programme renvoie S500≈0,6926474S_{500}\approx 0{,}6926474, et ln⁡2≈0,6931472\ln 2\approx 0{,}6931472. Comparez l'erreur réelle à la majoration de d). Combien de termes la majoration demande-t-elle pour une erreur de 10−610^{-6} ? Concluez sur la vitesse de l'algorithme.

Tape tes réponses, la page te dit juste ou faux 0/7

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) ln⁡2≈0,693\ln 2\approx 0{,}693 ; rectangle 14×215=130\frac{1}{4}\times\frac{2}{15}=\frac{1}{30}
  • b) Sn=1−12+⋯−12nS_{n}=1-\frac{1}{2}+\dots-\frac{1}{2n} ; S3=3760S_{3}=\frac{37}{60}
  • c) Somme géométrique de raison −t-t ; Sn=ln⁡2−RnS_{n}=\ln 2-R_{n}
  • d) 0≤Rn≤12n+10\leq R_{n}\leq\frac{1}{2n+1} ; Sn→ln⁡2S_{n}\to\ln 2 par défaut ; n=500n=500
  • e) Erreur ≈5,0×10−4\approx 5{,}0\times 10^{-4}, moitié de la borne ; 500 000500\,000 termes pour 10−610^{-6} : algorithme lent
a)

∫01dt1+t=[ln⁡(1+t)]01=ln⁡2−ln⁡1=ln⁡2\int_{0}^{1}\frac{dt}{1+t}=\left[\ln(1+t)\right]_{0}^{1}=\ln 2-\ln 1=\ln 2 : l'aire que Brouncker remplit est ln⁡2≈0,693\ln 2\approx 0{,}693. Le rectangle a pour largeur 14\frac{1}{4} et pour hauteur 45−23=12−1015=215\frac{4}{5}-\frac{2}{3}=\frac{12-10}{15}=\frac{2}{15}, donc pour aire 14×215=130=15×6\frac{1}{4}\times\frac{2}{15}=\frac{1}{30}=\frac{1}{5\times 6}. Les hauteurs sont des valeurs de l'hyperbole : 11+1/2=23\frac{1}{1+1/2}=\frac{2}{3} et 11+1/4=45\frac{1}{1+1/4}=\frac{4}{5}. De même, le grand rectangle vaut 1×12=11×21\times\frac{1}{2}=\frac{1}{1\times 2} et celui du dessus 12×(23−12)=112=13×4\frac{1}{2}\times\left(\frac{2}{3}-\frac{1}{2}\right)=\frac{1}{12}=\frac{1}{3\times 4} : chaque terme de SnS_{n} est l'aire d'un rectangle de la figure.

b)

12k−1−12k=2k−(2k−1)(2k−1)×2k=1(2k−1)×2k\frac{1}{2k-1}-\frac{1}{2k}=\frac{2k-(2k-1)}{(2k-1)\times 2k}=\frac{1}{(2k-1)\times 2k}. En sommant pour kk de 11 à nn, chaque terme de SnS_{n} se dédouble en un terme positif d'indice impair et un terme négatif d'indice pair : Sn=1−12+13−14+⋯+12n−1−12nS_{n}=1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\dots+\frac{1}{2n-1}-\frac{1}{2n}, qui compte 2n2n termes. Pour n=3n=3 : S3=12+112+130=30+5+260=3760≈0,617S_{3}=\frac{1}{2}+\frac{1}{12}+\frac{1}{30}=\frac{30+5+2}{60}=\frac{37}{60}\approx 0{,}617. Contrôle par l'autre écriture : 1−12+13−14+15−16=37601-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\frac{1}{5}-\frac{1}{6}=\frac{37}{60} ✓.

c)

Le membre de gauche est la somme des 2n2n premiers termes d'une suite géométrique de premier terme 11 et de raison −t-t, avec −t≠1-t\neq 1 : elle vaut 1−(−t)2n1−(−t)=1−t2n1+t\frac{1-(-t)^{2n}}{1-(-t)}=\frac{1-t^{2n}}{1+t}, puisque (−t)2n=t2n(-t)^{2n}=t^{2n}, l'exposant étant pair. On intègre les deux membres entre 00 et 11. À gauche, ∫01tj dt=1j+1\int_{0}^{1}t^{j}\,dt=\frac{1}{j+1} donne exactement 1−12+13−⋯−12n=Sn1-\frac{1}{2}+\frac{1}{3}-\dots-\frac{1}{2n}=S_{n}. À droite, par linéarité, ∫01dt1+t−∫01t2n1+t dt=ln⁡2−Rn\int_{0}^{1}\frac{dt}{1+t}-\int_{0}^{1}\frac{t^{2n}}{1+t}\,dt=\ln 2-R_{n}. Donc Sn=ln⁡2−RnS_{n}=\ln 2-R_{n}.

d)

Sur [0 ;1][0\,;1], t2n≥0t^{2n}\geq 0 et 1+t≥11+t\geq 1, donc 0≤t2n1+t≤t2n0\leq\frac{t^{2n}}{1+t}\leq t^{2n}. On intègre, bornes dans l'ordre croissant : 0≤Rn≤∫01t2n dt=12n+10\leq R_{n}\leq\int_{0}^{1}t^{2n}\,dt=\frac{1}{2n+1}. Par les gendarmes, Rn→0R_{n}\to 0, donc Sn→ln⁡2S_{n}\to\ln 2 ; et comme Rn≥0R_{n}\geq 0, Sn≤ln⁡2S_{n}\leq\ln 2 : l'algorithme approche ln⁡2\ln 2 PAR DÉFAUT. Pour garantir ln⁡2−Sn=Rn≤10−3\ln 2-S_{n}=R_{n}\leq 10^{-3}, il suffit que 12n+1≤10−3\frac{1}{2n+1}\leq 10^{-3}, soit 2n+1≥1 0002n+1\geq 1\,000, n≥499,5n\geq 499{,}5 : n=500n=500.

e)

L'erreur réelle vaut 0,6931472−0,6926474≈5,0×10−40{,}6931472-0{,}6926474\approx 5{,}0\times 10^{-4}, soit la MOITIÉ de la majoration 11 001≈10−3\frac{1}{1\,001}\approx 10^{-3} : la borne est honnête, à un facteur 22 près. En fait l'erreur se comporte comme 14n\frac{1}{4n}. Pour 10−610^{-6}, la majoration demande 12n+1≤10−6\frac{1}{2n+1}\leq 10^{-6}, soit n≥499 999,5n\geq 499\,999{,}5 : un demi-million de termes. L'algorithme est juste mais LENT : l'erreur décroît comme 1n\frac{1}{n}, et chaque décimale supplémentaire coûte dix fois plus de termes. L'algorithme de Briggs, à l'exercice suivant, fait bien mieux.

À retenir : pour majorer l'erreur d'un algorithme, on écrit la quantité cherchée comme la valeur calculée plus un RESTE, et l'on majore le reste, ici par une intégrale.

Exercice 18 : L'algorithme de Briggs pour calculer un logarithme

En 1617, Henry Briggs calcule ses tables de logarithmes en extrayant des racines carrées successives. On adapte sa méthode au calcul de ln⁡3\ln 3. On pose y0=3y_{0}=3 et, pour tout entier naturel kk, yk+1=yky_{k+1}=\sqrt{y_{k}}. On admet l'inégalité ln⁡x≤x−1\ln x\leq x-1 pour tout x>0x>0, établie par concavité du logarithme.

from math import sqrt

def briggs(a, k):
    y = a
    for i in range(k):
        y = sqrt(y)
    return 2**k*(1 - 1/y), 2**k*(y - 1)
  • a) Démontrez par récurrence que ln⁡yk=ln⁡32k\ln y_{k}=\frac{\ln 3}{2^{k}} pour tout entier naturel kk. Que devient yky_{k} quand kk grandit ?
  • b) En appliquant l'inégalité admise à 1x\frac{1}{x}, démontrez que ln⁡x≥1−1x\ln x\geq 1-\frac{1}{x} pour tout x>0x>0. Déduisez-en que 2k(1−1yk)≤ln⁡3≤2k(yk−1)2^{k}\left(1-\frac{1}{y_{k}}\right)\leq\ln 3\leq 2^{k}(y_{k}-1), et expliquez ce que renvoie briggs(3, k).
  • c) briggs(3, 10) renvoie 1,09802321{,}0980232 et 1,09920181{,}0992018. Donnez la largeur de l'encadrement, et les décimales de ln⁡3\ln 3 qu'il garantit.
  • d) Démontrez que la largeur de l'encadrement vaut 2k(yk−1)2yk\frac{2^{k}(y_{k}-1)^{2}}{y_{k}}. Sachant que yk−1y_{k}-1 est voisin de ln⁡32k\frac{\ln 3}{2^{k}}, justifiez que chaque racine supplémentaire divise la largeur par 22 environ. Quelle valeur de kk faut-il pour une largeur au plus 10−610^{-6} ? On donne (ln⁡3)2≈1,207(\ln 3)^{2}\approx 1{,}207.
  • e) briggs(3, 40) renvoie deux fois 1,09838871{,}0983887, et briggs(3, 53) renvoie deux fois 00. Expliquez ces résultats, sachant que la machine ne garde qu'environ 1616 chiffres significatifs.

Tape tes réponses, la page te dit juste ou faux 0/6

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) ln⁡yk=ln⁡32k\ln y_{k}=\frac{\ln 3}{2^{k}} ; yk→1y_{k}\to 1
  • b) 1−1x≤ln⁡x≤x−11-\frac{1}{x}\leq\ln x\leq x-1, d'où 2k(1−1yk)≤ln⁡3≤2k(yk−1)2^{k}\left(1-\frac{1}{y_{k}}\right)\leq\ln 3\leq 2^{k}(y_{k}-1) : un minorant et un majorant
  • c) Largeur ≈1,179×10−3\approx 1{,}179\times 10^{-3} ; ln⁡3=1,09…\ln 3=1{,}09\dots, deux décimales garanties
  • d) Largeur 2k(yk−1)2yk≈(ln⁡3)22k\frac{2^{k}(y_{k}-1)^{2}}{y_{k}}\approx\frac{(\ln 3)^{2}}{2^{k}} ; k=21k=21
  • e) yk−1y_{k}-1 noyé dans l'arrondi : bornes fausses à k=40k=40, nulles à k=53k=53
a)

Initialisation : ln⁡y0=ln⁡3=ln⁡320\ln y_{0}=\ln 3=\frac{\ln 3}{2^{0}} ✓. Hérédité : si ln⁡yk=ln⁡32k\ln y_{k}=\frac{\ln 3}{2^{k}}, alors ln⁡yk+1=ln⁡yk=12ln⁡yk\ln y_{k+1}=\ln\sqrt{y_{k}}=\frac{1}{2}\ln y_{k}, puisque ln⁡yk=ln⁡(yk×yk)=2ln⁡yk\ln y_{k}=\ln\left(\sqrt{y_{k}}\times\sqrt{y_{k}}\right)=2\ln\sqrt{y_{k}} ; donc ln⁡yk+1=ln⁡32k+1\ln y_{k+1}=\frac{\ln 3}{2^{k+1}} ✓. Conclusion : la propriété vaut pour tout kk. Quand kk grandit, ln⁡yk\ln y_{k} tend vers 00, donc yk=eln⁡yky_{k}=\mathrm{e}^{\ln y_{k}} tend vers e0=1\mathrm{e}^{0}=1 par continuité de l'exponentielle. Toute l'idée de Briggs est là : ramener le calcul de ln⁡3\ln 3 à celui du logarithme d'un nombre TRÈS proche de 11, où la courbe se confond presque avec sa tangente y=x−1y=x-1.

b)

Pour x>0x>0, 1x>0\frac{1}{x}>0, et l'inégalité admise donne ln⁡1x≤1x−1\ln\frac{1}{x}\leq\frac{1}{x}-1, soit −ln⁡x≤1x−1-\ln x\leq\frac{1}{x}-1, et ln⁡x≥1−1x\ln x\geq 1-\frac{1}{x}. On a donc 1−1x≤ln⁡x≤x−11-\frac{1}{x}\leq\ln x\leq x-1. Avec x=ykx=y_{k} et a) : 1−1yk≤ln⁡32k≤yk−11-\frac{1}{y_{k}}\leq\frac{\ln 3}{2^{k}}\leq y_{k}-1, et en multipliant par 2k>02^{k}>0 : 2k(1−1yk)≤ln⁡3≤2k(yk−1)2^{k}\left(1-\frac{1}{y_{k}}\right)\leq\ln 3\leq 2^{k}(y_{k}-1). La fonction briggs calcule yky_{k} par kk racines carrées, puis renvoie les deux bornes : un MINORANT et un MAJORANT garantis de ln⁡3\ln 3, sans jamais appeler de logarithme.

c)

La largeur vaut 1,0992018−1,0980232≈1,179×10−31{,}0992018-1{,}0980232\approx 1{,}179\times 10^{-3}. Les deux bornes commencent par 1,091{,}09 : l'encadrement garantit 1,098<ln⁡3<1,1001{,}098<\ln 3<1{,}100, donc les deux premières décimales, ln⁡3=1,09…\ln 3=1{,}09\dots ; la troisième hésite encore entre 88 et 99. La valeur vraie, ln⁡3≈1,0986123\ln 3\approx 1{,}0986123, est bien entre les deux.

d)

Largeur : 2k(yk−1)−2k(1−1yk)=2k(yk−2+1yk)=2k yk2−2yk+1yk=2k(yk−1)2yk2^{k}(y_{k}-1)-2^{k}\left(1-\frac{1}{y_{k}}\right)=2^{k}\left(y_{k}-2+\frac{1}{y_{k}}\right)=2^{k}\,\frac{y_{k}^{2}-2y_{k}+1}{y_{k}}=\frac{2^{k}(y_{k}-1)^{2}}{y_{k}}. Avec yk≈1y_{k}\approx 1 et yk−1≈ln⁡32ky_{k}-1\approx\frac{\ln 3}{2^{k}}, la largeur est voisine de 2k×(ln⁡3)24k=(ln⁡3)22k2^{k}\times\frac{(\ln 3)^{2}}{4^{k}}=\frac{(\ln 3)^{2}}{2^{k}} : passer de kk à k+1k+1 la divise par 22. Contrôle en c) : 1,2071 024≈1,18×10−3\frac{1{,}207}{1\,024}\approx 1{,}18\times 10^{-3} ✓. Pour une largeur au plus 10−610^{-6}, il faut 2k≥1,207×1062^{k}\geq 1{,}207\times 10^{6} ; or 220=1 048 5762^{20}=1\,048\,576 est trop petit et 221=2 097 1522^{21}=2\,097\,152 convient : k=21k=21 racines carrées. À comparer au demi-million de termes de Brouncker pour une précision voisine.

e)

Pour k=40k=40, yk−1≈1,1240≈10−12y_{k}-1\approx\frac{1{,}1}{2^{40}}\approx 10^{-12}. La machine stocke yky_{k} avec environ 1616 chiffres significatifs, c'est-à-dire 1,000000000001…1{,}000000000001\dots : il ne reste que quatre chiffres utiles pour yk−1y_{k}-1, et l'erreur d'arrondi, multipliée par 240≈10122^{40}\approx 10^{12}, devient visible dès la quatrième décimale. Les deux bornes sont même égales, alors que la largeur exacte serait de l'ordre de 10−1210^{-12} : l'encadrement ment. Pour k=53k=53, yky_{k} est si proche de 11 que la machine l'arrondit à 11 exactement, et les deux bornes valent 00. Augmenter kk améliore les MATHÉMATIQUES de l'encadrement mais dégrade le CALCUL : au-delà d'une vingtaine de racines, on perd plus en arrondi qu'on ne gagne en précision. Briggs, qui calculait à la main avec trente chiffres, n'avait pas cette limite au même endroit.

Un algorithme a donc deux limites : la vitesse que lui donnent les mathématiques, et la précision que lui laisse la machine.

Exercice 19 : La méthode des milieux et l'encadrement par la concavité

On veut approcher I=∫0π/2cos⁡x dxI=\int_{0}^{\pi/2}\cos x\,dx. La méthode des milieux découpe [0 ;π2]\left[0\,;\frac{\pi}{2}\right] en nn intervalles de largeur h=π2nh=\frac{\pi}{2n}, et remplace la courbe, sur chacun, par le rectangle dont la hauteur est la valeur de cos⁡\cos au MILIEU de l'intervalle. On note MnM_{n} la somme obtenue, et TnT_{n} celle de la méthode des trapèzes de l'exercice 7. La figure montre M2M_{2}.

0,20,40,60,811,21,41,61,80,20,40,60,811,2
from math import cos, pi

def milieux(n):
    h = (pi/2)/n
    s = 0
    for k in range(n):
        s = s + ...
    return h*s
  • a) Calculez II. Calculez M2M_{2} au millième, avec cos⁡π8≈0,92388\cos\frac{\pi}{8}\approx 0{,}92388 et cos⁡3π8≈0,38268\cos\frac{3\pi}{8}\approx 0{,}38268.
  • b) Complétez la ligne s = s + ... du programme.
  • c) Le programme donne M4≈1,006455M_{4}\approx 1{,}006455 et M8≈1,001608M_{8}\approx 1{,}001608. Calculez les deux erreurs et leur rapport. Qu'en déduisez-vous sur la méthode ?
  • d) Sur un intervalle [a ;b][a\,;b] de milieu mm, justifiez que le rectangle de hauteur cos⁡m\cos m a la même aire que le trapèze situé sous la TANGENTE en mm. En utilisant la concavité de cos⁡\cos sur [0 ;π2]\left[0\,;\frac{\pi}{2}\right], démontrez que Tn≤I≤MnT_{n}\leq I\leq M_{n}. Avec T8≈0,996785T_{8}\approx 0{,}996785, donnez l'encadrement de II obtenu sans connaître II.
  • e) Avec T2≈0,948059T_{2}\approx 0{,}948059, comparez les erreurs de M2M_{2} et de T2T_{2}. Calculez 2M2+T23\frac{2M_{2}+T_{2}}{3} et son erreur. Commentez.

Tape tes réponses, la page te dit juste ou faux 0/7

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) I=1I=1 ; M2≈1,026M_{2}\approx 1{,}026
  • b) s = s + cos((k + 0.5)*h)
  • c) Erreurs 6,455×10−36{,}455\times 10^{-3} et 1,608×10−31{,}608\times 10^{-3}, rapport 44 : erreur en h2h^{2}
  • d) Rectangle du milieu = trapèze sous la tangente ; cos⁡\cos concave, donc Tn≤I≤MnT_{n}\leq I\leq M_{n} ; 0,996785≤I≤1,0016080{,}996785\leq I\leq 1{,}001608
  • e) Erreur des trapèzes ≈−2×\approx -2\times celle des milieux ; 2M2+T23≈1,000134\frac{2M_{2}+T_{2}}{3}\approx 1{,}000134, erreur 1,3×10−41{,}3\times 10^{-4}
a)

I=[sin⁡x]0π/2=sin⁡π2−sin⁡0=1I=\left[\sin x\right]_{0}^{\pi/2}=\sin\frac{\pi}{2}-\sin 0=1. Pour n=2n=2, h=π4h=\frac{\pi}{4} et les milieux sont π8\frac{\pi}{8} et 3π8\frac{3\pi}{8} : M2=π4(cos⁡π8+cos⁡3π8)≈0,785398×1,30656≈1,026M_{2}=\frac{\pi}{4}\left(\cos\frac{\pi}{8}+\cos\frac{3\pi}{8}\right)\approx 0{,}785398\times 1{,}30656\approx 1{,}026. L'erreur est déjà de l'ordre de 2,6×10−22{,}6\times 10^{-2} avec deux rectangles seulement.

b)

Le kk-ième intervalle est [kh ;(k+1)h][kh\,;(k+1)h], de milieu (k+12)h\left(k+\frac{1}{2}\right)h : on complète par s = s + cos((k + 0.5)*h). Écrire cos(k*h) donnerait les rectangles à gauche de l'exercice 3, qui surestiment ici largement, cos⁡\cos étant décroissante.

c)

Erreurs : M4−1≈6,455×10−3M_{4}-1\approx 6{,}455\times 10^{-3} et M8−1≈1,608×10−3M_{8}-1\approx 1{,}608\times 10^{-3}, de rapport 6,4551,608≈4,0\frac{6{,}455}{1{,}608}\approx 4{,}0. Doubler nn divise l'erreur par QUATRE : comme pour les trapèzes, l'erreur des milieux est proportionnelle à h2h^{2}, alors que celle des rectangles à gauche est proportionnelle à hh. Avec les mêmes huit valeurs de cos⁡\cos, les rectangles à gauche se trompent d'environ 0,0950{,}095, soixante fois plus.

d)

Sur [a ;b][a\,;b], la tangente en mm est une droite ; le trapèze sous cette droite a pour aire (b−a)×(b-a)\times la moyenne des hauteurs aux extrémités, et pour une droite cette moyenne est la hauteur au MILIEU, c'est-à-dire cos⁡m\cos m : même aire que le rectangle. Or cos⁡′′(x)=−cos⁡x≤0\cos''(x)=-\cos x\leq 0 sur [0 ;π2]\left[0\,;\frac{\pi}{2}\right] : cos⁡\cos y est CONCAVE, donc sa courbe est au-dessous de ses tangentes et au-dessus de ses cordes. Sous la courbe, il y a donc moins d'aire que sous la tangente, soit moins que le rectangle du milieu, et plus que sous la corde, soit plus que le trapèze. En sommant sur les nn intervalles : Tn≤I≤MnT_{n}\leq I\leq M_{n}. La figure du corrigé montre les deux droites pour n=1n=1 : la tangente en π4\frac{\pi}{4} en trait plein, la corde en pointillés. Pour n=8n=8 : 0,996785≤I≤1,0016080{,}996785\leq I\leq 1{,}001608, un encadrement GARANTI de largeur 5×10−35\times 10^{-3}, obtenu sans connaître la primitive.

e)

M2−1≈+0,0262M_{2}-1\approx +0{,}0262 et T2−1≈−0,0519T_{2}-1\approx -0{,}0519 : l'erreur des trapèzes est environ le DOUBLE de celle des milieux, et de signe contraire, ce qui confirme d). La combinaison 2M2+T23=2×1,026172+0,9480593≈1,000134\frac{2M_{2}+T_{2}}{3}=\frac{2\times 1{,}026172+0{,}948059}{3}\approx 1{,}000134 fait disparaître presque toute l'erreur : il reste 1,3×10−41{,}3\times 10^{-4}, avec seulement deux intervalles. Cette moyenne pondérée, la méthode de Simpson, est au-delà du programme, mais elle montre ce que valent les erreurs quand on connaît leur SIGNE : deux méthodes qui se trompent en sens contraires s'encadrent, puis se corrigent l'une l'autre.

La concavité ne sert pas qu'à tracer une courbe : elle dit de quel CÔTÉ chaque méthode se trompe, et transforme deux valeurs approchées en un encadrement certain.

from math import cos, pi

def milieux(n):
    h = (pi/2)/n
    s = 0
    for k in range(n):
        s = s + cos((k + 0.5)*h)
    return h*s
0,20,40,60,811,21,41,61,80,20,40,60,811,21,4

Exercice 20 : La planche de Galton et le triangle de Pascal dans une liste

Une planche de Galton compte 66 rangées de clous. Une bille lâchée en haut rebondit sur un clou de chaque rangée et part à droite avec la probabilité 12\frac{1}{2}, à gauche sinon, indépendamment des autres rebonds ; elle tombe enfin dans l'une des 77 boîtes numérotées de 00 à 66, le numéro étant le nombre de rebonds à droite. La figure montre le trajet d'une bille : droite, gauche, droite, droite, gauche, droite.

Le programme ci-dessous simule la planche et construit les lignes du triangle de Pascal.

0123456
from random import random

def galton(n):
    k = 0
    for i in range(n):
        if random() < 0.5:
            k = k + 1
    return k

def ligne_pascal(n):
    L = [1]
    for i in range(n):
        L = [1] + [L[j] + L[j + 1] for j in range(len(L) - 1)] + [1]
    return L

def simulation(n, N):
    boites = [0]*(n + 1)
    for b in range(N):
        k = galton(n)
        boites[k] = boites[k] + 1
    return boites
  • a) Que représente la valeur renvoyée par galton(6) ? Justifiez qu'elle suit une loi binomiale dont vous donnerez les paramètres, puis calculez la probabilité que la bille tombe dans la boîte 00.
  • b) Donnez le contenu de la liste L après chacun des tours de boucle de ligne_pascal(4). Quelle relation la compréhension programme-t-elle ? Que renvoie ligne_pascal(6) ?
  • c) Expliquez pourquoi le nombre de trajets menant à la boîte kk est (6k)\binom{6}{k}. Calculez la probabilité qu'une bille tombe dans la boîte 33, puis dans l'une des boîtes 22, 33 ou 44.
  • d) simulation(6, 640) a renvoyé la liste [10, 63, 155, 197, 141, 63, 11]. Donnez les effectifs théoriques, puis la fréquence observée de la boîte 33 et celle des boîtes 22 à 44. Comparez.
  • e) On incline la planche : chaque rebond part à droite avec la probabilité 0,60{,}6. Quelle ligne du programme faut-il modifier ? Quelle est alors la boîte la plus probable, et avec quelle probabilité ?

Tape tes réponses, la page te dit juste ou faux 0/10

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) Le numéro de la boîte ; X∼B(6 ;12)X\sim\mathcal{B}\left(6\,;\frac{1}{2}\right) ; P(X=0)=164P(X=0)=\frac{1}{64}
  • b) [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1] ; relation de Pascal ; [1, 6, 15, 20, 15, 6, 1]
  • c) (6k)\binom{6}{k} trajets de probabilité 164\frac{1}{64} ; P(X=3)=0,3125P(X=3)=0{,}3125 ; P(2≤X≤4)=0,78125P(2\leq X\leq 4)=0{,}78125
  • d) 1010, 6060, 150150, 200200, 150150, 6060, 1010 ; 0,3080{,}308 contre 0,31250{,}3125 ; 0,7700{,}770 contre 0,7810{,}781
  • e) if random() < 0.6 ; boîte 44, P(X=4)≈0,311P(X=4)\approx 0{,}311
a)

La variable k part de 00 et augmente de 11 chaque fois que random() < 0.5, ce qui arrive avec la probabilité 12\frac{1}{2} : galton(6) renvoie le nombre de rebonds à droite sur les 66 rangées, c'est-à-dire le NUMÉRO DE LA BOÎTE. Chaque rebond est une épreuve de Bernoulli de succès « à droite », de probabilité 12\frac{1}{2} ; les 66 rebonds sont identiques et indépendants. Le numéro XX de la boîte compte les succès : XX suit la loi binomiale B(6 ;12)\mathcal{B}\left(6\,;\frac{1}{2}\right). La boîte 00 exige six rebonds à gauche : P(X=0)=(12)6=164≈0,016P(X=0)=\left(\frac{1}{2}\right)^{6}=\frac{1}{64}\approx 0{,}016.

b)

L vaut [1] au départ, puis [1, 1] après le premier tour, [1, 2, 1] après le deuxième, [1, 3, 3, 1] après le troisième et [1, 4, 6, 4, 1] après le quatrième. La compréhension ajoute deux termes VOISINS de la ligne précédente, L[j] + L[j + 1], et encadre le tout par deux 1 : c'est la relation de Pascal, (i+1j+1)=(ij)+(ij+1)\binom{i+1}{j+1}=\binom{i}{j}+\binom{i}{j+1}. En poursuivant, ligne_pascal(6) renvoie [1, 6, 15, 20, 15, 6, 1], dont la somme vaut 64=2664=2^{6}. L'indice de la liste est le numéro de la boîte : L[3] vaut 2020, pour la boîte 33.

c)

Un trajet est une suite de 66 choix « droite » ou « gauche » ; il mène à la boîte kk s'il compte exactement kk « droite ». Choisir les rangées où la bille part à droite, c'est choisir kk rangées parmi 66 : il y a (6k)\binom{6}{k} trajets. On le voit aussi sur la planche : pour atteindre un clou, la bille arrive du clou de gauche ou du clou de droite de la rangée du dessus, et les nombres de trajets s'ajoutent, exactement comme dans la compréhension. Les 26=642^{6}=64 trajets ont chacun la probabilité 164\frac{1}{64}, donc P(X=3)=2064=0,3125P(X=3)=\frac{20}{64}=0{,}3125 et P(2≤X≤4)=15+20+1564=5064=0,78125P(2\leq X\leq 4)=\frac{15+20+15}{64}=\frac{50}{64}=0{,}78125.

d)

Les effectifs théoriques valent 640×(6k)64=10×(6k)640\times\frac{\binom{6}{k}}{64}=10\times\binom{6}{k} : 1010, 6060, 150150, 200200, 150150, 6060 et 1010. La somme observée vaut bien 640640. Fréquence de la boîte 33 : 197640≈0,308\frac{197}{640}\approx 0{,}308, contre 0,31250{,}3125 ; boîtes 22 à 44 : 155+197+141640=493640≈0,770\frac{155+197+141}{640}=\frac{493}{640}\approx 0{,}770, contre 0,7810{,}781. Les écarts, de l'ordre du centième, sont ceux d'un échantillon de 640640 billes : une simulation ne reproduit jamais exactement la loi, elle la FLUCTUE autour. Relancée, elle donnerait d'autres effectifs, voisins eux aussi. La forme en cloche, symétrique autour de la boîte 33, est en revanche nette.

e)

Seul le test change : if random() < 0.6: donne un succès avec la probabilité 0,60{,}6. Alors XX suit B(6 ;0,6)\mathcal{B}(6\,;0{,}6), et P(X=k)=(6k)0,6k0,46−kP(X=k)=\binom{6}{k}0{,}6^{k}0{,}4^{6-k} : 0,1380{,}138 pour k=2k=2, 0,2760{,}276 pour k=3k=3, 0,3110{,}311 pour k=4k=4 et 0,1870{,}187 pour k=5k=5. La boîte la plus probable est la 44, avec P(X=4)=15×0,64×0,42=15×0,1296×0,16≈0,311P(X=4)=15\times 0{,}6^{4}\times 0{,}4^{2}=15\times 0{,}1296\times 0{,}16\approx 0{,}311. L'espérance np=3,6np=3{,}6 n'est pas un numéro de boîte, mais la cloche s'est bien déplacée vers la droite. La liste de Pascal ne suffit plus : les trajets ne sont plus équiprobables, et chacun pèse 0,6k0,46−k0{,}6^{k}0{,}4^{6-k}.

La planche de Galton rend visible la loi binomiale : les coefficients de Pascal COMPTENT les chemins, les probabilités de chaque rebond les PÈSENT, et la simulation montre la fluctuation autour.

Il manque quelque chose dans cette série ? Un type d'exercice que ton prof donne, un énoncé qui te bloque, une erreur repérée : dis-le-moi, je lis chaque demande.

L'envoi passe par ton espace gratuit : c'est ce qui me permet de te répondre et de te prévenir quand l'exercice est ajouté. Un courriel suffit, pas de mot de passe. Crée ton espace. Pas envie de créer un compte ? Écris-moi directement.

De quoi s'agit-il ?
Je lis chaque demande moi-même, personne d'autre ne la voit. Inutile d'écrire ton nom ou celui de ton école.
Quand ta demande est traitée, tu es prévenu par courriel et dans ton espace.

En envoyant, tu acceptes que je lise ta demande pour y répondre. Elle est gardée avec ton compte, effacée avec lui, et jamais publiée : politique de confidentialité.

Ce chapitre au bac 2025 et 2026

22 exercices des sujets officiels le mobilisent, avec leur corrigé détaillé. Le meilleur entraînement une fois la série faite.

Session 2026 • 9 exercices
Voir les 4 autres exercices de 2026
Session 2025 • 13 exercices
Voir les 8 autres exercices de 2025
Chapitre précédent La convexité

© Ahmed Squalli Houssaini. Série publiée sur www.letuteurscientifique.ca/exercices/tspe-python-sciences. Libre pour l'usage personnel et en classe ; sa republication ailleurs demande une autorisation écrite (mentions légales).

Voir aussi

Vous cherchez un tuteur de spécialité maths en Terminale à Montréal ?

Contactez-moi pour une première séance. On travaille sur des exercices calibrés sur le niveau réel des contrôles au Lycée Marie de France et au Collège Stanislas.

Site par Studio Squalli