Sommes de Riemann

Jean-Michel Sarlat (
jm-sarlat@melusine.eu.org) - 12 mai 2003
1 Présentation
2 Calculs
  2.1 Première phase
  2.2 Seconde phase

1 - Présentation


Une subdivision $\sigma$ d'un intervalle $[a,b]$ de $\R$ est un ensemble $(x_i)_{0\le i\le n}$ $(n\in\N^*)$ de réels tels que: $x_0 = a < x_1 < ... < x_n =b$ Une suite de points $(\xi_i)_{1\le i\le n}$ de la subdivision $\sigma$ est une suite finie de réels tels que: $\forall i \in \intentier{1,n},\, x_{i-1}\le \xi_i\le x_i$ À toute fonction $f$ définie sur $[a,b]$ on associe la somme suivante, dite somme de Riemann, liée à la subdivision $\sigma$ et à la suite de points $(\xi_i)$ : $S=\sum_{i=1}^{i=n}f(\xi_i)\times (x_i-x_{i-1})$ C'est la somme des aires (algébriques) des rectangles dont les bases sont prises entre deux points consécutifs de la subdivision $\sigma$ et dont les hauteurs sont mesurées par les valeurs de $f$ au point correspondant de $(\xi_i)$ .


Si la fonction $f$ est continue par morceaux sur $[a,b]$ alors les sommes de Riemann sont d'autant plus proches de l'intégrale que l'écart maximal entre deux points consécutifs de la subdivision est proche de $0$ .

2 - Calculs

2.1 Première phase


Le calcul suivant est un calcul pas à pas avec Maxima, le temps d'identifier les procédures utiles.

maxima >>

Pour simplifier, nous allons considérer un intervalle $[a,b]$ que l'on divisera en $n$ intervalles de longueurs égales. Cela définira notre subdivision $\sigma$ .

(C2) a:1$
(C3) b:2$
(C4) n:10$
(C5) s:makelist(a+(b-a)/n*i,i,1,n);

tex

Définissons une fonction sur $[a,b]$ .

(C6) f(x):=log(x);

tex

Calculons la valeurs de $f$ aux points de s.

(C7) v:map(f,s);

tex

Nous pouvons maintenant calculer la somme de Riemann.

(C8) r:lsum(i*(b-a)/n,i,v);

tex

Il ne reste qu'à évaluer numériquement ce nombre.

(C9) float(r);

tex

On peut maintenant le comparer avec la valeur exacte de l'intégrale.

(C10) float(integrate(f(x),x,1,2));

tex

L'approximation est ce qu'elle est ...

2.2 Seconde phase


Des calculs précédents nous pouvons extraire une procédure, ce qui va nous permettre de multiplier le calculs pour apprécier la convergence des sommes de Riemann vers l'intégrale lorsque $n$ tend vers $+\infty$ .


Fichier : s_riemann.mc

SRiemann(f,a,b,n) := block(
    /* les variables locales                    */
    [s,v,r],
    /* la suite de points de la subdivision     */
    s:makelist(a+(b-a)/n*i,i,1,n),
    /* les valeurs de la fonction en ces points */
    v:map(f,s),
    /* la somme de Riemann                      */
    r:lsum(i*(b-a)/n,i,v),
    /* une évaluation comme résultat final      */
    float(r)
);
maxima >>
(C2) load("s_riemann.mc")$
(C3) f(x):=log(x);

tex

Voici les sommes de Riemann avec $n=10, 30, 50, 70$ .

(C4) t:makelist(SRiemann(f,1,2,10+20*n),n,0,3);

tex

La variation est lente. Passons à de plus grandes valeurs de $n$ .

(C5) t:makelist(SRiemann(f,1,2,10^n),n,1,3);

tex

Finalement nous n'avons que trois décimales exactes après avoir divisé l'intervalle d'intégration en $1000$ parties. Le gain est faible.


Le choix d'une progression géométrique pour les calculs précédents n'était pas fortuit, nous allons tirer profit des valeurs calculées pour approcher l'intégrale de beaucoup plus près et cela à l'aide de la méthode de Richardson.


Nous partons de l'hypothèse que les sommes de Riemann $s_n$ , comme elles sont calculées ici, sont développables en $\frac1n$ ($n$ étant le nombre de divisions de l'intervalle d'intégration). Plus précisément supposons qu'il existe des réels $\alpha_1$ , $\alpha_2$ , $\alpha_3$ tels que $s_n=\int_a^bf(x)dx+\frac{\alpha_1}{n}+\frac{\alpha_2}{n^2}+\frac{\alpha_3}{n^3}+o\left(\frac1{n^3}\right)$ On voit ainsi que si l'on calcule $\displaystyle\frac{10s_{10n}-s_{n}}{9}$ nous obtiendrons une quantité $s'_n$ qui se développera sous la forme $s'_n=\int_a^bf(x)dx -\frac{\alpha_2}{10n^2}-\frac{11\alpha_3}{100n^3}+o\left(\frac1{n^3}\right)$ Le constat est simple : le terme d'ordre 1 du développement est éliminé (on a tout fait pour), l'approximation est donc meilleure. Et rien n'empêche de continuer ainsi, tant que l'on dispose d'un nombre de valeurs suffisantes.

(C6) t:makelist((10*t[i+1]-t[i])/9,i,1,length(t)-1);

tex
(C7) t:makelist((100*t[i+1]-t[i])/99,i,1,length(t)-1);

tex

Au final nous disposons de $9$ décimales exactes et cela sans recalculer une seule somme, superbe !


L'hypothèse du départ se justifie donc à posteriori, sa démonstration dans le cas de fonctions suffisamment régulières est assez accessible.


Autres réalisations de ce document : index.pdf, index.ps.
Source index.txt mouliné par petitParseur(Z+B) le lundi 26 mai 2003.