Algorithme d’approximation num´erique Terminale S
Algorithme d’approximation num´ erique
La propri´et´e des valeurs interm´ediaires rencontr´ees en Terminale est tr`es utile pour justifier l’existence d’une solution d’ une ´equation du type f(x) = 0.
En revanche l’algorithme qui permet par manipulations successives du tableur, de rechercher une valeur approch´ee `a la pr´ecision souhait´ee, n’est pas tr`es convaincant. Pire, il n’y a rien d’automatique au sens o`u il suffirait de lancer un programme pour obtenir le r´esultat souhait´e.
On se propose dans cette activit´e de d´ecouvrir des algorithmes num´eriques qui livrent la valeur approch´ee d’une ´equation `a la pr´ecision souhait´ee. On s’int´eressera aussi `a la rapidit´e de la convergence de ces ins- tructions, sans se poser d’ailleurs la question de savoir si cela converge vraiment...
? Ensuite nous utiliserons le langage Python pour impl´ementer ces algorithmes.
Pr´eambule :
On utilisera la fonction f d´efinie pour tout x par : f(x) =x2−2 , et on utilisera les diff´erents algorithme pour rechercher une valeur approch´ee α de la solution positive de l’´equation f(x) = 0.
Evidemment,´ α=√
2≈1.4142135623731...
On suppose connues deux valeurs initiales a0 et b0 pour lesquelles f(a0) < 0 et f(b0) >0. Dans tous les cas il s’agit de construire une suite de valeurs qui converge vers α et si possible , tr`es vite !
Algorithme n°1 : Par dichotomie
Voici le premier algorithme assez naturel et facile `a comprendre : on appelle m0 la moyenne dea0 etb0(le milieu quoi...) et on calcule f(m) : si f(m)>0 on affecte m `ab1 eta0 `aa1, sinon m `a a1 et b0 `a b1 et on recommence avec m1,... . `A chaque boucle, it´eration, on diminue donc l’intervalle initial de moiti´e.
Voici l’algorithme et son impl´ementation en python :
Entr´ees : ǫ :pr´ecision
a, b:bornes gauche et droite Traitement :
Tant queb−a > ǫ m←− a+b
Sif(m)≤20 : a←−m sinon :
b←−m Fin Tant que Sortie :
Valeurs de a etb
def f(x):
return x**2-2
def dichotomie(p, a = 1, b = 2):
'''p:un entier positif a: vaut 1 par defaut b: vaut 2 par defaut''' while b-a >10**(-p):
m = (a + b)/2 if f(m)<= 0:
a = m else:
b = m return a, b
Lyc´ee JB de BAUDRE `a AGEN
Algorithme d’approximation num´erique Terminale S
➀ En modifiant le fichier dichotomie.py, cr´eer un compteur qui compte le nombre N de boucles n´ecessaires pour d´eterminer un encadrement de α `a la pr´ecision 10−p.
➁ Compl´eter alors le tableau suivant :
p 1 2 3 4 5
Nombre de boucles N
➂ Quelle relation existe t-il entre p et N?
Algorithme n°2 : Avec des s´ecantes
La m´ethode suivante est appel´ee m´ethode de la s´ecante. La valeur de m n’est plus d´etermin´ee par la moyenne des valeurs initiales a etb mais par l’intersection de la s´ecante (AB) avec l’axe des abscisses (A est le point de la courbe d’abscisse a, et B d’abscisse b...).Le graphique suivant illustre l’algorithme sur plusieurs it´erations.
On suppose que nous sommes dans des conditions id´eales o`u par exemple la s´ecante coupe toujours l’axe des abscisses. Avec la fonction f consid´er´ee sur l’intervalle I = [1; 2], c’est effectivement le cas.
➀ Justifier que m= a×f(b)−b×f(a) f(b)−f(a) .
➁ La convexit´e de la courbe explique que pour f(m) < 0 quelle que soit la valeur de m calcul´ee `a chaque it´eration. Ainsi `a chaque boucle ,c’est la valeur de a qui est r´eaffect´ee avec celle de m. Le programme suivant donne une valeur approch´ee de α `a la pr´ecision 10−p souhait´ee :
def f(x):
return x**2-2
def secante(p, a =1, b = 2):
m = (a*f(b)-b*f(a))/(f(b)-f(a)) while m-a>10**(-p):
a = m
m = (a*f(b)-b*f(a))/(f(b)-f(a)) return m
Voila ce que donne la m´ethode avec une pr´ecision de 10−5 :secante(5)= 1.4142131979695434.
Lyc´ee JB de BAUDRE `a AGEN
Algorithme d’approximation num´erique Terminale S Compl´eter alors le tableau suivant :
p 1 2 3 4 5
Nombre de boucles N
Algorithme n°3 : La m´ethode de Newton Raphson
Dans la m´ethode pr´ec´edente, les diff´erentes valeurs de a calcul´ees constituent une suite (an) avec a0 = 1 et a1 = a0×f(b0)−b0×f(a0)
f(b0)−f(a0) ,... obtenues par l’intersection de la droite (AB) avec l’axe des abscisses.
Dans cette nouvelle m´ethode, le principe est le mˆeme :on construit une suite (xn) qui converge versα=√ 2.
L’algorithme est le suivant :
➊ On choisit une valeur initiale x0 > α sur l’axe des abscisses ;
➋ x1 est l’abscisse de point d’intersection de la tangente `a Cf au point d’abscisse x0 avec l’axe des abscisses.
➌ et ainsi de suite,...xn+1 est l’abscisse de point d’intersection de la tangente `aCf au point d’abscisse xn avec l’axe des abscisses.
➀ Faites un dessin qui illustre la situation.
➁ Prouver que x1 =x0 − f(x0) f′(x0).
➂ Soit la suite (xn) d´efinie pour tout n par :
x0 >√ 2
xn+1 =xn− f(xn) f′(xn)
❶ Justifier que pour tout n,pour notre fonction choisit en pr´eambule, on a :xn+1 = 1
2(xn+ 2 xn)
❷ D´emontrer par r´ecurrence que xn>√ 2.
❸ D´emontrer que la suite (xn) est d´ecroissante surN.
❹ En d´eduire que la suite converge vers un nombre l.
❺ D´eterminer l.
❻ D´emontrer l’in´egalit´e : (xn+1 −√
2) < (xn −√
2)2. Si xn donne une pr´ecision `a 10−k de √ 2, quelle sera la pr´ecision du terme suivant xn+1?
➃ Le fichier comparaison.py g´en`ere un graphique qui compare la rapidit´e de convergence des trois algorithmes pr´ec´edents par la mesure du nombre de boucles n´ecessaires pour obtenir une valeur approch´ee de α `a 10−p. Ex´ecuter le fichier.Quel est l’algorithme le plus rapide ?
Lyc´ee JB de BAUDRE `a AGEN