{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#  L3 E - S5 2018-19 --- TD ordinateurs --- séance 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Un peu d'analyse et de représentations graphiques"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "L'instruction $\\texttt{pylab inline}$ permettra l'insertion des graphiques dans la feuille notebook (au lieu de les avoir dans des fenêtres \"surgissantes\")."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pylab inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Et on fait appel à la bibliothèque $\\texttt{matplotlib}$ pour utiliser les fonctionnalités graphiques de ${\\rm python}$ :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib.pylab import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Exemple de représentation graphique :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(t):\n",
    "    return t**2  \n",
    "\n",
    "t = linspace(-4, 5, 30)   # on choisit le domaine de définition de la fonction \n",
    "                            # et le pas : 30 points de -4 à 5\n",
    "y=f(t)\n",
    "    \n",
    "plot(t, y)\n",
    "show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Est-ce clair ? On a tracé la fonction $y=f(t)=t^2$ sur l'intervalle $[-5,5]$. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(t):\n",
    "    return sqrt(t**2+2)\n",
    "\n",
    "\n",
    "t = linspace(-4, 5, 30)    \n",
    "\n",
    "y=f(t)\n",
    "\n",
    "plot(t, y)\n",
    "savefig(\"mon_test.pdf\")  \n",
    "show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On peut vouloir conserver ce joli dessin dans un fichier pdf ; il sufit de le demander avec $\\texttt{savefig}$ ; pour cela, il faut lui dire dans quel répertoire sauvegarder le fichier et c'est l'objet des instructions suivantes :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.chdir('......')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Evidemment, chacun doit ajouter le bon chemin vers le répertoire choisi. La commande suivante permet de savoir dans quel répertoire la page notebbok actuelle est ouverte : "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "% pwd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A présent, on pourra vérifier que la commande $\\texttt{savefig(mondessin.pdf)}$ a gardé une copie du fichier $\\texttt{monfichier.pdf}$ dans le répertoire qui a été indiqué : "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(t):\n",
    "    return t**2  \n",
    "\n",
    "t = linspace(-4, 5, 30)    \n",
    "\n",
    "y=f(t)\n",
    "\n",
    "plot(t, y)\n",
    "savefig(\"monfichier.pdf\")  \n",
    "show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On peut également \"décorer\" le dessin de commentaires, labels, légende, titre..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(t):\n",
    "    return sqrt(t**2+2)  \n",
    "\n",
    "t = linspace(-4, 5, 31)    # 31 points between 0 and 3\n",
    "\n",
    "y=f(t)\n",
    "\n",
    "plot(t,y)\n",
    "    \n",
    "xlabel(\"t\")\n",
    "ylabel(\"y\")\n",
    "legend([\"t^2*exp(-t^2)\"])\n",
    "axis([-2, 3, -0.05, 6])   # [tmin, tmax, ymin, ymax]\n",
    "title(\"Le titre de mon dessin\")\n",
    "savefig(\"x-puissance-2.pdf\")\n",
    "\n",
    "show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Il est très souvent utile de pouvoir visualiser plusieurs tracés sur une même figure : "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def g1(t):\n",
    "    return t**3-2*t**2-t+2\n",
    "def g2(t):\n",
    "    return 3*t**2-4*t-1\n",
    "t = linspace(-1.5, 2.6, 60)\n",
    "y1 = g1(t)\n",
    "y2 = g2(t)\n",
    "plot(t, y1, \"g-\")      \n",
    "plot(t, y2, \"yo\")      \n",
    "xlabel(\"abscisse t\")\n",
    "ylabel(\"ordonnee y\")\n",
    "axis([-2, 3, -3, 6])\n",
    "legend([\"t**3-2*t**2-t-2\", \"3*t**2-4*t-1\"])\n",
    "title(\"f et sa derivee\")\n",
    "savefig(\"f-et-sa-derivee.pdf\")\n",
    "\n",
    "show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La commande $\\texttt{figure()}$ avec $\\texttt{subplot}$ permet de séparer plusieurs tracés sur différents dessins :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "figure()          # pour faire apparaître des graphiques séparés \n",
    "subplot(2, 1, 1)  ### la 1ère figure\n",
    "\n",
    "def g1(t):\n",
    "    return t**3-2*t**2-t+2\n",
    "def g2(t):\n",
    "    return 3*t**2-4*t-1\n",
    "t = linspace(-1.5, 2.6, 60)\n",
    "y1 = g1(t)\n",
    "y2 = g2(t)\n",
    "plot(t, y1, \"g-\")      \n",
    "hold         \n",
    "plot(t, y2, \"yo\")      \n",
    "xlabel(\"abscisse t\")\n",
    "ylabel(\"ordonnee y\")\n",
    "legend([\"t**3-2*t**2-t-2\", \"3*t**2-4*t-1\"])\n",
    "title(\"f et sa derivee\")\n",
    "savefig(\"f-et-sa-derivee_1er-exemple.pdf\")\n",
    "\n",
    "subplot(2, 1, 2)  ### la 2ème figure\n",
    "\n",
    "def g1(t):\n",
    "    return 2*sin(3*t/2)\n",
    "def g2(t):\n",
    "    return 3*cos(3*t/2)\n",
    "t = linspace(-6, 6, 100)\n",
    "y1 = g1(t)\n",
    "y2 = g2(t)\n",
    "plot(t, y1, \"g-\")  \n",
    "hold         \n",
    "plot(t, y2, \"yo\")      \n",
    "xlabel(\"abscisse t\")\n",
    "ylabel(\"ordonnee y\")\n",
    "legend([\"2*sin(3*t/2)\", \"3*cos(3*t/2)\"])\n",
    "title(\"f et sa derivee\")\n",
    "savefig(\"f-et-sa-derivee_2d-exemple.pdf\")\n",
    "show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercices\n",
    "\n",
    "Tous les graphiques réalisés sont à sauvegarder dans le répertoire personnel "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Exercice 1 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Tracer sur un même dessin et pour $t>0$ les graphes des fonctions $x \\mapsto x^a$ pour $a \\in \\{-1,0,1/2,1,2\\}$ : on distinguera les représentations graphiques en prenant des couleurs différentes et on fera un dessin avec une fenêtre avec $x \\in ]0,3]$ et un autre dessin avec une fenêtre avec $x \\in ]0,10]$.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Exercice 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "On se donne une application de classe $\\mathcal C^1$ sur un intervalle $[a,b]$. Supposant qu'on ne connaît pas sa dérivée, on va la calculer en considérant, pour $h$\n",
    "petit, la fonction suivante, définie pour $x\\in [a+h,b-h]$ :\n",
    "\n",
    "$$x \\mapsto \\frac{f(x+h)-f(x-h)}{2h}$$\n",
    "\n",
    "1. Ecrire une fonction ${\\rm \\texttt{ApproximationDerivee(f,h,t)}}$ qui retourne $\\displaystyle \\frac{f(x+h)-f(x-h)}{2h}$.\n",
    "\n",
    "\n",
    "2. Tester la qualité de cette approximation pour la fonctions $f(t)=t^3-t$, puis pour \n",
    "$g(t)=\\sin(t)$. Chaque fois, on tracera sur un même graphique les graphes de $f$, $f'$\n",
    "et de l'approximation de $f'$. De plus, on fera apparaître les 3 graphiques dans  une même fenêtre. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Exercice 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "On se donne une fonction strictement convexe. On rappelle que cela signifie\n",
    "que sa courbe repr\\'esentative est toujours en-dessous de ses cordes :\n",
    "\n",
    "\n",
    "\n",
    "1-- Ecrire une fonction ${\\rm \\texttt{Pente(f,a,b)}}$ qui retourne  le taux d'accroissement de la fonction $f$ sur le segment $[a,b]$, c'est-à-dire $\\displaystyle \\frac{f(b)-f(a)}{b-a}$.\n",
    "\n",
    "\n",
    "2-- Si $f$ est strictement convexe sur $[a,d]$,\n",
    "on sait qu'elle admet un unique minimum. \n",
    "Ecrire une fonction ${\\rm \\texttt{ComparePente(f,a,b,c,d)}}$ qui retourne,\n",
    "parmi les 4 intervalles $[a,b]$, $[a,c]$, $[b,d]$,$[c,d]$,\n",
    "l'intervalle dans lequel se trouve son minimum \n",
    "(voir dessins ci-dessous où on appelle $x_0$  le minimum).\n",
    "\n",
    " \n",
    "3-- Ecrire une fonction ${\\rm \\texttt{ApproximationMinimum(f,a,b,$\\epsilon$)}}$ qui, pour une fonction strictement convexe $f$ sur un intervalle  $[a,b]$, retourne  une approximation de son minimum à $\\epsilon$ près.\n",
    "\n",
    "Tester cette fonction avec $f(t)=t^2$ puis avec $g(t)=(t-2)^2$ sur l'intervalle $[-4,6]$ avec $\\epsilon=0.1$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "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.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
