{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![En tête general](img/En_tete_general.png)\n", "\n", "\n", "*(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/*\n", "\n", " Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Approximation d’une intégrale par la méthode des rectangles" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## I. Introduction de la méthode" ] }, { "cell_type": "markdown", "metadata": {}, "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](img/Methode_rectangles_intro.png)\n" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import e\n", "# Ecrire la fonction\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Tester la fonction\n" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Ecrire la fonction\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Tester la fonction\n" ] }, { "cell_type": "markdown", "metadata": {}, "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$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Effectuer les saisies nécessaires\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## II. Automatisation de la construction et du calcul " ] }, { "cell_type": "markdown", "metadata": {}, "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$. \n", "Tester cette fonction.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import matplotlib.patches as ptc\n", "import numpy as np\n", "\n", "def Methode_rectangle():\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", " # tracé des rectangles\n", " l=1/4\n", " for k in range(4):\n", " x=k*1/4\n", " L=f(x+1/4)\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", " # 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 None\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Test de la fonction\n", "Methode_rectangle()" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "markdown", "metadata": {}, "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.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Tester la fonction modifiée\n" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Effectuer les tests\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## III. Recherche de la précision de la méthode" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t
\n", "\t\t\t\t\t\t\n", "\t\t\t
\n", "\t\t\t\t
\n", "\t\t\t\t\t\t\t\t\n", "\t\t\t\t
\n", "\t\t\t
\n", "\t\t
\n", "\t\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Sélectionner cette zone puis SHIFT+ENTREE\n", "from IPython.display import display, HTML ; display(HTML('fig_dyn_GeoGebra/Rectangles.html'))" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Effectuer les saisies nécessaires\n" ] }, { "cell_type": "markdown", "metadata": {}, "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](img/Methode_rectangles_Riemann.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/*\n" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 }