{"cells":[{"metadata":{},"cell_type":"markdown","source":"![En tête general](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/En_tete_general.png)\n\n\n© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n\n Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n"},{"metadata":{},"cell_type":"markdown","source":"# Approximation d’une intégrale par la méthode des rectangles (Corrigé)"},{"metadata":{},"cell_type":"markdown","source":"*Certaines fonctions n’ont pas de primitives qui peuvent s’écrire à l’aide des fonctions usuelles.* \n\n*C’est par exemple le cas de la fonction $f$ définie sur $\\mathbb{R}$ par $f(x)=e^{-x^2}$.* \n\n*Le but de cette activité est d’obtenir malgré tout des valeurs approchées de l’intégrale\n$K=\\int_{0}^{1}{e^{-x²}dx}$*. \n"},{"metadata":{},"cell_type":"markdown","source":"## I. Introduction de la méthode"},{"metadata":{},"cell_type":"markdown","source":"__1. Placer les points $M_0$ ; $M_1$ ; $M_2$ ; $M_3$ et $M_4$ de la courbe de $f$ d’abscisses respectives $0$ ; $\\displaystyle \\frac{1}{4}$ ; $\\displaystyle \\frac{2}{4}$; $\\displaystyle \\frac{3}{4}$ et $\\displaystyle \\frac{4}{4}$.__\n\n![Rectangles à compléter](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Methode_rectangles_intro.png)\n"},{"metadata":{},"cell_type":"markdown","source":"__2. A l’aide de ces points, inscrire $4$ rectangles sous la courbe de $f$, de largeur $\\displaystyle \\frac{1}{4}$ et de longueur maximale.__\n"},{"metadata":{},"cell_type":"markdown","source":"__3. Ecrire une fonction Python f qui prend x en argument et renvoie l’image de $x$ par $f$.__\n\n*Important : Ne pas utiliser la fonction exp. Utiliser les notations de puissances à partir de la constante e, obtenue avec from math import e.* \n"},{"metadata":{"trusted":false},"cell_type":"code","source":"from math import e\n# Ecrire la fonction\n\ndef f(x):\n return e**(-x**2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction\nf(1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__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.__\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Ecrire la fonction\ndef Aire_rect(l,L):\n return l*L","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction\nAire_rect(3,5)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__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$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Effectuer les saisies nécessaires\nAire_rect(1/4,f(1/4))+Aire_rect(1/4,f(2/4))+Aire_rect(1/4,f(3/4))+Aire_rect(1/4,f(4/4))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## II. Automatisation de la construction et du calcul "},{"metadata":{},"cell_type":"markdown","source":"__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$. \nTester cette fonction.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport matplotlib.patches as ptc\nimport numpy as np\n\ndef Methode_rectangle(n=4):\n \n #initialisation du graphique\n plt.figure()\n \n # tracé de la courbe de f\n prec=0.05\n abs_fonc = np.arange(0,1+prec,prec)\n ord_fonc = f(abs_fonc)\n plt.plot(abs_fonc,ord_fonc,color='green')\n \n ax = plt.gca()\n \n #initialisation du compteur\n Aire_inf=0\n \n # tracé des rectangles et calcul de l'aire\n l=1/n\n for k in range(n):\n x=k*1/n\n L=f(x+1/n)\n #Rectangle défini par le point en bas à gauche,\n #sa largeur l et sa longueur L\n rect=ptc.Rectangle( (x,0) , l, L, fill=False)\n ax.add_patch(rect) \n \n #incrément du compteur\n Aire_inf = Aire_inf + Aire_rect(l,L)\n\n # affichage de l'aire sous la figure\n plt.text(0,-0.2,'Aire='+str(Aire_inf)) \n # reglage des bornes des axes du repere\n plt.axis([0,1,0,1]) \n # affichage \n plt.show() \n\n # (Ces fonctionnalités sont désactivées dans la version Notebook)\n # attente d'une action de clic sur la fenetre puis fermeture\n # plt.waitforbuttonpress() \n # plt.close()\n\n return Aire_inf\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#Test de la fonction\nMethode_rectangle()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__2. Prévoir les valeurs successives prises par les variables x, l et L dans la boucle en complétant ce tableau :__\n\n\n| $k$ | 0 | 1 | 2 | 3 |\n| :-------: |:--: | :--: | :--: | :--: |\n| $x$ | | | | |\n| $l$ | | | | |\n| $L$ | | | | |\n"},{"metadata":{},"cell_type":"markdown","source":"__Compléter la fonction précédente pour qu’elle renvoie Aire_inf qui est la somme des aires de ces rectangles.__\n\n\n*Aides :*\n*On pourra ajouter un compteur qui s’incrémente à chaque étape de la boucle, en utilisant la fonction* Aire_rect *précédemment écrite.* \n*On pourra éventuellement utiliser l’instruction* plt.text(0,-0.2,’Aire=’+str(Aire_inf)) *pour afficher cette aire sur le graphique.* \n\n__Tester et vérifier qu’on retrouve le résultat de la question I.3.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction modifiée\nMethode_rectangle()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__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$.__\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"#Effectuer les tests\nMethode_rectangle(10) , Methode_rectangle(100) ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## III. Recherche de la précision de la méthode"},{"metadata":{},"cell_type":"markdown","source":"__1. A l'aide de la figure dynamique ci-dessous, vérifier les résultats des questions I.3 et II.3.__\n\n*(Pour faire apparaître et activer la figure dynamique, sélectionner la cellule et valider avec SHIFT+Entrée).*\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"#Sélectionner cette zone puis SHIFT+ENTREE\nfrom IPython.display import HTML ; HTML(\"\"\"\"\"\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__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).__\n\n__Justifier que\n$\\displaystyle s_n=\\frac{1}{n} \\left( f \\left(\\frac{1}{n}\\right)+f \\left(\\frac{2}{n}\\right)+f \\left(\\frac{3}{n}\\right)+⋯+f \\left(\\frac{n}{n}\\right) \\right) =\\frac{1}{n} \\sum_{k=0}^{n-1} \\ f \\left ( \\frac{k+1}{n} \\right ) \\ $__\n\n"},{"metadata":{},"cell_type":"markdown","source":"__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)__\n\n__Donner une expression de $S_n$ similaire à celle de $s_n$.__\n"},{"metadata":{},"cell_type":"markdown","source":"__4. Exprimer $S_n-s_n$ en fonction de $n$.__\n\n__En admettant que $\\displaystyle s_n \\leqslant \\int_{0}^{1} \\ e^{-x²} dx \\ \\leqslant S_n $, en déduire que :\n$\\displaystyle 0 \\leqslant ∫_0^1 \\ e^{-x^2} dx \\ -s_n \\leqslant \\frac{1}{n} $ .__\n\n__Quelle valeur de $n$ faut-il choisir pour que $s_n$ soit une valeur approchée de $K$ à $10^{-4}$ près ?__\n\n__Donner une valeur approchée à $10^{-4}$ près de cette intégrale $K$ à l’aide de vos fonctions Python de la partie II.__\n\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Effectuer les saisies nécessaires\nMethode_rectangle(10000)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Georg Friedrich Bernhardt Riemann (1826-1866) est à l’origine de cette méthode d’approximation d’intégrales à l’aide de rectangles\n\n![Riemann](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Methode_rectangles_Riemann.png)"},{"metadata":{},"cell_type":"markdown","source":"© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n

\nDernière modification de l'activité : Juillet 2022"}],"metadata":{"celltoolbar":"Raw Cell Format","kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}