Matlab
Matlab
Matlab
TD/TP - 2
Résolution des équations non linéaires.
But : 1) Ecrire les fonctions Dichotomie, Newton, Sécante et PointFixe permettant de calculer une valeur
approchée d’une racine d’une fonction réelle d’une variable réelle par les méthodes de Dichotomie, Newton,
sécante et point fixe respectivement.
2) Valider ces fonctions sur des exemples, et comparer les approches.
Partie Théorique
Un exemple : analyse de l’équation d’état d’un gaz réel. Pour n moles de gaz parfait, l’équation
d’état P v = nRT établit une relation entre la pression P du gaz (en Pascals [P a]), son volume v (en mètres
cubes [m3 ]) et la température T (en Kelvin [K]), R étant la constante des gaz parfaits (exprimée en Joules par
mole et par Kelvin R = 8, 3144[J.mol−1 .K −1 ]).
Pour un gaz réel, l’équation des gaz parfaits peut être remplacée par celle de Van der Waals qui prend en
compte l’interaction entre les molécules. En notant γ et β les constantes du gaz dans le modèle de Van der
Waals (pression de cohésion en [P a.m6 .mol−2 ] et covolume en [m3 .mol−1 ]), et en supposant connues n, P et
T , on doit résoudre l’équation non linéaire suivante pour déterminer le volume v :
n
(P + γ( )2 )(v − nβ) = nRT.
v
Résolution des équations non linéaires. L’objet de cette partie est l’approximation de racines d’une
fonction réelle d’une variable réelle , c’est-à-dire la résolution approchée du problème suivant :
étant donné f : ]a, b[ ⊆ R → R continue, trouver α ∈]a, b[ tel que f (α) = 0. (1)
En général, α ne peut pas être calculé explicitement. Par exemple, dans l’exemple ci-dessus, on peut déterminer
le volume v en cherchant la racine de la fonction
n
f (v) := (P + α( )2 )(v − nβ) − nRT (2)
v
pour des valeurs de P, T, n, γ et β données. Pour trouver cette solution, on résout alors le problème (1) de
façon approchée. Les méthodes pour approcher une racine α de f sont en général itératives : elles consistent à
construire une suite (x(n) )n≥0 telle que
lim x(n) = α.
n→∞
Convergence :
Définition 1 On définit l’erreur absolue à l’étape n par
e(n) = x(n) − α, n ≥ 0.
La convergence des itérations est caractérisée par :
Définition 2 On dit qu’une suite (x(n) )n≥0 construite par une méthode numérique converge vers α avec un
ordre p ≥ 1 si
∃C > 0 : |e(n+1) | ≤ C|e(n) |p , ∀n ≥ n0 (3)
où n0 ≥ 0 est un entier. Dans ce cas, on dit que la méthode est d’ordre p. Si p = 1, il est nécessaire que C < 1
dans (3) pour que x(n) converge vers α. On dit que la convergence est linéaire si p = 1 (C < 1), quadratique
si p = 2, et cubique si p = 3. La constante C est appelée facteur de convergence de la méthode.
1
En général, la convergence dépend du choix de la donnée initiale x(0) : le plus souvent on ne sait montrer la
convergence que localement, c’est-à-dire seulement pour un x(0) “suffisament proche” de la racine α. Les mé-
thodes qui convergent vers α pour tout x(0) ∈ [a, b] sont dites globalement convergentes vers α.
Critère d’arrêt : Soit ε une tolérance fixée. Nous avons le choix entre deux types de critères, ceux basés sur
le résidu et ceux basés sur l’incrément :
Nombre d’itérations maximal : Il est nécessaire, en plus d’un test de type (4) ou (5), d’imposer un nombre
d’itérations maximal (au cas où le test portant sur l’incrément ou le résidu ne serait pas vérifié), c’est-à-dire :
Calcul de l’erreur : Le calcul numérique de l’erreur peut servir d’une part à vérifier les estimations théoriques,
et d’autre part à comparer – en vitesse de convergence– différentes méthodes pour approcher une racine α de f .
Ainsi, en plus du calcul d’une approximation de α, on souhaite calculer |e(n) | = |x(n) − α|, n ≥ 0. Le problème
est que l’on ne connait pas α en général, et même si α est connu, sa valeur risque d’être approchée sur un
ordinateur (par exemple si α = π). Aussi on calculera en pratique un vecteur e de (n + 1)ième composante
en+1 = |x(n) − αa |, 0 ≤ n ≤ nit , où nit ≤ nmax est le nombre d’itérations, et
– αa vaut α si α est connu,
– sinon αa sera une valeur approchée de α aussi précise que possible.
Représentation de l’erreur en pratique : pour visualiser l’erreur on utilisera deux types de graphes :
• d’une part le tracé du vecteur e (en échelle logarithmique) en fonction du nombre d’itérations, c’est-à-dire le
tracé de log10 (ee) en fonction de n, 1 ≤ n ≤ nit . Pour cela on peut utiliser la fonction semilogy de Matlab :
>> semilogy(e)
En particulier, on utilisera cette représentation de l’erreur pour observer et comparer les vitesses de conver-
gence des différentes méthodes. Par exemple si eD est le vecteur erreur correspondant à l’algorithme de dicho-
tomie, et eN celui correspondant à l’algorithme de Newton, on utilisera la représentation suivante :
>> semilogy(e_D)
>> hold on
>> semilogy(e_N)
>> hold off
• d’autre part, le tracé de en+1 en fonction de en ,1 ≤ n ≤ nit−1 , de façon à trouver l’ordre de la méthode.
Rappelons qu’une méthode est d’ordre p ≥ 1 si
|e(n+1) | ≈ C|e(n) |p , ∀n ≥ n0
2
soit encore
ln(|e(n+1) |) ≈ ln(C) + p ∗ ln(|e(n) |), ∀n ≥ n0
Ainsi, les points (ln(|e(n) |), ln(|e(n+1) |)) sont sur une droite de pente p, pour n ≥ n0 . Donc pour trouver l’ordre
de la méthode, il faut tracer cette droite et regarder sa pente. Pour cela, on introduit les vecteurs y et x définis
par :
yn = ln(en+1 ) et xn = ln(en ), 1 ≤ n ≤ nit−1 ,
et on trace y en fonction de x . Sauf éventuellement sur les premières itérations (n ≤ n0 ) la courbe que l’on
obtient est une droite de pente p. On peut tracer sur la même figure (en rouge) la droite y = px :
>> y=log(e(2:length(e)));
>> x=log(e(1:length(e)-1));
>> plot(x,y,’b’,x,p*x,’r’)
Méthode de dichotomie (bisection). Cette méthode est basée sur la propriété suivante :
Soit f : [a, b] → R une fonction continue, telle que f (a)f (b) < 0. Alors ∃α ∈]a, b[ tel que f (α) = 0.
Pour trouver un zéro de f , la méthode de dichotomie consiste à calculer le point milieu m de l’intervalle et à
regarder la valeur de f (m). Selon le signe, on sait dans quel sous-intervalle [a, m] ou [m, b] se trouve le zéro.
Ensuite on réitère le procédé dans le sous-intervalle correspondant. Ce qui conduit à l’algorithme suivant :
Algorithme : On pose a(0) = a, b(0) = b, x(0) = (a(0) + b(0) )/2. Alors pour n ≥ 0 :
– si f (a(n) )f (x(n) ) > 0 on pose a(n+1) = x(n) , b(n+1) = b(n)
– si f (a(n) )f (x(n) ) < 0 on pose a(n+1) = a(n) , b(n+1) = x(n)
puis on pose x(n+1) = (a(n+1) + b(n+1) )/2.
Critère d’arrêt :
Exercice 1 : Montrer qu’un test d’arrêt du type (5) est équivalent à un test d’arrêt
portant sur la longueur des sous-intervalles
|b(n) − a(n) | ≤ ǫ
Convergence :
La lente convergence de la méthode de dichotomie suggère de n’utiliser celle-ci que pour localiser la racine
et s’en approcher. En effectuant quelques itérations de dichotomie, on obtient une approximation de α qu’on
peut utiliser comme point de départ pour une méthode d’ordre supérieur qui convergera plus vite vers la racine
avec une précision donnée. Etudions deux méthodes d’ordre supérieur :
Principe de la méthode de Newton : On part d’une valeur x(0) ∈ [a, b] donnée. Soit Γ la courbe représenta-
tive de f . On construit le nouvel itéré x(1) de sorte que le point (x(1) , 0) soit le point d’intersection entre l’axe
des x et la tangente à Γ passant par le point (x(0) , f (x(0) )). On itère ce processus : Connaissant x(n) , n ≥ 0, on
construit le nouvel itéré x(n+1) de sorte que le point (x(n+1) , 0) soit le point d’intersection entre l’axe des x et
la tangente à Γ passant par le point (x(n) , f (x(n) )).
3
La méthode de Newton étant une méthode de point fixe, l’étude théorique de la convergence sera effectué ci-
dessous.
L’utilisation de la méthode de Newton nécessite le calcul de la dérivée de f en chaque point de l’itération, ce
qui peut être coûteux. C’est pourquoi on remplace souvent dans les calculs la tangente par la sécante.
Méthode de la sécante.
Principe de la méthode de la sécante : On part de deux valeurs x(0) et x(1) dans [a, b] données et on trace la
droite passant par les points (x(0) , f (x(0) )) et (x(1) , f (x(1) )). Elle coupe l’axe des x en x(2) . On itère ce processus :
Connaissant x(n−1) et x(n) , n ≥ 1, on construit le nouvel itéré x(n+1) de sorte que le point (x(n+1) , 0) soit le
point d’intersection entre l’axe des x et la sécante passant par les points (x(n−1) , f (x(n−1) )) et (x(n) , f (x(n) )).
Convergence :
Propriété 1 Supposons que f est C 2 dans un voisinage J =]α − δ, α + δ[, δ > 0 de la racine α, et que f ′ ne
s’annule pas dans ce voisinage. Alors si x(0) et x(1) (choisies dans J ) sont assez √
proche de α, la suite (x(n) )n≥0
définie par la méthode de la sécante converge vers α avec un ordre p = (1 + 5)/2 ≈ 1.618. On dit que la
convergence est superlinéaire.
Méthode de point fixe (ou des approximations successives). Il s’agit d’un procédé plus général pour
trouver les racines d’une équation non linéaire. La méthode est fondée sur le fait que pour f : [a, b] → R, on
peut toujours transformer le problème f (x) = 0 en un problème équivalent
Φ(x) = x,
où la fonction auxiliaire Φ : [a, b] → R a été choisie de sorte que Φ(α) = α quand f (α) = 0. Approcher les zéros
de f revient ainsi à chercher les points fixes de Φ, ce qui se fait en utilisant l’algorithme suivant : étant donné
x(0) , on pose
x(n+1) = Φ(x(n) ), n ≥ 0.
Le choix de Φ n’est pas unique.
Définition 3 Soit f une fonction continue sur [a, b]. On dit que f est lipschitzienne sur [a, b], de constante de
lipschitz L si
|f (x) − f (y) ≤ L|x − y|, ∀x, y ∈ [a, b]
Théorème 4 (convergence des itérations de point fixe) On se donne x(0) et on considère la suite x(n+1) =
Φ(x(n) ), pour n ≥ 0. Si
1. Φ : [a, b] → [a, b] continue,
2. φ lipschitzienne sur [a, b], de constante de lipschitz L < 1
alors Φ a un unique point fixe α dans [a, b] et la suite (x(n) ) converge vers α pour tout choix de x(0) ∈ [a, b].
Lemme 5 Si Φ est dérivable sur [a, b] et si sa dérivée est bornée par L sur [a, b], alors Φ est lipschitzienne sur
[a, b], de constante de lipschitz L.
4
Partie algorithmique
Notons que pour implémenter la méthode de Dichotomie, il n’est pas utile (et même coûteux en place
mémoire) de stocker les valeurs de a(n) ,b(n) et x(n) .
Q. 1 Ecrire la fonction Dichotomie permettant de calculer une valeur approchée d’un zéro d’une fonction f
donnée, dans un intervalle [a, b] de R donné, de sorte que lorsque l’algorithme s’arrête, on ait
|xk − α| < tol
avec tol une tolérance fixée (tol ∈ R, tol > 0). Ecrire une fonction DichotomieErreur ayant en paramètre
d’entrée supplémentaire α et en paramètre de sortie supplémentaire le vecteur de l’erreur e .
Q. 2 Ecrire la fonction Newton permettant de calculer une valeur approchée d’un zéro d’une fonction f donnée,
dans un intervalle [a, b] de R donné, par l’algorithme de Newton. Ecrire une fonction NewtonErreur ayant en
paramètre d’entrée supplémentaire α et en paramètre de sortie supplémentaire le vecteur de l’erreur e .
Q. 3 Ecrire la fonction Secante permettant de calculer une valeur approchée d’un zéro d’une fonction f donnée,
dans un intervalle [a, b] de R donné, par l’algorithme de la sécante. Ecrire une fonction SecanteErreur ayant
en paramètre d’entrée supplémentaire α et en paramètre de sortie supplémentaire le vecteur de l’erreur e .
Q. 4 Ecrire la fonction PointFixe permettant de calculer une valeur approchée d’un zéro d’une fonction f
donnée, dans un intervalle [a, b] de R donné, par la méthode du point fixe. Ecrire une fonction PointFixeErreur
ayant en paramètre d’entrée supplémentaire α et en paramètre de sortie supplémentaire le vecteur de l’erreur e .
Partie programmation
a) Ecrire une fonction Matlab permettant de tracer une fonction continue f : R → R sur un intervalle donné
[a, b] et utilisant la fonction plot de Matlab. Utiliser cette fonction pour représenter L5 sur l’intervalle [-1,1].
Dans quel intervalle se situent les racines de L5 ? Donner (à l’aide du graphique) une premième approximation
de chaque racine.
b) Pour avoir une meilleure approximation, par exemple de la racine proche de 0.9, appliquer l’algorithme
de dichotomie en prenant par exemple a = 0.6, b = 1, nmax = 100 et ǫ = 10−10 . Quelle valeur obtenez-vous ?
Vérifier que la convergence est obtenue en un nombre d’itérations conforme à l’estimation théorique de l’exercice
2 b). Tracer le vecteur e de l’erreur. Quel type de convergence est-ce ?
Q. 3 Ecrire les fonctions Matlab Newton et NewtonErreur
Q. 4 a) Utiliser l’algorithme de Newton pour trouver une racine de la fonction
1
f1 (x) =+ ln x − 2, x > 0.
x
Comparer à la valeur obtenue avec la fonction Matlab “fzero”. De quel ordre est la méthode ?
b) Utiliser la méthode de Newton pour trouver le zéro de la fonction
f2 (x) = x3 .
De quel ordre est maintenant la méthode ? Justifiez votre réponse en calculant analytiquement e(n+1) en fonction
de e(n) . Vérifier que vos résultats correspondent aux résultats théoriques de l’exercice 3.
5
Q. 5 On considère l’application à l’équation d’état d’un gaz réel vue ci-dessus. On s’intéresse au dioxyde de
carbone (CO2 ), à la pression P = 10[atm] (on rappelle que 1[atm] = 101325[P a]), et à la température T =
300[K]. Pour ce gaz, les constantes du modèle sont α = 0.3643[J.m3 .mol−2 ] et β = 4.27.10−5 [m3 .mol−1 ].
Déterminer, dans ces conditions de température et de pression, une approximation du volume v occupé par 1kg
de CO2 , la masse molaire du gaz étant 44.01[g.mol−1 ]. On utilisera par exemple la méthode de Newton. On
comparera la valeur obtenue à celle calculée en supposant le gaz parfait, et on commentera son résultat.
f3 (x) = ex − 2 cos(x).
Pour cette fonction, représenter sur un même graphe l’erreur obtenue avec la méthode de dichotomie, de Newton
et de la sécante. Quel est l’ordre de chaque méthode ? Quelle méthode vous semble-t-elle la plus performante en
terme de temps de calcul ?
f4 (x) = 2 sin(x) − x,
pour trouver un zéro de f4 dans l’intervalle [1.5,2]. Vérifier que le théorème 4 s’applique. Que se passe-t-il si
on étend l’intervalle à [0,2] ?