TP d’informatique : résolution approchée d’équation On propose dans ce TP de mettre en œuvre deux méthode permettant de résoudre de manière approchée des équations de type f (x) = 0 d’inconnue x ∈ R. 1) Pourquoi est-ce que de savoir résoudre les équations de type f (x) = 0 permet en fait de résoudre n’importe quelle équation réelle ? 1 Dichotomie Soit I un segment non vide, soit a = min(I) et b = max(I). Soit f : I → R continue et telle que f (a). f (b) ≤ 0. On rappelle très succinctement le principe de la méthode dite par dichotomie pour obtenir un encadrement d’une solution de l’équation f (x) = 0 d’inconnue x ∈ I. Nous utilisons trois variables debut, fin, milieu. Au début, debut prend la valeur a, fin la valeur b et milieu la valeur (a + b)/2. • Si f (debut). f (milieu) ≤ 0 alors l’équation admet une solution sur [debut, milieu] : nous allons alors poursuivre les calculs dans l’intervalle [debut, milieu]. En pratique, fin va prendre la valeur milieu, et milieu va devenir (debut + f in)/2 (debut ne change pas). • Si f (debut). f (milieu) > 0, il y a alors une solution sur [milieu, f in]. A vous de voir quelles opérations faire dans ce cas. On poursuit ainsi jusqu’à ce que la précision demandée soit obtenue. 1) Écrire l’algorithme correspondant. Il prendra en entrée : une fonction f , deux nombres a et b tels que f est définie sur [a, b] et f (a). f (b) ≤ 0, ainsi qu’un nombre h > 0. Il renverra deux nombres α, β tels que l’équation f (x) = 0 a une solution sur [α, β] et |β − α| ≤ h. 2) √ Traduire l’algorithme pour python et procéder aux tests. Par exemple on pourra calculer une valeur approchée de 2, ou de π à 10−4 près. 3) Pour tout n ∈ N, calculer la précision obtenue lorsque la boucle a été itérée n fois. 4) Démontrer que l’algorithme termine. Puis démontrer que l’algorithme renvoie un résultat correct. 5) $Soit h ∈ R+∗ % . Montrer que pour atteindre la précision h, le nombre d’itérations de la boucle à effectuer est b−a b−a log2 ( ) + 1 (sauf si par hasard log2 ( ) était entier, ce qui en pratique n’arrive jamais). h h 6) Dans l’algorithme, quelle est l’opération élémentaire que vous pensez être la plus longue à effectuer ? Pour atteindre la précision h, combien de fois a-t-elle été effectuée ? Bonus : pouvez-vous améliorer votre algorithme pour réduire ce nombre ? 2 Méthode de Newton Voici maintenant une méthode proposée par Isaac Newton, à l’origine pour résoudre des équations polynomiales. On conserve les notations f, I, a, b précédentes. On suppose en outre que f est dérivable, et que f 0 ne s’annule pas (Remarque: pour être sûr que la méthode fonctionne correctement, il vaut mieux que f soit C2 ). On part d’un point x0 qu’on espère assez proche de la solution cherchée. On calcule la tangente à la courbe C f au point d’abscisse x0 . Notons-là T f (x0 ). Normalement, cette tangente devrait être proche de la courbe C f , au moins au voisinage de x0 . D’où l’idée : au lieu de chercher l’intersection de C f avec l’axe des abscisses, nous cherchons l’intersection de T f (x0 ) avec l’axe des abscisses. On note x1 l’abscisse du point obtenu. Ensuite on recommence en partant de x1 . On obtient ainsi x2 , on recommence encore, etc... On obtient une suite (xn )n∈N qu’on espère converger vers une solution de f (x) = 0. 1) Faire des dessins. 2) Donner la formule exprimant pour tout n ∈ N xn+1 en fonction de xn . 3) Proposer un algorithme appliquant la méthode de Newton. (Réfléchissez aux variables que vous pouvez demander à l’utilisateur en entrée.) 4) Implémenter cet algorithme sous python. 5) Comparer la vitesse d’exécution avec la dichotomie. Par exemple, sur un même exemple calculer la précision obtenue avec Newton pour n = 5, puis faire afficher par la dichotomie le nombre d’itérations nécessaires pour obtenir la même précision. 6) Écrire un algorithme permettant de visualiser le comportement de la suite. On tracera d’abord le graphe de f , puis les points (x0 , f (x0 )), (x1 , 0), (x1 , f (x1 )), (x2 , 0), ... (xn−1 , f (xn−1 )), (xn , 0). 7) Appliquer la méthode pour résoudre sin(x) = 0, en choisissant diverses valeurs de x0 . 8) Appliquer la méthode pour résoudre th(x) = 0. 9) Autre exemple : soit a ∈ R+∗ , appliquer la méthode avec la fonction f : x 7→ 1 − a. Quel intérêt ? x 10) Identifier les défauts de la méthode de Newton. 11) Supposons que la suite (xn )n∈N converge. Démontrer que sa limite est une solution de f (x) = 0. Commentaire : On dit que f est ”convexe” lorsque f 0 est croissante (la courbe est alors au dessus de ses tangentes). On démontre par exemple que la méthode de Newton fonctionne toujours dès que f est convexe, croissante, et que x0 est choisi de sorte que f (x0 ) > 0. Si en plus, f est C2 , on démontre qu’il existe une constante C et un rang n0 ∈ N tel que,en notant x∞ la solution cherchée, ∀n ≥ n0 , |xn+1 − x∞ | ≤ C.|xn − x∞ |2 En gros, la précision est mise au carré à chaque itération, autrement dit le nombre de décimale justes est multiplié par 2. La convergence est donc extrêmement rapide, on dit que la convergence est ”quadratique”. 2