{ "metadata": { "name": "", "signature": "sha256:0f0d2576a17d58a47d1a9e63e1c8fb95191f67d4d8137dcd3522461dfe375dec" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TP3: R\u00e9solution d'\u00e9quations non lin\u00e9aires\n", "\n", "## Objectifs\n", "\n", "1. M\u00e9thodes de r\u00e9solution d'\u00e9quations (scalaires) non lin\u00e9aires\n", "2. Utilisation des commandes PYTHON li\u00e9es aux fonctions\n", "\n", "## Utilisation de Python: M\u00e9thodes classiques de r\u00e9solution\n", "\n", "Dans votre dossier \"AN_TP\", cr\u00e9er un dossier TP3-NOM et lancer PYTHON dans ce r\u00e9pertoire.\n", "\n", "### Localisation des racines\n", "\n", "Le but ici est de localiser les quatres premi\u00e8res racines positives de la fonction\n", "\n", "$$\n", "\\displaystyle\n", "F(x)=\\cos(x)\\cosh(x)+1\n", "$$\n", "\n", "1. Cr\u00e9er un fichier \"localisation.py\" o\u00f9 vous \u00e9crirez vos commandes PYTHON\n", "2. Cr\u00e9er un vecteur $X$ qui contiendra les abscisses des points \u00e0 tracer, allant de $0$ \u00e0 $13$ avec un pas $h$ qui sera saisie par l'utilisateur de votre programme (vous, un coll\u00e8gue, votre charg\u00e9 de TP).\n", "3. Cr\u00e9er un vecteur $Y$ contenant les images des points $X$ par la fonction $F$.\n", "4. Tracer le graphe de $F$ sans oublier les axes et les l\u00e9gendes\n", "5. Donner une valeur approch\u00e9e (\u00e0 $10^{-1}$ pr\u00e8s) des $4$ premi\u00e8res racines positives de $F$\n", "6. Utiliser les boites noires de PYTHON (en utilisant les librairies ad\u00e9quates) pour obtenir les 4 premi\u00e8res racines positives de $F$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ins\u00e9rer votre programme comment\u00e9 et r\u00e9pondre aux questions \"th\u00e9oriques\" en commentaire." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### R\u00e9solution par la m\u00e9thode de dichotomie \n", "\n", "On cherche \u00e0 avoir une valeur plus pr\u00e9cise de la premi\u00e8re racine positive de F.\n", "\n", "**Rappel de cours: **\n", "\n", "On part de l'intervalle $[a_0, b_0]$ dans lequel la fonction $F$ change *une seule fois* de signe et on calcule la valeur de $F$ au point $m=\\displaystyle\\frac{a_0+b_0}{2}$\n", "\n", "* Soit $F(a_0) F(m)<0 $ et dans ce cas la racine appartient \u00e0 $[a_0, m]$\n", "* Soit $F(b_0) F(m)<0$ et dans ce cas, la racine appartient \u00e0 $[m, b_0]$\n", "\n", "On localise donc la racine dans un nouvel intervalle $[a_1,\\,b_1 ]$ de longueur moiti\u00e9 et on recommence le proc\u00e9d\u00e9.\n", "\n", "1. Cr\u00e9er un fichier \"dichotomie.py\" o\u00f9 vous \u00e9crirez votre programme\n", "2. Initialiser les valeurs de $a_0, F(a_0)$ et $b_0, F(b_0)$. Vous pourrez utiliser une fonction pour calculer les valeurs de la fonction $F$ en diff\u00e9rents points.\n", "3. Faire une boucle \"while\" avec un test d'arr\u00eat appropri\u00e9 pour calculer de mani\u00e8re it\u00e9rative les bornes $a_k, b_k$ en faisant les tests avec la commande \"if\" sans oublier de mettre un compteur pour savoir le nombre d'it\u00e9rations effectu\u00e9es.\n", "4. Afficher le r\u00e9sultat\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ins\u00e9rer votre programme comment\u00e9 ici" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### R\u00e9solution par la m\u00e9thode de Newton\n", "\n", "**Rappel de cours:**\n", "\n", "On part de la valeur $X_0$ et on calcule $X_1=X_0-\\displaystyle\\frac{F(X_0)}{F'(X_0)}$ puis $X_2$, etc\n", "\n", "1. Cr\u00e9er un fichier newton.py o\u00f9 vous \u00e9crirez vos commandes PYTHON\n", "2. D\u00e9finir la fonction $F$, la fonction $F'$ sachant que $\\cosh'=\\sinh$\n", "3. Utiliser la m\u00e9thode de Newton pour trouver une valeur approch\u00e9e de la premi\u00e8re racine positive de $F$. On partira de la valeur enti\u00e8re imm\u00e9diatement sup\u00e9rieurs \u00e0 la premi\u00e8re racine.\n", "4. Illustrer la vitesse de convergence de l'algorithme en tra\u00e7ant $\\displaystyle\\frac{\\log |X_{k+1}-X^*|}{\\log |X_k-X^*|}$ o\u00f9 $X^*$ est la premi\u00e8re racine de $F$ et $(X_k)_{k\\in\\mathbb{N}}$ les it\u00e9r\u00e9es de l'algorithme de Newton.\n", "\n", " **Question** donner le nombre d'it\u00e9rations n\u00e9cessaire pour obtenir $X^*$ \u00e0 $10^{-12}$ pr\u00e8s\n", "\n", "5. Remplacer la valeur initiale $X_0$ par la valeur enit\u00e8re imm\u00e9diatement inf\u00e9rieure \u00e0 la premi\u00e8re racine: on constate que l'algorithme ne converge pas\n", "\n", " ** Question ** Rechercher par tatonnement le domaine de convergence de l'algorithme vers $X^*$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ins\u00e9rer votre programme comment\u00e9 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### R\u00e9solution par la m\u00e9thode de Newton avec d\u00e9rivation num\u00e9rique\n", "\n", "**Rappel de cours:**\n", "\n", "Le calcul de la d\u00e9riv\u00e9e $F'$ est ici relativement ais\u00e9 mais ce n'est pas toujours le cas. Il faut alors \u00e9valuer *num\u00e9riquement* une valeur approch\u00e9e de la d\u00e9riv\u00e9e. Pour $h>0$ \"assez petit\" (voir TP1), on a \n", "\n", "$$\n", "\\displaystyle\n", "F'(X)\\approx\\frac{F(X+h)-F(X)}{h}\n", "$$\n", "\n", "1. Cr\u00e9er un fichier \"newtonD.py\" o\u00f9 vous \u00e9crirez vos commandes PYTHON\n", "2. D\u00e9finir une fonction DF permettant de calculer une valeur approch\u00e9e de $F'$\n", "3. Programmer la m\u00e9thode de Newton \"approch\u00e9e\" en rempla\u00e7ant $F'(X_k)$ par $DF(X_k,h)$ dans l'algorithme classique.\n", "4. Refaire les questions de la section pr\u00e9c\u00e9dente en prenant $h=0.01$ (illustrer en particulier la vitesse de convergence\n", "\n", " **Question:** Combien d'it\u00e9rations sont n\u00e9cessaires pour avoir une valeur approch\u00e9e \u00e0 $10^{-12}$ de $X^*$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ins\u00e9rer votre programme comment\u00e9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercices de synth\u00e8se\n", "\n", "####Exercice 1\n", "\n", "On cherche \u00e0 maximiser la fonction\n", "\n", "$$\n", "\\displaystyle\n", "L(\\alpha)=\\frac{l_2}{\\sin(\\pi-\\gamma-\\alpha)}+\\frac\n", "{l_1}{\\sin(\\alpha)}\n", "$$\n", "\n", "avec $l_1=2, l_2=2.5$ et $\\gamma=\\frac{3\\pi}{5}$.\n", "\n", "1. Montrer que $\\alpha$ est solution de l'\u00e9quation\n", "\n", " $$\n", "\\displaystyle\n", "l_2\\frac{\\cos(\\pi-\\gamma-\\alpha)}{\\sin^2(\\pi-\\gamma-\\alpha)}-l_1\\frac{\\cos(\\alpha)}{\\sin^2(\\alpha)}=0.\n", "$$\n", "\n", "2. Ecrire l'algorithme de Newton permettant de r\u00e9soudre l'\u00e9quation\n", "3. Programmer l'algorithme de Newton pour calculer une valeur approch\u00e9e de $\\alpha$ avec une tol\u00e9rance $\\varepsilon=10^{-9}$. On partira de la valeur approch\u00e9e $\\alpha_0=0.6$.\n", "\n", "#### Exercice 2\n", "\n", "On consid\u00e8re l'\u00e9quation $\\tan(x)=\\tanh(x)$\n", "\n", "1. Soit $k\\in\\mathbb{Z}$. On note $I_k=]-\\frac{\\pi2} +k\\pi,\\,\\frac{\\pi}{2}+k\\pi[ $. Montrer qu'il existe une solution $x_k\\in I_k$ unique \u00e0 l'\u00e9quation $\\tan(x)=\\tanh(x)$.\n", "2. Que vaut $x_0$?\n", "3. Calculer une valeur approch\u00e9e de $x_1$ \u00e0 $10^{-2}$ pr\u00e8s \u00e0 l'aide de la m\u00e9thode de dichotomie.\n", "4. Calculer une valeur approch\u00e9e de $x_1$ \u00e0 $10^{-9}$ pr\u00e8s \u00e0 l'aide de la m\u00e9thode de Newton.\n", "\n", "\n", "#### Exercice 3\n", " \n", "Notons $P$ le polyn\u00f4me d\u00e9fini par\n", "\n", "$$\n", "\\displaystyle\n", "P(x)=2097152\\,x^7-4161536\\,x^6+2731008\\,x^5-755904\\,x^4+94488\\,x^3-5334\\,x^2+127\\,x-1\n", "$$\n", "\n", "1. Tracer le graphe de la fonction $P$\n", "2. Programmer la m\u00e9thode de Newton \u00e0 pas double pour calculer la plus grande racine r\u00e9elle de $P$ en partant de $x_0=100$. Mettre en place un test pour v\u00e9rifier que les it\u00e9r\u00e9es ne d\u00e9passent pas la plus grande racine: quand c'est le cas, basculer sur la m\u00e9thode de Newton classique.\n", "3. Mettre en place un algorithme pour calculer les trois racines suivantes (voir le polycopi\u00e9 de cours)." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }