{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "
\n", " \n", "
\n", "\n", "# ICS - TP16\n", "**Cours de Mathématiques Spéciales** (semestre de printemps 2021)
\n", "*Roger Sauser*" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "### Le but de cette séance d'exercices est de vous permettre de consolider vos connaissances concernant la méthode de Picard et de vous familiariser avec trois méthodes de point fixe : \n", "* la **méthode de Newton** (aussi appelée **méthode de Newton-Raphson** ou **de la tangente**) ;\n", "* la **méthode de la corde** (aussi appelée **méthode de Newton-corde**) ;\n", "* la **méthode de la parallèle**. \n", "\n", "### Nous reviendrons également sur une autre méthode itérative : la méthode dite de la sécante." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "deletable": false, "run_control": { "frozen": true } }, "outputs": [], "source": [ "# nous allons utiliser numpy et matplotlib :\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "# Exercices de révision (méthode de Picard)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "## Exercice 1\n", "Dans le TP précédent, nous avons constaté que les fonctions \n", "\n", "$$\n", "\\displaystyle f(x)=\\frac{\\cos{(x)}+x}{4}~~~\\hbox{et}~~~\n", "\\displaystyle g(x)=\\frac{\\cos{(x)}+x^2}{4}\n", "$$\n", "\n", "sont $K$-contractantes sur $\\mathcal{R}$ dans le cas de $f(x)$ et sur, par exemple, \n", "$I_\\pi=\\displaystyle\\left]-\\frac{\\pi}{2},\\frac{\\pi}{2}\\right[$ dans le cas de $g(x)$.\n", "\n", "Dans cet exercice, on vous propose de :\n", "\n", "a) vérifier le théorème du point fixe de Banach dans le cas particulier de la fonction $f$ en :\n", " * représentant graphiquement la fonction $f$ ;\n", " * vérifiant l'existence d'un unique point fixe ;\n", " * trouvant une valeur approchée à 5 décimales de ce point fixe grâce à la méthode de Picard.\n", "\n", "b) vérifier de manière analogue le théorème 10 du polycopié dans le cas particulier de la fonction $g$ sur $I_\\pi$. Ce théorème s'applique-t'il dans le cas de cette fonction sur l'intervalle $\\displaystyle\\left]-\\frac{\\pi}{2},0\\right[$ ?" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# a)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# b)\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "## Exercice 2\n", "\n", "Soit $g(x)$ une fonction **de $\\mathcal{R}$ dans $\\mathcal{R}$** telle que $g^3$ est **$K$-contractante**. \n", "Montrer que $g$ possède un et un seul point fixe.\n", "\n", "Illustrer ce résultat en représentant graphiquement la fonction $g^3$ pour le cas particulier où $g(x)=0.5x+3$.\n", "\n", "Attention : la notation $g^3$ signifie ici que la fonction $g^3$ est obtenue par **composition répétée** de la fonction $g$ avec elle-même trois fois." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "# Exercices sur la méthode de Newton" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "## Exercice 3\n", "Ci-dessous, à l'exercice 4, nous allons implémenter la méthode de Newton en supposant connue la dérivée de la fonction dont on cherche le zéro. Toutefois, il pourrait être commode (si l'on manque de temps ou d'aisance pour déterminer la dérivée \"à la main\") d'obtenir une estimation numérique de la dérivée.\n", "\n", "Numériquement, il est possible d'approximer la valeur du nombre dérivée d'une fonction en un point en calculant la pente de la courbe en ce point avec un des deux quotients suivants :\n", "$$\n", "\\frac{f(a+h)-f(a)}{h}~~~~\n", "\\hbox{ou}~~~~\n", "\\frac{f(a)-f(a-h)}{h}\\,.\n", "$$\n", "\n", "Souvent, on privilégie la moyenne de ces deux formules et on écrit :\n", "\n", "$$\n", "f'(a) \\cong \\frac{f(a+h)-f(a-h)}{2h}\\,.\n", "$$\n", "\n", "Dans cet exercice, on vous propose d'écrire une fonction `derivee` ayant trois arguments : une fonction $f$ à dériver, l'abscisse $a$ où la dérivée doit être approximée et la valeur du pas $h$ (on posera $h=0.005$ comme valeur par défaut). On vous demande de vérifier votre implémentation en représentant les fonction $f_1(x)=\\sin{(x)}$ et $f_2(x)=(x+1)^2(x-\\frac{3}{2})$ accompagnées de leur dérivée respective dans l'intervalle $[-2,2]$. Calculez l'erreur commise en utilisant votre fonction pour évaluer la dérivée de $f_1$ en $x=1.1$.\n", "\n", "Remarque : dans l'exercice 2 du TP14, nous avons calculé la vitesse et l'accélération d'un objet à partir d'un ensemble de mesures expérimentales des positions de cet objet." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "## Exercice 4\n", "Dans cet exercice, on se propose de déterminer numériquement les zéros de la fonction \n", "$f_2(x)=(x+1)^2(x-\\frac{3}{2})$ définie à l'exercice 3. \n", "\n", "Pour ce faire, nous allons implémenter la **méthode de Newton** en définissant une fonction `resoudre_par_Newton`$\\dots$\n", "* $\\dots$ dont les arguments sont la fonction `f` étudiée, le point de départ `x_0` de la méthode, la fonction dérivée `fprime`, la tolérance `eps` et le nombre maximum d'itérations autorisées `n_max` ;\n", "* $\\dots$ qui calcule par itérations une approximation $\\bar x$ d'un zéro de $f$ ;\n", "* $\\dots$ qui s'arrête :\n", " - soit quand la valeur absolue de $f(\\bar x)$ est inférieure à la tolérance ; \n", " - soit quand le nombre maximum d'itérations est atteint ; \n", " - si la valeur de la dérivée utilisée à chaque itération est inférieure à `1e-10` pour éviter tout problème de divergence dans la formule utilisée ;\n", "* $\\dots$ qui retourne une valeur approchée d'un zéro de $f$, ainsi qu'une liste de tuples, ces tuples contenant les couples $(x_n,f(x_n))$ utilisés à chaque itération $n$. \n", "\n", "Tester votre implémentation en recherchant les deux zéros de la fonction $f_2$. Expérimentez l'efficacité de la méthode selon le point de départ $x_0$ choisi et selon la nature du zéro considéré. Constatez-vous des différences notables ? Si oui, essayez d'en expliquer la raison.\n", "\n", "Vérifier que la méthode de Newton est une **méthode de point fixe** en affichant la différence\n", "$$\n", "x_{n} - x_{n-1}\n", "$$\n", "pour chacune des itérations. Quelles conclusions peut-on tirer de la comparaison de cette différence à la dernière itération avec la tolérance (sur $f(\\bar x)$) que nous avons considérée ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "# Exercice sur les méthodes de la corde, de la parallèle et de la sécante (comparaison avec la méthode de la bissection et la méthode de Newton)" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "run_control": { "frozen": true } }, "source": [ "## Exercice 5\n", "Dans cet exercice, nous allons revenir sur la fonction $f_2(x)=(x+1)^2(x-\\frac{3}{2})$ déjà étudiée plus haut. En particulier, on vous demande :\n", "* d'implémenter les méthodes **de la corde** (**Newton-corde**), **de la parallèle** (en donnant la valeur de $\\lambda$ en paramètre), **de la sécante** et **de la bissection** en vous inspirant de ce qui a été fait à l'exercice 4 ;\n", "* de comparer le nombre d'itérations nécessaires à chacune des méthodes pour arriver à approximer les deux zéros de $f_2$ en assurant une **précision de 10 décimales** et en partant d'un **même $x_0$** pour chaque méthode (vous pouvez par exemple démarrer à une distance 0.5 d'un zéro) ;\n", "* quelles conclusions pouvez-vous tirer de vos expérimentations ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# méthode de Newton-corde\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# méthode de la parallèle\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# méthode de la sécante\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# méthode de la bissection\n" ] } ], "metadata": { "celltoolbar": "Format de la Cellule Texte Brut", "kernelspec": { "display_name": "Python", "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.8.10" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 4 }