Approcher une intégrale par la méthode des rectangles
Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.
Créer un compteRemarque
Quand on ne sait pas (ou ne veut pas) calculer une primitive, on peut approcher la valeur de $ \displaystyle\int_{a}^{b} f(x)\,dx $ en remplaçant l'aire sous la courbe par une somme d'aires de rectangles. Plus on découpe finement l'intervalle, plus l'approximation est précise.
Méthode
Pour approcher $ \displaystyle\int_{a}^{b} f(x)\,dx $ par la méthode des rectangles avec $ n $ sous-intervalles :
- Étape 1 : choisir le nombre $ n $ de rectangles et calculer leur largeur commune $ h = \dfrac{b-a}{n} $.
- Étape 2 : repérer les bornes des sous-intervalles : $ x_k = a + k\,h $ pour $ k $ allant de $ 0 $ à $ n $.
- Étape 3 : pour la somme à gauche $ S_g $, prendre la hauteur de chaque rectangle égale à la valeur de $ f $ au bord gauche : $ S_g = h\,\big(f(x_0) + f(x_1) + \dots + f(x_{n-1})\big) $.
- Étape 4 : pour la somme à droite $ S_d $, prendre la hauteur au bord droit : $ S_d = h\,\big(f(x_1) + f(x_2) + \dots + f(x_n)\big) $.
- Étape 5 : si $ f $ est monotone sur $ [a;b] $, encadrer l'intégrale par les deux sommes (voir la remarque ci-dessous), puis donner comme valeur approchée la moyenne $ \dfrac{S_g + S_d}{2} $.
Remarque
Lorsque $ f $ est croissante sur $ [a;b] $, la somme à gauche sous-estime l'aire et la somme à droite la surestime, d'où l'encadrement :
Si $ f $ est décroissante, les rôles s'inversent : $ S_d \leqslant \displaystyle\int_{a}^{b} f(x)\,dx \leqslant S_g $. L'amplitude de l'encadrement vaut $ |S_d - S_g| = h\,|f(b) - f(a)| $ : elle tend vers $ 0 $ quand $ n $ tend vers l'infini.
Encadrer l'intégrale de la fonction carré de 0 à 1
Approcher $ \displaystyle\int_{0}^{1} x^{2}\,dx $ avec $ n = 4 $ rectangles, puis comparer à la valeur exacte $ \dfrac{1}{3} $.
Étape 1 : la largeur des rectangles est $ h = \dfrac{1-0}{4} = 0{,}25 $.
Étape 2 : les bornes sont $ x_0 = 0 $, $ x_1 = 0{,}25 $, $ x_2 = 0{,}5 $, $ x_3 = 0{,}75 $, $ x_4 = 1 $. Avec $ f(x) = x^{2} $, on calcule :
Étape 3 : somme à gauche (bords $ x_0,\,x_1,\,x_2,\,x_3 $) :
Étape 4 : somme à droite (bords $ x_1,\,x_2,\,x_3,\,x_4 $) :
Étape 5 : $ f $ est croissante sur $ [0;1] $, donc :
La valeur exacte $ \dfrac{1}{3} \approx 0{,}3333 $ est bien dans cet encadrement. La moyenne des deux sommes donne l'estimation $ \dfrac{0{,}21875 + 0{,}46875}{2} = 0{,}34375 $, déjà proche de $ \dfrac{1}{3} $.
Algorithme Python (boucle) sur l'intégrale de l'exponentielle
On veut une valeur approchée de $ \displaystyle\int_{0}^{1} e^{x}\,dx $, dont la valeur exacte est $ e - 1 \approx 1{,}7183 $.
Étape 1 : on programme une boucle qui ajoute les aires des $ n $ rectangles. La fonction ci-dessous renvoie les deux sommes (à gauche et à droite).
from math import exp
def rectangles(f, a, b, n):
h = (b - a) / n
somme_gauche = 0
somme_droite = 0
for k in range(n):
x_gauche = a + k * h
x_droite = a + (k + 1) * h
somme_gauche += f(x_gauche) * h
somme_droite += f(x_droite) * h
return somme_gauche, somme_droite
g, d = rectangles(exp, 0, 1, 100)
print(g, d) # 1.7097... 1.7269...
print((g + d) / 2) # 1.7183...
Étape 2 : avec $ n = 100 $, le programme renvoie $ S_g \approx 1{,}7097 $ et $ S_d \approx 1{,}7269 $.
Étape 3 : la fonction exponentielle étant croissante sur $ [0;1] $, on obtient l'encadrement :
Étape 4 : la moyenne $ \dfrac{S_g + S_d}{2} \approx 1{,}7183 $ approche très bien la valeur exacte $ e - 1 \approx 1{,}7183 $. En augmentant $ n $, l'encadrement se resserre.
Remarque
La largeur de l'encadrement vaut ici $ h\,(f(b) - f(a)) = \dfrac{1}{n}\,(e^{1} - e^{0}) = \dfrac{e-1}{n} $ : elle est inversement proportionnelle à $ n $. Pour gagner un chiffre décimal de précision, il faut donc multiplier $ n $ par $ 10 $.
Attention
Erreurs fréquentes :
- Confondre le nombre de rectangles ($ n $) et le nombre de bornes ($ n+1 $) : la somme à gauche utilise $ x_0,\dots,x_{n-1} $ et la somme à droite $ x_1,\dots,x_n $, jamais toutes les bornes à la fois.
- Oublier de multiplier par la largeur $ h $ : une somme de valeurs $ f(x_k) $ n'est pas une aire tant qu'elle n'est pas multipliée par $ h $.
- Conclure $ S_g \leqslant \displaystyle\int_{a}^{b} f \leqslant S_d $ sans avoir vérifié que $ f $ est croissante : si $ f $ est décroissante, l'encadrement est inversé.
- En Python, écrire `range(n+1)` dans la boucle de la somme à gauche : on dépasse alors le dernier sous-intervalle (la boucle doit parcourir $ n $ rectangles, donc `range(n)`).