{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "racine", "balayage" ] }, "source": [ "# Encadrement de $\\sqrt{2}$ par balayage" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "seconde", "première-technologique", "encadrement" ] }, "source": [ "## Présentation de l'activité\n", "- **Niveau de classe :** \n", " - Classe de seconde générale.\n", " - Classe de première de la voie technologique (tronc commun).\n", "- **Références au programme :** \n", " - Seconde : *déterminer par balayage un encadrement de $\\sqrt{2}$ d’amplitude inférieure ou égale à $10^{-n}$*.\n", " - Tronc commun de première de la voie technologique : *valeur approchée d’une solution d’une équation par balayage (les listes pourront être utilisées dans ce cas)*.\n", "- **Description :** approximation de $\\sqrt{2}$, par l'étude de la fonction $x\\mapsto x^2-2$ et la recherche d'un zéro de cette fonction par balayage." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Valeur approchée par défaut\n", "Dans cette partie, nous allons déterminer par balayage une approximation par défaut de $\\sqrt{2}$ avec une erreur inférieure à $10^{-n}$ en utilisant la fonction $x\\mapsto x^2-2$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Importation des librairies graphiques**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Représentation de la fonction $x\\mapsto x^2-2$ sur l'intervalle $[0,2]$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La fonction `representation` trace la représentation graphique d'une fonction $f$. \n", "Elle utilise une subdivision de $[a,b]$ en $N$ intervalles de même longueur. \n", "Elle prend comme paramètres :\n", "- les bornes $a$ et $b$ de l'intervalle $[a,b]$.\n", "- le nombre $N$ d'intervalles de la subdivision." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return x**2-2\n", "\n", "def representation(a,b,N):\n", " pas = (b-a)/N\n", " for i in range(N+1):\n", " x = a+i*pas\n", " plt.plot(x,f(x),'b.')\n", "\n", "\n", "representation(0,2,100) \n", "plt.plot([0,2],[0,0],'r--')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Suggestions pédagogiques\n", "\n", "
\n", "\n", "\n", "* **Expliquer un programme** \n", " - À quoi correspond la variable pas ? Comment est-elle calculée ?\n", " - Expliquer la ligne 7.\n", " - Quelle est la première valeur de `x` dans la boucle de la ligne 7 ?\n", " - Quelle est la dernière valeur de `x` dans la boucle de la ligne 7 ?\n", " - Comment obtenir une valeur approchée de $\\sqrt{2}$ à l'aide du graphique ?\n", "* **Compléter un programme** \n", "\n", " Le programme précédent étant fourni en remplaçant les lignes 2, 5 et 7 par `return ...`,`pas= ...` et `x = ...`, demander aux élèves de compléter les lignes 2, 5 et 7.\n", "\n", "* **Tester** la fonction `representation` pour l’intervalle $[0,2]$ divisé en 100 parties." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Remarque\n", "\n", "
\n", "\n", "Ici, la fonction `plot` est utilisée au fur et à mesure du calcul car la notion de liste ne figure pas au programme de la classe de seconde." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Approximation de $\\sqrt{2}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le programme suivant donne une approximation par défaut de $\\sqrt{2}$ avec une erreur inférieure à $10^{-2}$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimation de racine de racine de 2: 1.420000000000001\n", "Estimation de racine de 2 au carré: 2.016400000000003\n" ] } ], "source": [ "a = 0\n", "b = 2\n", "N = 200\n", "pas = (b-a)/N\n", "\n", "estimation = a \n", "while f(estimation)<0:\n", " estimation = estimation + pas\n", " \n", " \n", "print(\"Estimation de racine de racine de 2:\",estimation) \n", "print(\"Estimation de racine de 2 au carré:\",estimation**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Suggestions pédagogiques\n", "\n", "
\n", "\n", "* **Expliquer un programme**\n", " \n", " Expliquer la valeur de `N` ligne 3.\n", "* **Compléter un programme**\n", "\n", " Le programme précédent étant fourni en remplaçant les lignes 6, 7 et 8 par `estimation = ...`, `while ...` et `estimation = ...`, demander aux élèves de compléter les lignes 6, 7 et 8. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Animation susceptible d'être présentée aux élèves\n", "Le schéma de gauche montre le déplacement de la droite de balayage (droite verte).\n", "Sur le côté droit, la courbe représente les différentes valeurs prises par la variable de balayage $x$. Partant de la valeur 0, la variable x est, tant que $f(x)\\leq0$, incrémentée à chaque étape de la valeur du pas. Dès que $f(x)>0$, la variable de balayage $x$ garde une valeur constante égale à la dernière valeur de $x$ pour laquelle $f(x)\\leqslant 0$, qui constitue une valeur approchée par défaut de $\\sqrt{2}$ à la précision souhaitée." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Once \n", " Loop \n", " Reflect \n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%matplotlib inline\n", "import matplotlib.animation\n", "from IPython.display import HTML\n", "\n", "\n", "def subdivisionIntervalle(a,b,N):\n", " pas = (b-a)/N\n", " return [a+i*pas for i in range(N+1)]\n", "\n", "# constantes\n", "nbFrames = 30\n", "nbSubdivision = 30\n", "a = 0\n", "b = 2\n", "pas = (b-a)/nbSubdivision\n", "estimations = [0]\n", "evolutionAbscisse = subdivisionIntervalle(a,b,nbSubdivision)\n", "\n", "# points de la courbe pour le tracé\n", "abscisses = subdivisionIntervalle(a,b,100)\n", "ordonnees = [f(x) for x in abscisses]\n", "\n", "#Création des figures\n", "fig, (ax1, ax2) = plt.subplots(1, 2,figsize=(15, 6))\n", "ax1.plot(abscisses,ordonnees)\n", "ax1.plot([a,b],[0,0],'r--')\n", "courbeVert, = ax1.plot([],[],'g--',)\n", "courbeConvergence, = ax2.plot([],[],color=\"green\")\n", "\n", "#Réglage des axes\n", "ax2.set_xlim(( 0, 2))\n", "ax2.set_ylim((0, 2))\n", "\n", "def init():\n", " return (courbeVert,)\n", "\n", "def animate(i):\n", " x =evolutionAbscisse[i]\n", " estim = estimations[-1]\n", " if f(x)<=0:\n", " estimations.append(x)\n", " else:\n", " ax2.plot([estim,estim],[a,b],'--',color='orange')\n", " ax2.plot([estim+pas,estim+pas],[a,b],'--',color='orange')\n", " return (courbeVert,)\n", " estimations.append(estim)\n", " courbeVert.set_data([x,x],[-2,2])\n", " courbeConvergence.set_data(evolutionAbscisse[:i+2],estimations)\n", " ax1.set_title(\"x $\\simeq$ {0:.2f}\".format(x))\n", " ax2.set_title(\"{0:.2f} $\\leq$ estimation $\\leq$ {1:.2f}\".format(estim+pas,estim+2*pas))\n", " return (courbeVert,)\n", "\n", "plt.close ()\n", "ani = matplotlib.animation.FuncAnimation(fig, animate, frames=nbFrames,init_func=init,interval=300)\n", "# l'un ou l'autre\n", "HTML(ani.to_jshtml())\n", "#HTML(ani.to_html5_video())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Encadrement de $\\sqrt{2}$ à $10^{-n}$ par balayage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On cherche à déterminer un encadrement de $\\sqrt{2}$ à $10^{-2}$ près par balayage. La valeur approchée précédemment obtenue étant la plus grande valeur de $x$ pour laquelle $f(x)\\leq 0$, si on ajoute à $x$ la valeur du pas (ici $10^{-2}$), on a $f(x+10^{-2})>0$ et donc $x\\leq\\sqrt{2}\n", "\n", "Suggestions pédagogiques\n", "\n", "\n", "\n", "* **Expliquer un programme**\n", "\n", " Que fait l'instruction de la ligne 12 ?\n", "* **Compléter un programme**\n", "\n", " Le programme précédent étant fourni en remplaçant la ligne 12 par `estimationDroite = ...`, demander aux élèves de compléter la ligne 12." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Animation susceptible d'être présentée aux élèves\n", "Balayage à double sens : à partir de $0$ par valeurs croissantes et à partir de $2$ par valeurs décroissantes." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Once \n", " Loop \n", " Reflect \n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%matplotlib inline\n", "import matplotlib.animation\n", "from IPython.display import HTML\n", "\n", "# constantes\n", "nbFrames = 20\n", "nbSubdivision = 30\n", "a = 0\n", "b = 2\n", "pas = (b-a)/nbSubdivision\n", "estimations = [0]\n", "estimationsD = [2]\n", "evolutionAbscisse = subdivisionIntervalle(a,b,nbSubdivision)\n", "evolutionAbscisseD = evolutionAbscisse[::-1]\n", "trouve = False\n", "\n", "# points de la courbe pour le tracé\n", "abscisses = subdivisionIntervalle(a,b,100)\n", "ordonnees = [f(x) for x in abscisses]\n", "\n", "#Création des figures\n", "fig, (ax1, ax2) = plt.subplots(1, 2,figsize=(15, 6))\n", "ax1.plot(abscisses,ordonnees)\n", "ax1.plot([a,b],[0,0],'r--')\n", "courbeVert, = ax1.plot([],[],'g--',)\n", "courbeViolette, = ax1.plot([],[],'m--',)\n", "courbeConvergenceG, = ax2.plot([],[],color=\"g\", label='Balayage gauche')\n", "courbeConvergenceD, = ax2.plot([],[],color=\"m\", label='Balayage droit')\n", "\n", "#Réglage des axes\n", "ax2.set_xlim(( 0, 2))\n", "ax2.set_ylim((0, 2.1))\n", "\n", "def init():\n", " trouve = False\n", " borneA = 0\n", " borneB = 2\n", " return (courbeVert,)\n", "\n", "def animate(i):\n", " global trouve,borneA,borneB\n", " x1 =evolutionAbscisse[i]\n", " x2 = evolutionAbscisseD[i]\n", " estim = estimations[-1]\n", " estimD = estimationsD[-1]\n", " \n", " \n", " if trouve:\n", " ax2.plot([borneA,borneA],[a,b],'--',color='orange')\n", " ax2.plot([borneB,borneB],[a,b],'--',color='orange')\n", " ax2.set_title(\"{0:.2f} $\\leq$ estimation $\\leq$ {1:.2f}, pas = {2:.2f}\".format(borneA,borneB,pas))\n", " return (courbeVert,)\n", " \n", " if f(x1)<=0:\n", " estimations.append(x1)\n", " else:\n", " trouve = True\n", " borneA = estim\n", " borneB = estim+pas\n", " if f(x2)>=0:\n", " estimationsD.append(x2)\n", " else:\n", " trouve = True\n", " borneA = estimD-pas\n", " borneB = estimD\n", " return (courbeVert,)\n", " evolutionInverse = evolutionAbscisse[:i+2]\n", " courbeVert.set_data([x1,x1],[-2,2])\n", " courbeViolette.set_data([x2,x2],[-2,2])\n", " courbeConvergenceG.set_data(evolutionAbscisse[:i+2],estimations)\n", " courbeConvergenceD.set_data(evolutionAbscisseD[:i+2],estimationsD)\n", " ax1.set_title(\"$x_1$ $\\simeq$ {0:.2f}, $x_2$ $\\simeq$ {1:.2f}\".format(x1,x2))\n", " #ax2.set_title(\"Intervalle : [{0:.2f},{1:.2f}]\".format(estim,estimD))\n", " ax2.set_title(\"{0:.2f} $\\leq$ estimation $\\leq$ {1:.2f}\".format(estim,estimD))\n", " return (courbeVert,)\n", "\n", "ax2.legend()\n", "plt.close()\n", "ani = matplotlib.animation.FuncAnimation(fig, animate, frames=nbFrames,init_func=init,interval=300)\n", "# l'un ou l'autre\n", "HTML(ani.to_jshtml())\n", "#HTML(ani.to_html5_video())" ] } ], "metadata": { "celltoolbar": "Tags", "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.5.5" } }, "nbformat": 4, "nbformat_minor": 2 }