{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "IPython.notebook.set_autosave_interval(300000)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Autosaving every 300 seconds\n" ] } ], "source": [ "%reset -f\n", "%matplotlib inline\n", "%autosave 300\n", "#import sys #only needed to determine Python version number\n", "#import matplotlib #only needed to determine Matplotlib version number\n", "\n", "#print('Python version ' + sys.version)\n", "#print('Matplotlib version ' + matplotlib.__version__)\n", "from math import *\n", "from matplotlib.pylab import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Objectifs du TP :\n", "\n", "- Programmer des algorithmes simples faisant intervenir des tests \"if,elif,else\" et des boucles \"for\" à l'aide du langage de programmation Python,\n", "- Appréhender les limites de la machine,\n", "- Illustrer quatre grandes méthodes d'approximation de solution de $f(x)=0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour afficher les 3 premières décimales de pi, on exécute la commande suivante :" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pi vaut 3.142\n" ] } ], "source": [ "print(\"pi vaut %.3f\" % pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Définir la variable a=123,45 et afficher ses 16 premières décimales" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a= 123.4500000000000028\n" ] } ], "source": [ "a=123.45\n", "print(\"a= %.16f\" % a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On définit maintenant le nombre $b=12 \\times 10^{-15}$.\n", "Définir la variable $c$, calculer $(a-a)+b$ et $a+(-a+b)$ et afficher les deux résultats avec 16 décimales." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Soit la suite $x_{n+1} = a\\,x_n − b$ avec les valeurs initiales $x_0 = 1.0$, $b = 4096.1$ et $a = b + 1$.\n", "\n", "Calculer à la main ce que vaut $x_n$ pour tout $n$.\n", "\n", "Programmer le calcul des $15$ premières valeurs de $x_n$ avec une boucle for." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recommencer avec la valeur $b= 4095.1$. Que se passe-t-il ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recommencer avec 𝑏 de la forme $(4^k − 1)+0.1$ pour $k=2$, $k=4$, etc..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 3\n", "\n", "Programmer le calcul des 30 premiers termes des suites $(u_n)$ et $(v_n)$ données par\n", "$$\n", "\\begin{cases} u_0 = 1/2, \\\\ u_{n+1} = 3\\,u_n − 1\\end{cases} \\quad et \\quad \\begin{cases} v_0 = 1/3, \\\\ v_{n+1} = 4\\,v_n − 1\\end{cases}\n", "$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Expliquer les résultats obtenus." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 4 - Dichotomie\n", "\n", "On considère le programme suivant qui calcule une approximation de la valeur de $\\sqrt{2}$ par la méthode de la dichotomie appliquée à la résolution de l'équation $x^2 - 2=0$ sur l'intervalle $[1,2]$ avec la précision $p=10^{-3}$.\n", "\n", "Modifier ce programme pour qu'il calcule cette approximation avec la précision $p=10^{-6}$ et qu'il affiche le nombre d'itérations effectuées." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " on trouve le résultat : 1.4145507812 \n", " la valeur exacte est : 1.4142135624 \n", " on a donc une erreur de 0.0003372189\n" ] } ], "source": [ "def f(x):\n", " return x**2-2\n", "\n", "p = 1e-3;\n", "a=1.0;\n", "b=2.0;\n", "m=(a+b)/2;\n", "\n", "while (abs(b-a) > p) :\n", " if f(m)*f(a) <= 0 :\n", " b=m;\n", " m=(a+b)/2;\n", " else :\n", " a=m;\n", " m=(a+b)/2;\n", "\n", "sol=sqrt(2)\n", "print(\" on trouve le résultat : %.10f \\n la valeur exacte est : %.10f \\n on a donc une erreur de %.10f\" % (m,sol,abs(m-sol)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 5 - Lagrange\n", "\n", "Programmer la méthode de Lagrange pour calculer une approximation de la valeur de $\\sqrt{2}$ par la résolution de l'équation $x^2 - 2=0$ sur l'intervalle $[1,2]$ avec la précision $p=10^{-3}$, et qui affiche le nombre d'opérations effectuées.\n", "\n", "Recommencer avec $p=10^{-6}$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 6 - Sécante\n", "\n", "Programmer la méthode de la sécante pour calculer une approximation de la valeur de $\\sqrt{2}$ par la résolution de l'équation $x^2 - 2=0$ sur l'intervalle $[1,2]$ (en partant donc de $x_{-1}=1$ et $x_0=2$) avec la précision $p=10^{-3}$, et qui affiche le nombre d'opérations effectuées.\n", "\n", "Recommencer avec $p=10^{-6}$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 7 - Méthode de Newton\n", "\n", "Programmer la méthode de Newton pour calculer une approximation de la valeur de $\\sqrt{2}$ par la résolution de l'équation $x^2 - 2=0$ sur l'intervalle $[1,2]$ en partant du point $x_0 = 2$ avec la précision $p=10^{-3}$, et qui affiche le nombre d'opérations effectuées.\n", "\n", "Pour cela, on rappelle que la méthode de Newton pour résoudre l'équation $f(x)=0$ consiste à considérer la suite des points\n", "$$ \\begin{cases} x_0 \\; \\text{fixé} \\\\ x_{n+1} = x_n - f(x_n)/f'(x_n) \\end{cases} $$\n", "\n", "Recommencer avec $p=10^{-6}$, et comparer le nombre d'itérations avec ceux des deux méthodes précédentes." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }