Adloun

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.