16 Approximation de racines : la théorie I. La méthode de dichotomie ⋄ On dispose d’une fonction f : [a, b] → R continue et telle que f (a) et f (b) sont de signes contraires. La fonction f s’annule sur [a, b] et on veut obtenir une valeur approchée à ε près (ε > 0 est également donné) d’une racine de f . a c= a+b 2 b Données : f , a, b, ε tant que (b − a) > ε c ← a+b 2 s i f (a) × f (c) É 0 alors b ←c sinon a ←c fin si f i n tant que Résultat : def dichotomie(f,a,b,epsilon): while (b-a)>epsilon: c=float(a+b)/2 if f(a)*f(c)<=0: b=c else: a=c return float(a+b)/2 a +b 2 Exemple Python. print dichotomie(lambda x:x**2-2,0,2,1e-3) 1.41455078125 Remarque. La construction lambda x:x**2-2 désigne la fonction qui à x associe x 2 −2. Cette écriture est très pratique lorsque l’on a besoin d’utiliser une fonction mais que l’on ne juge pas utile de lui donner de nom. On aurait aussi bien pu écrire : def f(x): # Si f n'est pas utilisée par ailleurs ! return x**2-2 print dichotomie(f,0,2,1e-3) http://alexandre.boisseau.free.fr/Prive/WWW/InfoPCSI/resume16.pdf II. La méthode de Newton ⋄ On considère une fonction f de classe C1 sur un intervalle I . On suppose que f s’annule en α ∈ I et que f ′ ne s’annule pas sur I et on cherche à déterminer une valeur approchée de α. On définit pour cela une suite (xn ) par récurrence : – on prend x0 ∈ I (assez proche de α, lorsque l’on connait une estimation de α ou un encadrement) ; – pour n ∈ N, xn+1 est défini comme étant l’abscisse du point d’intersection de l’axe des abscisses avec la tangente à la courbe représentative de f au point d’abscisse xn . ⋄ La suite (xn ) satisfait la relation de récurrence : ∀n ∈ N, xn+1 = xn − f (xn ) f ′ (xn ) Sous les bonnes hypothèses, la suite (xn ) converge vers une solution de l’équation f (x) = 0. On va calculer xn pour un entier n donné. Données : f , f ′ , x0 et n x ←x0 pour k a l l a n t de 0 à n − 1 x ←x − f i n pour f (x) f ′ (x) x2 x1 x0 def newton(f,fprime,x0,n): x=x0 for k in range(0,n): x=x-float(f(x))/fprime(x) return x Résultat : x Exemple Python. from math import sin,cos print newton(lambda x:-cos(x),lambda x:sin(x),1,5) 1.57079632679 BRemarque. Chacun des deux algorithmes a besoin de la fonction f (bien entendu) et d’informations supplémentaires : • Pour l’algorithme de dichotomie, il faut donner deux valeurs dont les images par f sont de signes opposés ; • Pour l’algorithme de Newton, il faut fournir la dérivée de f ainsi qu’une valeur de départ (estimation initiale).