M:entetemax: titre="Sommes de Riemann" taille="1.3" %DATE{12 mai 2003} SH:rm -f *.mc *.png *.tex %S{Présentation} %P{Une §gsubdivision§ §m\sigma§ d'un intervalle §m[a,b]§ de §m\R§ est un ensemble §m(x_i)_{0\le i\le n}§ §m(n\in\N^*)§ de réels tels que: §Mx_0 = a < x_1 < ... < x_n =b§ Une suite de points §m(\xi_i)_{1\le i\le n}§ de la subdivision §m\sigma§ est une suite finie de réels tels que: §M\forall i \in \intentier{1,n},\, x_{i-1}\le \xi_i\le x_i§ À toute fonction §mf§ définie sur §m[a,b]§ on associe la somme suivante, dite §gsomme de Riemann§, liée à la subdivision §m\sigma§ et à la suite de points §m(\xi_i)§: §MS=\sum_{i=1}^{i=n}f(\xi_i)\times (x_i-x_{i-1})§ C'est la somme des aires (§ialgébriques§) des rectangles dont les bases sont prises entre deux points consécutifs de la subdivision §m\sigma§ et dont les hauteurs sont mesurées par les valeurs de §mf§ au point correspondant de §m(\xi_i)§. } %P{Si la fonction §mf§ est continue par morceaux sur §m[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 §m0§.} %S{Calculs} %SS{Première phase} %P{Le calcul suivant est un calcul §ipas à pas§ avec §gMaxima§, le temps d'identifier les procédures utiles.} FICHIER:seq1.txt::n: %P{Pour simplifier, nous allons considérer un intervalle §m[a,b]§ que l'on divisera en %§mn§ intervalles de longueurs égales. Cela définira notre subdivision §m\sigma§.} >a:1$ >b:2$ >n:10$ >s:makelist(a+(b-a)/n*i,i,1,n); %P{Définissons une fonction sur §m[a,b]§.} >f(x):=log(x);def %P{Calculons la valeurs de §mf§ aux points de §vs§.} >v:map(f,s); %P{Nous pouvons maintenant calculer la somme de Riemann.} >r:lsum(i*(b-a)/n,i,v); %P{Il ne reste qu'à évaluer numériquement ce nombre.} >float(r); %P{On peut maintenant le comparer avec la valeur exacte de l'intégrale.} >float(integrate(f(x),x,1,2)); %P{L'approximation est ce qu'elle est ...} § M:seq2fabA: f="seq1" %SS{Seconde phase} %P{Des calculs précédents nous pouvons §iextraire§ une procédure, ce qui va nous permettre de multiplier le calculs pour §iapprécier§ la convergence des sommes de Riemann vers l'intégrale lorsque §mn§ tend vers §m+\infty§.} FICHIER:s_riemann.mc::n: 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) ); § SH:cp s_riemann.mc ../../input/s_riemann.mc M:text: text="s_riemann.mc" html="s_riemann.html" FICHIER:seq2.txt::n: >load("s_riemann.mc")$ >f(x):=log(x);def %P{Voici les sommes de Riemann avec §mn=10, 30, 50, 70§.} >t:makelist(SRiemann(f,1,2,10+20*n),n,0,3); %P{La variation est §ilente§. Passons à de plus grandes valeurs de §mn§.} >t:makelist(SRiemann(f,1,2,10^n),n,1,3); %P{Finalement nous n'avons que trois décimales exactes après avoir divisé l'intervalle d'intégration en §m1000§ parties. Le gain est faible.} %P{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 §ibeaucoup§ plus près et cela à l'aide de la méthode de §gRichardson§.} %P{Nous partons de l'hypothèse que les sommes de Riemann §ms_n§, comme elles sont calculées ici, sont développables en §m\frac1n§ (§mn§ étant le nombre de divisions de l'intervalle d'intégration). Plus précisément supposons qu'il existe des réels §m\alpha_1§, §m\alpha_2§, §m\alpha_3§ tels que %§Ms_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 §m\displaystyle\frac{10s_{10n}-s_{n}}{9}§ nous obtiendrons une quantité §ms'_n§ qui se développera sous la forme %§Ms'_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.} >t:makelist((10*t[i+1]-t[i])/9,i,1,length(t)-1); >t:makelist((100*t[i+1]-t[i])/99,i,1,length(t)-1); %P{Au final nous disposons de §m9§ décimales exactes et cela sans §irecalculer§ une seule somme, superbe !} %P{L'hypothèse du départ se justifie donc §ià posteriori§, sa démonstration dans le cas de fonctions suffisamment régulières est assez accessible.} § M:seq2fabA: f="seq2"