{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"float: left;\">\n",
    "Université Toulouse 3 Paul Sabatier\n",
    "</div>\n",
    "<div style=\"float: right;\">\n",
    "2018-2019\n",
    "</div>\n",
    "<br>\n",
    "<div style=\"float: left;\">\n",
    "L2 Parcours Spécial\n",
    "</div>\n",
    "<br>\n",
    "<br>\n",
    "<br>\n",
    "<div align=\"center\"; style=\"font-size: 200%; font-weight: bold;\">\n",
    "TP 2 - Calcul Scientifique\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%pylab inline # %pylab inline est un équivalent de l'importation* de numpy et de matplotlib.pyplot\n",
    "\n",
    "#%matplotlib inline\n",
    "#from matplotlib.pyplot import *\n",
    "#from numpy import *\n",
    "#from scipy import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 1 - Résolution d'équations\n",
    "\n",
    "On souhaite comparer, pour la résolution de l'équation non linéaire suivante, une méthode de point fixe et la méthode de Newton: \n",
    "$$f(x)=0, \\quad \\textrm{ avec } \\quad  f(x)=x- \\frac{1}{5}\\sin x -\\frac{1}{2}.$$\n",
    "\n",
    "1) Vérifier que cette équation admet une unique solution  notée $\\bar{x}$ dans $[0,2\\pi]$.\n",
    "2) Soit $(x_n)_{n\\geq 0}$ la suite de réels définis par :\n",
    "\n",
    "\\begin{equation*}\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "x_{n+1}= \\phi (x_{n}), \\\\\n",
    "x_{0}= \\alpha \\in \\mathbb{R}, \n",
    "\\end{array}\n",
    "\\right .\n",
    "\\qquad \\textrm{ avec } \\qquad \\phi (x)=\\frac{1}{5} \\sin x +\\frac{1}{2}.\n",
    "\\end{equation*}\n",
    "\n",
    "Implémenter une fonction `pointfixe` qui \n",
    "  - prend en argument la donnée initiale $\\alpha$ et une tolérance $tol$\n",
    "  - renvoie la première valeur de $x_k$ telle que $|f(x_k)|<tol$ ainsi que le premier entier $k$ pour lequel cette valeur est atteinte.\n",
    "\n",
    "Tester cette méthode avec $\\alpha=-5$. Combien faut-il d'itérations de la méthode pour les tolérances $10^{-3},\\ 10^{-5}$ et $10^{-9}$ ?\n",
    "\n",
    "3) Soit $(y_n)_{n\\geq 0}$ la suite définie par:\n",
    "\\begin{equation*}\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "y_{n+1}= y_n-\\frac{f(y_n)}{f'(y_n)} , \\\\\n",
    "y_{0}= \\alpha \\in \\mathbb{R}, \n",
    "\\end{array}\n",
    "\\right .\n",
    "\\end{equation*}\n",
    "Implémenter une fonction `Newton` qui \n",
    "  - prend en argument la valeur initiale $\\beta$ et une tolérance $tol$\n",
    "  - renvoie la première valeur de $y_k$ telle que $|y_{k+1}-y_k|<tol$ ainsi que le premier entier $k$ pour lequel cette valeur est atteinte. \n",
    "\n",
    "Tester cette méthode avec $\\alpha=-5$. Combien faut-il d'itérations pour les tolérances $10^{-3},\\ 10^{-5}$ et $10^{-9}$ ?\n",
    "  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 2 - Résolution approchée d'Equations différentielles linéaires\n",
    "\n",
    "L'évolution au cours du temps de la concentration de certaines réactions chimiques peut être décrite par l'équation suivante: \n",
    "\\begin{equation*}\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "y'(t)= \\frac{1}{1+t^2} y(t),\\ t\\geq 0 \\\\\n",
    "y_{0}= y_0\\in \\mathbb{R}, \n",
    "\\end{array}\n",
    "\\right .\n",
    "\\end{equation*}\n",
    "1) Calculer la solution exacte du problème\n",
    "\n",
    "2) Ecrire les méthodes d'Euler explicite et implicite pour la résolution numérique de ce problème.\n",
    "\n",
    "3) Implémenter deux fonctions `EulerE` et `EulerI` qui \n",
    "  - prennent en argument y0, N (le nombre de pas de temps) et T (le temps final de calcul)\n",
    "  - renvoient le vecteur des $y^e_n$ et $y^i_n$ pour $n=0$ à $N$, obetnus par les méthodes d'Euler explicite et implicite respectivement. En prenant $y_0=5, T=50$ et $N=100$ calculer les vecteurs obtenus.\n",
    "  \n",
    "4) Tracer sur un même graphique des valeurs $y^e_n$, $y^i_n$ et $y(t_n)$ calculés par les méthodes d'Euler explicite, implicite et la solution exacte. Recommencer pour $N=1000$ puis $N=10 000$.\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 3 - Equation logistique\n",
    "\n",
    "On considère l'équation logistique utilisée pour modéliser la croissance de populations:\n",
    "\\begin{equation}\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "y'(t)= \\alpha(1-\\frac{y(t)}{K}) y(t),\\ t\\geq 0 \\\\\n",
    "y_{0}= y_0\\in \\mathbb{R},\n",
    "\\end{array}\n",
    "\\right .\n",
    "\\end{equation}\n",
    "où $\\alpha$ et $K$ sont des paramètres strictement positifs décrivant respectivement la vitesse de croissance de la population pour des petites populations et la population maximale que le milieu peut accueillir.\n",
    "\n",
    "1) Vérifier que $y(t)=\\frac{K y_0}{y_0+(K-y_0)e^{-\\alpha t}}$ est solution de ce problème.\n",
    "\n",
    "2) En déduire que, dès que $y_0\\in ]0,K[$, alors, pour tout $t>0$, on a $y(t)\\in ]0;K[$ et $\\lim_{t\\rightarrow \\infty}y(t)=0.$\n",
    "\n",
    "3) On considère un intervalle de temps $[0,T]$ sur lequel on cherche à approcher la solution. On définit une discrétisation à $N+1$ points équidistants $(t_n)_{0\\leq n\\leq N}$ de pas $h$. \n",
    "\n",
    "On définit enfin la méthode de Heun pour la résolution approchée de $y'(t)=f(y(t))$ comme suit : \n",
    "\\begin{equation*}\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "y_0\\\\\n",
    "y_{n+1}=y_n +\\frac{h}{2}\\left[f(y_n)+f(y_n+hf(y_n))\\right],\\ \\forall n=0..N-1 \n",
    "\\end{array}\n",
    "\\right .\n",
    "\\end{equation*}\n",
    "\n",
    "Ecrire les itérations des méthodes d'Euler explicite et de Heun pour l'équation logistique et implémenter une fonction `EulerE` et une fonction `Heun` qui \n",
    "  - prennent en argument $y_0,\\ N,\\ T$ \n",
    "  - renvoient les vecteurs $(y^e_n)_{n=0..N}$ et $(y^H_n)_{n=0..N}$ obtenus par les méthodes d'Euler explicite et Heun respectivement.\n",
    "  \n",
    "4) Tracer sur un même graphe les solutions approchées par ces deux méthodes et la solution exacte pour $T=5$ et $N=500$. Tester le comportement obtenu en fonction du choix de $y_0$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
