{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Listes et fonctions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graphique de fonctions\n", "\n", "Nous allons tracer la représentation graphique de \n", "\n", "$$ f : x \\mapsto x^2 - 10x + 20 $$\n", "\n", "**Recopier** le programme suivant, **compléter** les pointillés et calculer les images jusqu'à 8." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L'image de ... est ...\n", "L'image de ... est ...\n" ] } ], "source": [ "def f(x):\n", " return x**2 - 10*x + 20\n", "\n", "# image de 0\n", "print(\"L'image de\", \"...\",\" est\", \"...\")\n", "# image de 1\n", "print(\"L'image de\", \"...\",\" est\", \"...\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour tracer le graphique de cette fonction, il faudrait *enregistrer* toutes ces valeurs et donc utiliser des variables. \n", "\n", "Mettre plusieurs valeurs dans une seule variable c'est possible, on utilise des `listes` (on les a déjà rencontré plusieurs fois).\n", "\n", "**Recopier et compléter** ce programme pour enregistrer les images et les antécédents jusqu'à 10." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L'image de ... est ... On l'ajoute à la liste\n", "L'image de ... est ... On l'ajoute à la liste\n" ] } ], "source": [ "def f(x):\n", " return x**2/10 - 5\n", "\n", "images = [] # La liste est vide\n", "antecedents = []\n", "\n", "\n", "# image de 0\n", "print(\"L'image de\", \"...\",\" est\", \"...\", \"On l'ajoute à la liste\")\n", "antecedents.append(0) # On ajoute (append) 0 à la liste des antecedents\n", "# image de 1\n", "print(\"L'image de\", \"...\",\" est\", \"...\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous allons maintenant enfin pouvoir tracer le graphique.\n", "\n", "**Ajouter** la ligne suivante au début de votre programme." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ajouter** cette ligne à la fin." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(antecedants, images)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vous avez tracer la courbe représentative de de la fonction $f$.\n", "\n", "![Représentation graphique de f](./fig/plt_f.png)\n", "\n", "Dans un nouveau fichier, **tracer** la courbe représentative pour x allant de 0 à 15 de la fonction $g$ tel que\n", "$$ g : x \\mapsto -(x - 5)^2 + 5$$\n", "\n", "![Représentation graphique de f](./fig/plt_g.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Précision et controle du tracé\n", "\n", "Pour le moment, on sait donner un maximum à l'antécédent $x$ mais on ne peut pas contrôler le minimum ni le pas (l'écart en 2 valeurs de $x$). \n", "\n", "Or pour tracer précisément la représentation graphique d'une fonction, nous avons besoin de contrôler la **fenêtre** (minimum et maximum) et le **pas**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Boucle `while` (tant que )\n", "\n", "Une boucle `while` permet de répeter une ou plusieurs actions **tant qu'** une condition est vérifiée.\n", "\n", "Les 2 programmes ci-dessous font la même chose." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n" ] } ], "source": [ "x = 0\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1\n", "\n", "print(x)\n", "x = x+1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n" ] } ], "source": [ "x = 0\n", "while x < 10:\n", " print(x)\n", " x = x + 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Commenter** le programme avec le `while`.\n", "\n", "Que se passe-t-il si on inverse les 2 dernières lignes?\n", "\n", "**Réécrire** le programme suivant en utilisant une boucle `while` et en stockant les antécédents." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Les images sont [0.0, 1.0, 1.2246467991473532e-16, -1.0, -2.4492935982947064e-16, 1.0, 3.6739403974420594e-16, -1.0, -4.898587196589413e-16, 1.0, 6.123233995736766e-16, -1.0, -7.347880794884119e-16, 1.0, 8.572527594031472e-16, -1.0, -9.797174393178826e-16, 1.0, 1.102182119232618e-15, -1.0]\n" ] } ], "source": [ "from math import sin, pi\n", "\n", "def h(x):\n", " return sin(x*pi/2)\n", "\n", "images = []\n", "antecedants = []\n", "\n", "# image de 0\n", "print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n", "antecedents.append(0)\n", "images.append(h(0))\n", "\n", "# image de 1\n", "print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n", "antecedents.append(1)\n", "images.append(h(1))\n", "\n", "# ....\n", "\n", "# image de 20\n", "print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n", "antecedents.append(20)\n", "images.append(h(20))\n", "\n", "print(\"Les images sont \", images)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Modifier** votre programme pour que les antécédents aillent de -2 à 2.\n", "\n", "**Modifier** votre programme pour que les antécédents augmentent avec un pas de 0.5 au lieu de 1.\n", "\n", "**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 1. \n", "\n", "**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.5. \n", "\n", "**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.1.\n", "\n", "En regroupant les 3 programmes écrit précedement, **tracer** sur le même graphique les 3 représentations pour observer l'amélioration de la précision.\n", "\n", "*Astuce*: pour tracer 3 graphiques en 1, on fait les `plt.plot(...)` de chaque graphique et uniquement à la fin on lance `plt.show()`.\n", "\n", "![Comparaison des pas](./fig/comp_sin.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.2" } }, "nbformat": 4, "nbformat_minor": 2 }