Chapitre II : Recherche de racines
Ce chapitre porte sur les méthodes numériques pour la recherche de racines d'une fonction.
Position du problème
Motivation
Définition |
---|
Soit f une fonction définie et continue de |
Les racines ou zéros de cette fonction sont les valeurs |
Le principal intérêt des méthodes de recherche de racines est de pouvoir résoudre des équations.
En effet, trouver
Dans certains cas, on peut trouver analytiquement les racines d'une fonction.
Toute équation polynomiale de degré
Si l'équation n'est pas polynomiale, sa résolution analytique est encore moins probable.
D'où l'intérêt d'utiliser des méthodes de résolution numériques, afin d'approcher les valeurs des racines.
Le principe est le suivant :
-
Localiser grossièrement les racines en procédant à des évaluations graphiques.
-
Construire une suite qui converge vers chaque racine.
Ce chapitre présentera un panel de méthodes numériques de recherche de racines, que nous appliquerons à un même exemple pour illustration.
Existence et localisation des racines
Que l'approche soit analytique ou numérique, la 1ère étape consiste généralement à localiser les solution de l'équation.
Pour ce faire, on détermine les intervalles
Cette détermination se fait graphiquement et/ou analytiquement de la manière suivante :
-
Etude des variations de la fonction
. -
Trouver les intervalles ne contenant qu'une seule racine en s'appuyant sur les théorèmes suivant.
Théorème des valeurs intermédiaires |
---|
Soit |
- Si |
- Si |
D'où le corollaire :
Théorème de Bolzano |
---|
Soit une fonction continue |
Si |
Le théorème de Bolzano garantit l'existence d'au moins une racine mais pas son unicité dans
Pour assurer l'unicité d'une racine dans
Théorème de la bijection + Théorème des valeurs intermédiaires |
---|
Soit |
alors |
Si de plus |
alors il existe un unique |
Autrement dit, la fonction |
L'étude préalable de la fonction doit donc avoir pour but de séparer les racines en isolant des intervalles sur lesquels la fonction est strictement monotone et change de signe.
Méthodes numériques et convergence
Comme évoqué précédemment, l'idée est d'approximer la racine d'une fonction lorsque l'on est incapables de trouver la solution analytiquement.
Les méthodes numériques de recherche de racines sont en général des méthodes itératives.
Il s'agit de construire une suite
La performance de ces méthodes est évaluée par leur vitesse de convergence :
Définition |
---|
Soit |
La suite est dite convergente d'ordre |
il existe une constante |
La convergence est d'autant plus rapide que la valeur de
Voici comment on qualifie la convergence en fonction de
Valeur de |
Valeur de |
Convergence |
---|---|---|
Super-linéaire | ||
Linéaire | ||
Logarithmique | ||
Sous-linéaire (non-convergence) | ||
Quadratique | ||
Cubique | ||
Quadratique |
Dans la pratique, la racine étant inconnue, nous ne pouvons pas calculer l'erreur
C'est pourquoi, à chaque itération, on calcule plutôt le résidu
On considère que la suite est suffisamment proche de la racine si
La convergence des méthodes itératives de recherche de racines dépend en général du choix de la donnée initiale
-
Une méthode qui converge quelque soit
est dite globalement convergente. -
Une méthode qui converge seulement lorque
est au voisinage de la racine est dite localement convergente.
De manière générale, les méthodes localement convergentes on un ordre de convergence plus grand que les méthodes globalement convergentes.
Exemple de problème
Au cours de ce chapitre, nous appliquerons les différentes méthodes numériques de recherche de racines à un même exemple : l'estimation de
Par définition,
Résoudre cette équation revient à résoudre
Pour calculer une approximation de
La voici sous la forme d'une fonction Python :
def f(x):
return (x**2)-2
Cette fonction est continue et dérivable sur
-
Théorème de la bijection :
est continue et strictement monotone sur , donc induit une bijection de dans . -
Théorème des valeurs intermédiaires :
et , d'où .
Donc, il existe une seule racine de
C'est pourquoi dans la suite de ce chapitre, sauf indication contraire, nous chercherons la racine de
Méthode de la dichotomie
Algorithme
La méthode de la dichotomie est inspirée du théorème des valeurs intermédiaires. Elle est aussi connue sous le nom de "méthode de la bissection".
Soit
Voici l'algorithme sous la forme d'une fonction Python.
Elle prend en entrée :
-
f
la fonction dont on cherche les racines. -
a
etb
les bornes de l'intervalle de recherche. -
n_max
le nombre maximum d'itérations. -
e
la précision désirée.
On notera les variables à l'itération n
:
-
x_n
l'estimation de la racine. -
a_n
etb_n
les bornes de l'intervalle de recherche. -
r_n
le résidu.
def dichotomie(f,a,b,n_max,e):
#Initialisation des variables :
n = 0 #Nombre d'itérations
x_n = (a+b)/2 #Estimation de la racine
a_n = a #Borne inférieure de l'intervalle de recherche
b_n = b #Borne supérieure de l'intervalle de recherche
r_n = f(x_n) #Résidu
#Itérations de l'algorithme de dichotomie
#tant qu'une des conditions d'arrêt n'est pas atteinte :
while (n<n_max)and(abs(a_n-b_n)>e)and(abs(r_n)>e):
#Si la racine est dans ]a_n,x_n[ alors on remplace b_n par x_n:
if (f(a_n)*f(x_n))<0:
b_n = x_n
#Si la racine est dans ]x_n,b_n[ alors on remplace a_n par x_n:
if (f(x_n)*f(b_n))<0:
a_n = x_n
#Incrémenter le nombre d'itérations :
n+=1
#Mettre à jour l'estimation de la racine et le résidu :
x_n = (a_n+b_n)/2
r_n = f(x_n)
#Renvoyer l'estimation de la racine et le résidu :
return x_n,r_n
Convergence
La longueur de l'intervalle de recherche est divisée par 2 à chaque itération :
Donc, l'erreur absolue à l'itération
Ce qui entraine :
La méthode de la dichotomie est donc globalement convergente : elle converge quelque soit le point de départ.
(Si la
Sa convergence est linéaire, donc elle est relativement lente. C'est pourquoi on utilise souvent cette méthode juste pour initialiser une méthode plus rapide.
Précision
En fonction de la précision souhaitée
On cherche
Donc tel que :
Soit :
Exemple
Voici les 4 premières itérations de la méthode de la dichotomie appliquée à notre problème exemple, pour un intervalle initial
Exercice :
En adaptant la fonction Python donnée précédemment pour la méthode de la dichotomie, avec un intervalle initial
Avant-propos : les méthodes linéarisées
Les méthodes qui seront présentées dans la suite de ce chapitre sont des méthodes linéarisées.
Ce type de méthodes s'appuit sur le dévloppement de Taylor de
D'où
Donc, si on connait
D'un point de vue géométrique, la racine
Et l'axe
D'où la méthode itérative suivante :
ou encore l'équation de récurrence :
où
L'idée des méthodes linéarisées est donc :
-
D'approcher une fonction non-linéaire par une droite.
-
Déterminer à chaque itération
comme l'intersection entre l'axe et la droite de pente passant par le point .
Les méthodes linéarisées (méthode de la sécante, méthode de la fausse position, méthode de Newton, etc.) se différentient par le choix de
Méthode de la sécante
Algorithme
La méthode de la sécante est une méthode linéarisée pour laquelle :
Cette suite correspond à la droite passant par les points
Soit
Voici l'algorithme sous la forme d'une fonction Python.
Elle prend en entrée :
-
f
la fonction dont on cherche les racines. -
a
etb
les bornes de l'intervalle de recherche. -
n_max
le nombre maximum d'itérations. -
e
la précision désirée.
On notera les variables à l'itération n
:
-
x_n
l'estimation de la racine à l'itération n. -
x_n_old
l'estimation de la racine à l'itération n-1. -
r_n
le résidu.
def secante(f,a,b,n_max,e):
#Initialisation des variables :
n = 1 #Nombre d'itérations
x_n = a #Estimation de la racine à l'itération n
x_n_old = b #Estimation de la racine à l'itération n-1
r_n = f(x_n) #Résidu
#Itérations de l'algorithme de la sécante
#tant qu'une des conditions d'arrêt n'est pas atteinte :
while (n<n_max)and(abs(x_n-x_n_old)>e)and(abs(r_n)>e):
#Calculer la pente de la droite :
q_n = (f(x_n)-f(x_n_old))/(x_n-x_n_old)
#Mettre à jour l'estimation de la racine :
x_n_old = x_n #Iteration n
x_n = x_n - f(x_n)/q_n #Iteration n+1
#Incrémenter le nombre d'itérations :
n+=1
#Mettre à jour le résidu :
r_n = f(x_n)
#Renvoyer l'estimation de la racine et le résidu :
return x_n,r_n
Convergence
La méthode de la sécante est convergente localement.
Si les données initiales sont assez proches de la racine
Exemple
Voici les 5 premières itérations de la méthode de la sécante appliquée à notre problème exemple. L'intervalle initial est ici de [0,2] pour des raisons de lisibilité :
Exercice :
En adaptant la fonction Python donnée précédemment pour la méthode de la sécante, avec un intervalle initial
Méthode de la fausse position
Algorithme
La méthode de la fausse position est une méthode linéarisée pour laquelle :
Cette suite correspond à la droite passant par les points
Il s'agit d'un mélange entre la méthode de la dichotomie et la méthode de la sécante. On l'appelle aussi méthode de regula falsi ou méthode de Lagrange.
Soit
Voici l'algorithme sous la forme d'une fonction Python.
Elle prend en entrée :
-
f
la fonction dont on cherche les racines. -
a
etb
les bornes de l'intervalle de recherche. -
n_max
le nombre maximum d'itérations. -
e
la précision désirée.
On notera les variables à l'itération n
:
-
x_n
l'estimation de la racine. -
a_n
etb_n
les bornes de l'intervalle de recherche. -
r_n
le résidu.
def fausse_position(f,a,b,n_max,e):
#Initialisation des variables :
n = 0 #Nombre d'itérations
a_n = a #Borne inférieure de l'intervalle de recherche
b_n = b #Borne supérieure de l'intervalle de recherche
q_n = (f(b_n)-f(a_n))/(b_n-a_n) #Initialiser la pente de la droite
x_n = a_n-f(a_n)/q_n #Estimation de la racine
r_n = f(x_n) #Résidu
#Itérations de l'algorithme de la fausse-position
#tant qu'une des conditions d'arrêt n'est pas atteinte :
while (n<n_max)and(abs(a_n-b_n)>e)and(abs(r_n)>e):
#Si la racine est dans ]a_n,x_n[ alors on remplace b_n par x_n:
if (f(a_n)*f(x_n))<0:
b_n = x_n
#Si la racine est dans ]x_n,b_n[ alors on remplace a_n par x_n:
if (f(x_n)*f(b_n))<0:
a_n = x_n
#Incrémenter le nombre d'itérations :
n+=1
#Calcul de la nouvelle pente de la droite :
q_n = (f(b_n)-f(a_n))/(b_n-a_n)
#Mettre à jour l'estimation de la racine et le résidu :
x_n = x_n-f(x_n)/q_n
r_n = f(x_n)
#Renvoyer l'estimation de la racine et le résidu :
return x_n,r_n
Convergence
La méthode de la fausse position est globalement convergente :
-
Si
est à concavité constante avec (concave), la suite converge vers la racine en croissant. -
Si
est à concavité constante avec (convexe), la suite converge vers la racine en décroissant.
Elle converge avec un ordre
Exemple
Voici les 5 premières itérations de la méthode de la fausse position appliquée à notre problème exemple. L'intervalle initial est ici de [0,2] pour des raisons de lisibilité :
Exercice :
En adaptant la fonction Python donnée précédemment pour la méthode de la fausse position, avec un intervalle initial
Méthode de Newton
Algorithme
La méthode de Newton est une méthode linéarisée pour laquelle :
Cette suite correspond à la pente de la tangente à la fonction
On l'appelle aussi la méthode de Newton-Raphson.
Cette méthode nécessite l'évaluation de
def f_derivee(x):
return 2*x
Soit
Voici l'algorithme sous la forme d'une fonction Python.
Elle prend en entrée :
-
f
la fonction dont on cherche les racines. -
f_derivee
la dérivée de la fonction dont on cherche les racines. -
x_0
point de départ de la recherche. -
n_max
le nombre maximum d'itérations. -
e
la précision désirée.
On notera les variables à l'itération n
:
-
x_n
l'estimation de la racine à l'itération n. -
x_n_old
l'estimation de la racine à l'itération n-1. -
r_n
le résidu.
def newton(f,f_derivee,x_0,n_max,e):
#Vérifier que le point de départ de la recherche est possible :
if f_derivee(x_0)==0:
raise ValueError("Mauvaise initialisation, f'(x_0) = 0")
#Initialisation des variables :
n = 0 #Nombre d'itérations
x_n_old = x_0 #Estimation de la racine à l'itération n-1
x_n = x_n_old-f(x_n_old)/f_derivee(x_n_old) #Estimation de la racine à l'itération n
r_n = f(x_n) #Résidu
#Itérations de l'algorithme de Newton
#tant qu'une des conditions d'arrêt n'est pas atteinte :
while (n<n_max)and(abs(x_n-x_n_old)>e)and(abs(r_n)>e):
#Mettre à jour l'estimation de la racine :
x_n_old = x_n #Itération n
x_n = x_n-f(x_n)/f_derivee(x_n) #Iteration n+1
#Incrémenter le nombre d'itérations :
n+=1
#Mettre à jour le résidu :
r_n = f(x_n)
#Renvoyer l'estimation de la racine et le résidu :
return x_n,r_n
Convergence
La méthode de Newton est convergente localement.
Si
En pratique, on utilise souvent la méthode de la dichotomie pour trouver un point de départ
Reste un incovénient, la méthode de Newton nécessite le calcul de dérivées, et est donc plus coûteuse en calcul.
La méthode de Newton est sûrement convergente dans le cas d'une fonction
Pour choisir un point de départ
Exemple
Voici les 4 premières itérations de la méthode de Newton appliquée à notre problème exemple. Le point de départ de la recherche choisi est de 2.5 pour des raisons de lisibilité :
On note que le choix de point de départ est correct, car
Exercice :
En adaptant la fonction Python donnée précédemment pour la méthode de Newton, avec un point de départ de votre choix, estimez la valeur de
NB: La méthode de Newton appliquée au cas de l'estimation de
Méthode du point fixe
Définitions
Idée |
---|
Transformer l'équation |
La racine |
Cette transformation est toujours possible mais pas unique.
Dans la pratique, la méthode du point fixe consiste à transformer le problème
Théorème du point fixe |
---|
Soit |
Si |
Donc |
Les méthodes linéarisées sont des méthodes de point fixe : on obtient
Par exemple, dans notre problème de l'approximation de
Algorithme
Soit
Cette méthode nécessite la sélection d'une fonction d'itération de point fixe
def g(x):
return x/2+1/x
Voici l'algorithme sous la forme d'une fonction Python.
Elle prend en entrée :
-
f
la fonction dont on cherche les racines. -
g
la fonction d'itération choisie. -
x_0
point de départ de la recherche. -
n_max
le nombre maximum d'itérations. -
e
la précision désirée.
On notera les variables à l'itération n
:
-
x_n
l'estimation de la racine à l'itération n. -
x_n_old
l'estimation de la racine à l'itération n-1. -
r_n
le résidu.
def point_fixe(f,g,x_0,n_max,e):
#Initialisation des variables :
n = 0 #Nombre d'itérations
x_n_old = x_0 #Estimation de la racine à l'itération n-1
x_n = g(x_n_old) #Estimation de la racine à l'itération n
r_n = f(x_n) #Résidu
#Itérations de l'algorithme du point fixe
#tant qu'une des conditions d'arrêt n'est pas atteinte :
while (n<n_max)and(abs(x_n-x_n_old)>e)and(abs(r_n)>e):
#Mettre à jour l'estimation de la racine :
x_n_old = x_n #Itération n
x_n = g(x_n) #Iteration n+1
#Incrémenter le nombre d'itérations :
n+=1
#Mettre à jour le résidu :
r_n = f(x_n)
#Renvoyer l'estimation de la racine et le résidu :
return x_n,r_n
Convergence
Théorème de la convergence globale des itérations de point fixe |
---|
Soit |
1. Hypothèse d'inclusion (ou de stabilité) : |
Si |
2. Hypothèse de contraction stricte : |
Si de plus, |
(on dit que |
alors |
et la suite |
On appelle alors |
Une règle pratique pour vérifier l'hypothèse de contraction :
Soit
Théorème |
---|
Soit |
Si |
En pratique, il est souvent difficile de montrer la convergence globale. D'où l'utilité d'une étude de convergence locale :
Théorème de la convergence locale des itérations de point fixe |
---|
Soit |
Si |
Si |
Si |
Exemple
Considérons à nouveau notre problème d'approximation de
Nous proposons d'essayer les fonctions d'itération suivantes :
On s'attend donc à ce que
Voici les 4 premières itérations pour
La valeur de
Voici les 4 premières itérations pour
On observe que
Voici les 4 premières itérations pour
Cette fois-ci,
On retrouve donc bien les résultats attendus.
Exercice :
En adaptant la fonction Python donnée précédemment pour la méthode du point fixe, avec le même point de départ que vous avez choisi pour la méthode de Newton, estimez la valeur de
Vitesse de convergence des méthodes
Méthode de la dichotomie
On rappelle que la méthode de la dichotomie converge de manière linéaire.
Méthodes de point fixe
Supposons que
La formule de Taylor au voisinage de
D'où l'erreur absolue à l'itération
Théorème |
---|
La méthode du point fixe est d'ordre |
La méthode est convergente du 1er ordre (i.e. linéaire) si
La méthode est convergente d'ordre 2 (i.e. quadratique) si
Méthode de la sécante
On rappelle que dans le cas de la méthode de la sécante :
Donc
D'où
D'après la formule de Taylor, il existe au moins un
Donc s'il n'y a pas de point d'inflexion,
Méthode de Newton
On rappelle que dans le cas de la méthode de Newton :
Donc
D'où
De plus,
D'où
Par conséquent, si
Si
Conclusions
-
La méthode de la dichotomie est simple mais lente car elle ne prend pas en compte le comportement de
. Elle est néanmoins utile pour initialiser des méthodes plus rapides. -
La méthode de Newton est convergente d'ordre au moins 2 mais nécessite le calcul de dérivées et un bon choix d'initialisation.
-
Les méthodes d'itérations de point fixe convergent sous des conditions portant sur la fonction d'itération
et sa dérivée . Leur convergence est généralement linéaire, mais devient quadratique quand .