Découverte de l'algorithme des rectangles pour le calcul approché d'une intégrale
On considère dans cette activité la fonction $f$ définie sur $[0 ;2]$ par $f (x) = 4 − x^2$ et $\mathcal C$ sa courbe représentative dans un repère orthonormé.
L'objectif de cette activité est de calculer l'aire du domaine délimité
En d'autre termes, nous cherchons à déterminer l'aire hachurée en rouge sous la courbe $\mathcal C$ pour $x$ compris entre 0 et 2.
L’idée va être d’encadrer l’aire recherchée par deux aires que l’on peut calculer aisément. On utilise pour cela des figures très élémentaires : des rectangles.
Nous allons calculer un minorant de l'aire en inscrivant des rectangles sous la courbe (voir rectangles rouges) et un majorant de l'aire en construisant des rectangles au dessus de la courbe (voir rectangles bleus).
En effet, l'aire d'un rectangle est facile à calculer. Il suffit donc de faire la somme des aires de chacun des rectangles pour obtenir un encadrement de l'aire recherchée.
On cherche à déterminer l'aire du rectangle dont la base est située entre les abscisses $x$ et $x+dx$ (dx désignant la largeur de chaque rectangle) et dont la hauteur est telle que le rectangle soit situé juste sous la courbe $\mathcal C$.
Exprimer cette aire en fonction de $x$, $dx$ et la fonction $f$
# collapse
# aireInf = dx * f(x+dx)
On cherche à déterminer l'aire du rectangle dont la base est située entre les abscisses $x$ et $x+dx$ (dx désignant la largeur de chaque rectangle) et dont la hauteur est telle que le rectangle soit situé juste au dessus de la courbe $\mathcal C$.
Exprimer cette aire en fonction de $x$, $dx$ et la fonction $f$
# collapse
# aireSup = dx * f(x)
# On définit notre fonction f
def f(x):
return 4-x*x
Compléter le programme ci-dessous dont le but est de calculer la somme des aires des rectangles sous la courbe (rouges) et la somme des aires des rectangles au dessus de la courbe (bleus).
# Complétez l'algorithme
def rectangles(xmin, xmax, n):
dx=... # ... Largeur d'un rectangle
sommeInf = ... # Aire des rectangles inférieurs
sommeSup = ... # Aire des rectangles supérieurs
# Traitement
x=... # Bord gauche du rectangle considéré
for i in range(...): # répéter ... fois
sommeInf = ...
sommeSup = ...
x = ...
return (sommeInf, sommeSup)
# collapse
def rectangles(xmin, xmax, n):
dx=(xmax - xmin) / n # ... Largeur d'un rectangle
sommeInf = 0 # Aire des rectangles inférieurs
sommeSup = 0 # Aire des rectangles supérieurs
# Traitement
x=xmin # Bord gauche du rectangle considéré
for i in range(n): # Répéter n fois
sommeInf = sommeInf + dx*f(x+dx)
sommeSup = sommeSup + dx*f(x)
x = x + dx
return (sommeInf, sommeSup)
# Votre calcul ici
r = rectangles(0, 2, 5)
r
(4.4799999999999995, 6.08)
Quelle est l'incertitude commise par cet encadrement ?
r[1]-r[0]
1.6000000000000005
Comment augmenter la précision de ce calcul et diminuer cette incertitude ? Modifier votre programme pour donner une valeur de l'aire sous la courbe d'une précision d'au moins 0,1
# collapse
# On augmente le nb de rectangles
# jusqu'à obtenir la précision souhaitée
r = rectangles(0, 2, 100)
print("Précision : ", r[1]-r[0])
r
Précision : 0.08000000000000007
(5.293199999999998, 5.373199999999998)
On souhaite à présent modifier le programme afin d'obtenir un encadrement avec une précision fixée au départ. Par exemple : obtenir un encadrement de l'aire sous la courbe avec une précision d'au moins 0,0001. Que faut-il modifier dans notre algorithme pour arriver à ce résultat ?
Ecrire un programme donnant un encadrement de l'aire avec une précision d'au moins 0,0001.
Combien avez-vous utilisé de rectangles pour arriver à cette précision ?
# collapse
# On introduit une boucle tant que
# pour obtenir la rpécision souhaitée :
# on appelle la fonction rectangles en multipliant par 10
# le nombre de rectangles à chaque nouvel appel
def aire(xmin, xmax, prec):
p = 1
n=1
while p > prec:
n = 10*n
r = rectangles(xmin, xmax, n)
p = r[1] - r[0]
return (r, n)
aire(0, 2, 0.0001)
((5.33329333320509, 5.333373333205089), 100000)
On note l'aire sous la courbe que nous venons de calculer : $\displaystyle \int_0^2 4-x^2~ dx \approx 5,3333$