{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# L3 Analyse Numérique – TP5\n",
    "\n",
    "[Dequay A](mailto:antoine.dequay@ens-rennes.fr) &\n",
    "[Le Barbenchon P](mailto:pierre.le-barbenchon@ens-rennes.fr). TP ENS Rennes\n",
    "\n",
    "[Boutin B](mailto:benjamin.boutin@univ-rennes1.fr). Cours et TP Université de Rennes 1 - UFR Mathématiques  \n",
    "\n",
    "Dans ce TP, nous étudierons des méthodes pour résoudre des équations non-linéaires.\n",
    "\n",
    "- Exercice 1 : *ordre de convergence de méthodes numériques*\n",
    "- Exercice 2 : *systèmes d'équations non-linéaires*\n",
    "- Exercice 3 : *méthode d'homotopie*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "  \n",
    "Soit $f$ une fonction dérivable et convexe sur un intervalle $[a,b]$. On suppose que l'équation $f(x) = 0$ admet une racine unique $\\alpha$ sur l'intervalle $[a,b]$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Méthode de la corde \n",
    "On trace la corde $[AB]$ où $A(a,f(a))$ et $B(b,f(b))$. Elle coupe l'axe des abscisses en $C(c_1,0)$. Si $\\alpha \\in [a,c_1[$, on trace la corde $[AC_1]$ où $C_1(c_1,f(c_1))$. Sinon on trace la corde $[C_1B]$ où $C_1(c_1,f(c_1))$. Puis on itère le procédé.  On construit la suite $(c_k)_{k\\in \\mathbb N^*}$ qui  converge vers $\\alpha$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Méthode de la sécante \n",
    "Soit $x_0, x_1 \\in [a,b]$. On trace la droite qui passe par $(x_0,f(x_0))$ et $(x_1, f(x_1))$, qui coupe l'axe des abscisses en $x_2$. On trace la droite qui passe par $(x_1,f(x_1))$ et $(x_2, f(x_2))$ qui coupe l'axe des abscisses en $x_3$, etc. On construit la suite $(x_k)_{k\\in \\mathbb N}$ qui converge vers $\\alpha$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Méthode de Newton \n",
    "Soit $x_0 \\in [a,b]$ tel que $f'(x_0)\\neq 0$. On trace la droite tangente à la courbe de $f$ qui passe par $(x_0,f(x_0))$, qui coupe l'axe des abscisses en $x_1$. On trace la droite tangente à la courbe de $f$ qui passe par $(x_1,f(x_1))$, qui coupe l'axe des abscisses en $x_2$,etc. On construit la suite $(x_k)_{k\\in \\mathbb N}$ qui converge vers $\\alpha$.\n",
    "\n",
    "On peut généraliser cette méthode en dimension supérieure (en utilisant la notion de différentielle)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercice 1 : Ordre de convergence de méthodes numériques\n",
    "\n",
    "Considérons l'équation suivante, d'inconnue réelle $x$:\n",
    "\\begin{equation}\n",
    " \\sqrt{1+x^2} = \\cosh(x-1).\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 1\n",
    "À la main, déterminer le nombre de solutions de cette équation. Pour chacune, déterminer numériquement un intervalle de longueur `1` la contenant."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 2\n",
    "Programmer successivement la méthode de la corde, de la sécante et de Newton pour identifier une valeur approchée aussi précise que possible de chacune des solutions. Dans chacun des cas on considérera 10 itérations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Expliquer ce qu'il se produit pour la méthode de la sécante."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`répondre ici`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 3\n",
    "Pour chacune des méthodes précédentes, stocker les itérations successives et les afficher de sorte à observer à l'œil la croissance effective du nombre de décimales exactes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 4\n",
    "Pour tout $k \\in \\{1, \\dots , 10\\}$, on note $e_k = \\vert x_k-x^\\star\\vert$, où $x_k$ désigne l'approximation donnée par chaque méthode après $k$ itérations et $x^\\star$ est l'approximation donnée par la méthode de Newton après $30$ itérations. Tracer en échelle logarithmique la quantité $e_k$ en abscisse et $ e_{k+1}$ en ordonnée, et quantifier l'ordre de convergence effectif de chaque méthode.\n",
    "\n",
    "On pourra superposer au tracer les droites de pente $1$, $\\tfrac{1+\\sqrt{5}}{2}$ et $2$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercice 2 : Systèmes d'équations linéaires\n",
    "\n",
    "On souhaite déterminer les points d'intersection dans $\\mathbb R^2$ entre les courbes d'équations cartésiennes suivantes:\n",
    "$$\n",
    "\\left\\{\\begin{aligned}\n",
    "    x^2 + 4 y^2 &= 4 \\\\\n",
    "    \\exp(y+y^2) &= 2+\\sin(x)\n",
    "\\end{aligned}\\right.\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 1\n",
    "Définir une fonction $F:\\mathbb R^2\\to \\mathbb R^2$ dont les zéros sont les solutions du système précédent et calculer sur le papier sa différentielle en tout point.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "F(x,y) = \\texttt{écrire votre fonction ici}\n",
    "$$\n",
    "$$\n",
    "dF(x,y) : (h,v) \\mapsto \\texttt{écrire sa différentielle ici}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Implémenter cette fonction et la matrice jacobienne représentant sa différentielle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 2\n",
    "Utiliser la méthode de Newton pour déterminer les zéros de $F$ à partir de la donnée initiale $(x,y)=(1,0)$, puis de la donnée $(x,y)=(-1,0)$. On mènera l'algorithme sur 15 itérations dans chacun des cas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Tracer les courbes d'erreurs comme dans l'exercice précédent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercice 3\n",
    "On considère l'équation suivante dépendant d'un paramètre $\\mu \\in \\mathbb R$, d'inconnue réelle $x(\\mu)$:\n",
    "\\begin{equation}\n",
    " x \\exp(x) = \\mu.\n",
    "\\end{equation}\n",
    "\n",
    "Lorsque $\\mu=0$, l'unique solution est $x(0)=0$. Introduisons un petit paramètre $h>0$ de votre choix."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 1\n",
    "Considérons à présent $\\mu= h$, et déterminons la solution $x(h)$ correspondante. Mettre en œuvre la méthode de Newton à partir de l'initialisation $x(0)$ pour déterminer $x(h)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 2\n",
    "Poursuivre la méthode, en augmentant progressivement la valeur du paramètre $\\mu$ par pas de $h$, et en obtenant les valeurs de la solution $x(\\mu)$ correspondante sur un graphique."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 3\n",
    "Déterminer également les solutions pour les valeurs du paramètre $\\mu\\in]-1,0]$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.6.5 64-bit",
   "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.5"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
