Sommes de Riemann
Jean-Michel Sarlat (jm-sarlat@melusine.eu.org) - 12 mai 20031 | Présentation | |
2 | Calculs | |
2.1 | Première phase | |
2.2 | Seconde phase |
1 - Présentation
Une subdivision d'un intervalle de est un ensemble de réels tels que: Une suite de points de la subdivision est une suite finie de réels tels que: À toute fonction définie sur on associe la somme suivante, dite somme de Riemann, liée à la subdivision et à la suite de points : C'est la somme des aires (algébriques) des rectangles dont les bases sont prises entre deux points consécutifs de la subdivision et dont les hauteurs sont mesurées par les valeurs de au point correspondant de .
Si la fonction est continue par morceaux sur 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 .
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 que l'on divisera en intervalles de longueurs égales. Cela définira notre subdivision .
(C2) a:1$
(C3) b:2$
(C4) n:10$
(C5) s:makelist(a+(b-a)/n*i,i,1,n);
Définissons une fonction sur .
(C6) f(x):=log(x);
Calculons la valeurs de aux points de s
.
(C7) v:map(f,s);
Nous pouvons maintenant calculer la somme de Riemann.
(C8) r:lsum(i*(b-a)/n,i,v);
Il ne reste qu'à évaluer numériquement ce nombre.
(C9) float(r);
On peut maintenant le comparer avec la valeur exacte de l'intégrale.
(C10) float(integrate(f(x),x,1,2));
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 tend vers .
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);
Voici les sommes de Riemann avec .
(C4) t:makelist(SRiemann(f,1,2,10+20*n),n,0,3);
La variation est lente. Passons à de plus grandes valeurs de .
(C5) t:makelist(SRiemann(f,1,2,10^n),n,1,3);
Finalement nous n'avons que trois décimales exactes après avoir divisé l'intervalle d'intégration en 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 , comme elles sont calculées ici, sont développables en ( étant le nombre de divisions de l'intervalle d'intégration). Plus précisément supposons qu'il existe des réels , , tels que On voit ainsi que si l'on calcule nous obtiendrons une quantité qui se développera sous la forme 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);
(C7) t:makelist((100*t[i+1]-t[i])/99,i,1,length(t)-1);
Au final nous disposons de 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.