En tête general

(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/

Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.

Approximation d’une intégrale par la méthode des rectangles

*Certaines fonctions n’ont pas de primitives qui peuvent s’écrire à l’aide des fonctions usuelles.*

*C’est par exemple le cas de la fonction f définie sur $\mathbb{R}$ par $f(x)=e^{-x^2}$.*

*Le but de cette activité est d’obtenir malgré tout des valeurs approchées de l’intégrale $K=\int_{0}^{1}{e^{-x²}dx}$*.

I. Introduction de la méthode

1. Placer les points $M_0$ ; $M_1$ ; $M_2$ ; $M_3$ et $M_4$ de la courbe de $f$ d’abscisses respectives $0$ ; $\frac{1}{4}$ ; $\frac{2}{4}$; $\frac{3}{4}$ et $\frac{4}{4}$.

Rectangles à compléter

2. A l’aide de ces points, inscrire $4$ rectangles sous la courbe de $f$, de largeur $\frac{1}{4}$ et de longueur maximale.

3. Ecrire une fonction Python f qui prend x en argument et renvoie l’image de $x$ par $f$.

*Important : Ne pas utiliser la fonction exp. Utiliser les notations de puissances à partir de la constante e, obtenue avec from math import e.*

In [ ]:
from math import e
# Ecrire la fonction
In [ ]:
# Tester la fonction

Ecrire une fonction Python Aire_rect qui reçoit en argument la largeur l et la longueur L d’un rectangle et renvoie son aire.

In [ ]:
# Ecrire la fonction
In [ ]:
# Tester la fonction

A l’aide de ces fonctions, calculer la somme des aires des $4$ rectangles précédents, et en déduire un minorant de $K$.

In [ ]:
# Effectuer les saisies nécessaires

II. Automatisation de la construction et du calcul

1. La fonction ci-dessous trace la courbe représentative de $f$ sur l’intervalle $[0;1]$ et construit les 4 rectangles sous la courbe de $f$. Tester cette fonction.

In [ ]:
import matplotlib.pyplot as plt
import matplotlib.patches as ptc
import numpy as np

def Methode_rectangle():
    
    # tracé de la courbe de f
    prec=0.05
    abs_fonc = np.arange(0,1+prec,prec)
    ord_fonc = f(abs_fonc)
    plt.plot(abs_fonc,ord_fonc,color='green')
    
    ax = plt.gca()
    
    # tracé des rectangles
    l=1/4
    for k in range(4):
        x=k*1/4
        L=f(x+1/4)
        #Rectangle défini par le point en bas à gauche,
        #sa largeur l et sa longueur L
        rect=ptc.Rectangle( (x,0) , l, L, fill=False)
        ax.add_patch(rect)  

    # reglage des bornes des axes du repere
    plt.axis([0,1,0,1]) 
    # affichage    
    plt.show() 
    
    # (Ces fonctionnalités sont désactivées dans la version Notebook)
    # attente d'une action de clic sur la fenetre puis fermeture
    # plt.waitforbuttonpress() 
    # plt.close() 

    return None
In [ ]:
#Test de la fonction
Methode_rectangle()

2. Prévoir les valeurs successives prises par les variables x, l et L dans la boucle en complétant ce tableau :

$k$ 0 1 2 3
$x$
$l$
$L$

Compléter la fonction précédente pour qu’elle renvoie Aire_inf qui est la somme des aires de ces rectangles.

*Aides :* *On pourra ajouter un compteur qui s’incrémente à chaque étape de la boucle, en utilisant la fonction* Aire_rect *précédemment écrite.* *On pourra éventuellement utiliser l’instruction* plt.text(0,-0.1,’Aire=’+str(Aire_inf)) *pour afficher cette aire sur le graphique.*

Tester et vérifier qu’on retrouve le résultat de la question I.3.

In [ ]:
# Tester la fonction modifiée

3. Modifier la fonction pour qu’elle reçoive en argument le nombre n de rectangles souhaités, et adapter l’affichage et le calcul. Tester pour $n=10$ puis pour $n=100$.

In [ ]:
#Effectuer les tests

III. Recherche de la précision de la méthode

1. A l'aide de la figure dynamique ci-dessous, vérifier les résultats des questions I.3 et II.3.

*(Pour faire apparaître et activer la figure dynamique, sélectionner la cellule et valider avec SHIFT+Entrée).*

In [3]:
#Sélectionner cette zone puis SHIFT+ENTREE
from IPython.display import display, HTML ; display(HTML('fig_dyn_GeoGebra/Rectangles.html'))

2. On se place dans le cas général où on trace $n$ rectangles de même largeur sous la courbe de $f$ sur l’intervalle $[0;1]$, et on note $s_n$ la somme de leurs aires (voir la figure dynamique fournie).

Justifier que $ s_n=\frac{1}{n} \left ( f(\frac{1}{n})+f(\frac{2}{n})+f(\frac{3}{n})+⋯+f(\frac{n}{n}) \right ) =\frac{1}{n} \sum_{k=0}^{n-1} \ f \left ( \frac{k+1}{n} \right ) \ $

3. On considère de la même façon la somme $S_n$ des aires de $n$ rectangles de même largeur construits au-dessus de la courbe de $f$ sur l’intervalle $[0;1]$ (utiliser le curseur vert sur la figure dynamique fournie)

Donner une expression de $S_n$ similaire à celle de $s_n$.

4. Exprimer $S_n-s_n$ en fonction de $n$.

En admettant que $s_n \leqslant \int_{0}^{1} \ e^{-x²} dx \ \leqslant S_n $, en déduire que : $ 0 \leqslant ∫_0^1 \ e^{-x^2} dx \ -s_n \leqslant 1/n $ .

Quelle valeur de $n$ faut-il choisir pour que $s_n$ soit une valeur approchée de $K$ à $10^{-4}$ près ?

Donner une valeur approchée à $10^{-4}$ près de cette intégrale $K$ à l’aide de vos fonctions Python de la partie II.

In [ ]:
# Effectuer les saisies nécessaires

Georg Friedrich Bernhardt Riemann (1826-1866) est à l’origine de cette méthode d’approximation d’intégrales à l’aide de rectangles

Riemann

(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/