Sommes de Riemann, et l'erreur en
Exercice · niveau 3 (difficile) · mathématiques approfondies (ECG 1re année), chapitre 5 — Fonctions réelles d'une variable réelle · Intégration sur un segment
Énoncé
Écrire une fonction Python qui calcule la somme de Riemann de sur pour subdivisions, et vérifier sur que l'erreur décroît comme .
Corrigé
from math import pi
def riemann(f, a, b, n, cote="gauche"):
h = (b - a) / n
if cote == "gauche":
points = (a + i * h for i in range(n))
else: # rectangles a droite
points = (a + i * h for i in range(1, n + 1))
return h * sum(f(x) for x in points)
f = lambda x: 1 / (1 + x * x)
exact = pi / 4
for n in (10, 100, 1000, 10000):
e = abs(riemann(f, 0, 1, n) - exact)
print(n, e, e * n) # e*n doit se stabiliser
Ce qu'on observe : le produit se stabilise autour de . L'erreur est donc de la forme avec : diviser l'erreur par dix demande dix fois plus de points.
Pourquoi , et pourquoi . Sur chaque sous-intervalle, le rectangle à gauche commet une erreur d'ordre ; en sommant les morceaux, on obtient , donc un terme en . Ici en valeur signée — d'où en valeur absolue.
La comparaison qui compte. La méthode des trapèzes, à peine plus coûteuse, donne une erreur en ; sur cette intégrale, elle atteint à la précision que les rectangles n'ont qu'à . Le choix de la méthode pèse bien plus lourd que le nombre de points.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.