{ "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