TP1 : Recherche de racines.

16
c 2008 [Introduction à l’Analyse Numérique.] TP1 : Recherche de racines. Destercq Lionel, Dubuc Xavier et Suriano Vanessa.

Transcript of TP1 : Recherche de racines.

Page 1: TP1 : Recherche de racines.

c

2008

[Introduction à l’Analyse

Numérique.] TP1 : Recherche de racines.

Destercq Lionel, Dubuc Xavier et Suriano Vanessa.

Page 2: TP1 : Recherche de racines.

Question 1 :

Nous avons implémenté ces 5 méthodes comme demandés, chacune d’entre elle correspond à une

classe java,

� Méthode de la bissection : Bissection.java

� Méthode de la fausse position : FaussePosition.java

� Méthode de la sécante : Secante.java

� Méthode de Newton : Newton.java

� Méthode du point fixe : PointFixe.java

Pour chacune de ces classes, nous avons définis 4 constructeurs,

1. un constructeur par défaut,

2. un constructeur prenant un nombre d’itérations maximum,

3. un constructeur prenant un petit nombre (epsilon) utilisé pour rendre la différence entre 2

itérés très petite et arrêter la recherche,

4. un constructeur complètement paramétrable dans lequel les 2 informations peuvent être

précisées.

Pour ce faire, nous avons eu 2 choix à faire :

� Une valeur d’initialisation pour le petit nombre epsilon pour le constructeur numéro 2,

� Nous l’avons initialisé à −1 afin que la méthode « rootFinder() » arrête la recherche si

et seulement si le nombre d’itérations maximum est atteint ou que la racine exacte a été

trouvée.

� Une valeur d’initialisation pour le nombre d’itérations max pour le constructeur numéro 3,

� Nous l’avons initialisé à 10000 afin de permettre l’ordinateur assez d’itérations pour

trouver une approximation correcte mais aussi de l’empêcher de boucler éternellement

dans le cas où la méthode ne convergerait pas.

Afin de représenter les conditions d’arrêt, nous avons eu recours à une interface, CondArret.java,

conformément aux consignes.

Nous joignons également à ce rapport un programme de test pour chaque méthode de recherche

implémentée, il s’agit des classes :

� BissectionTest.java

� FaussePositionTest.java

� SecanteTest.java

� NewtonTest.java

� PointFixeTest.java

ainsi qu’un programme de test général servant de « comparaison » entre les différentes méthodes,

ComparaisonTest.java.

Page 3: TP1 : Recherche de racines.

Question 2.

b) On choisit diverses fonctions mettant à mal ou non les différentes méthodes d'approximation de

racines.

La première fonction choisie est ���� = � � ���� – � qui, à priori, possède toutes les

conditions requises afin que chaque méthode converge vers la racine. En effet cette fonction

possède deux points � �� � tels que ���� > 0 �� ���� < 0 ce qui satisfait la condition pour les

méthodes de bissection, fausse position. Pour la méthode du point fixe on cherche le point fixe de la

fonction ���� = � � ���� et dont la dérivée est ����� = −

� ������ qui est toujours en valeur

absolue strictement inférieure à 1.

Voici le graphique de la convergence de chacune des méthodes pour cette fonction avec en rouge,

jaune, violet, noir et vert respectivement les méthodes de bissection, point fixe, fausse position,

sécante et Newton (les couleurs restent les mêmes pour chaque graphique). (A noter ici que la

méthode de la fausse position passe à coté de la racine sans jamais revenir dessus mais ça reste de

l'ordre de 10��.)

Figure 1 - ToutSatisfait.png (SuiteGraph.java)

Page 4: TP1 : Recherche de racines.

On constate, comme vu au cours, que la méthode de Newton converge assez rapidement

ainsi que la méthode de la sécante. La méthode la plus lente étant celle de la bissection.

Prenons une seconde fonction, ���� = � ���� �� �����ℎ � �é"é�����. Avec cette

fonction, la méthode de Newton diverge si on ne se trouve pas assez près de la racine. En effet, la

méthode de Newton consiste à prendre la tangente en un point, de trouver la racine de cette

tangente et à partir de celle-ci et répéter l'opération jusqu'à trouver (ou non) la racine. Dans ce cas-

ci, si nous prenons x = 3 comme point de départ, la racine de la tangente en 3 de la fonction est

strictement négative et ne possède alors pas d'image car elle n'est pas dans le domaine de définition

de la fonction.

De même la méthode du point fixe diverge. En effet, on cherche le point fixe de la fonction

���� = � ���� + � et dont la dérivée est ����� = 1/� + 1 et qui donc pour tout � > 0 est

supérieure à 1 en valeur absolue, le point fixe est donc répulsif.

Figure 2 - Log.png

Page 5: TP1 : Recherche de racines.

Sur ce graphique on voit bien que la méthode du point fixe diverge (son erreur grandit avec

le nombre d’itérations) et que celle de Newton également. Cette dernière retourne un NaN à cause

de l’essai de calcul de log��� sur un � ≤ 0 (c’est pour ça que sa courbe chute vers le fond du graphe).

Comme troisième fonction nous avons choisi simplement ���� = �². Cette fonction ne

respecte ni les conditions pour la bissection, la fausse position (car ∀� ∈ ℝ, ���� = �² ≥ 0) ni celles

pour la méthode du point ���� ����� = �² + �, �� ∀�, |�����| = |2� + 1| ≥ 1�.

Les seules méthodes qui fonctionnent sont donc la sécante et Newton.

Figure 3 - XCarre.png

On remarque (comme on s'y attend) que Newton converge plus vite que la méthode de la

sécante. C’est normal vu que la convergence de la méthode de Newton converge quadratiquement.

Enfin comme dernière fonction on prend : ���� = �² – 2. Si par la méthode de Newton on

prend comme point de départ �2 = 0, cette méthode ne fonctionnera pas car ����� = 2�

et 3��0� = 0. Dans cette méthode, l’itéré consécutif à �4 est donné par la formule :

�45 = �4 − 6�78�96�78�, on aura alors 0 au dénominateur de la formule, ce qui est bien évidement

impossible. On évitera donc de partir de � = 0.

Page 6: TP1 : Recherche de racines.

Idem pour la méthode du point fixe car la fonction ���� = �² + � – 2 possède comme dérivée

����� = 2� + 1 qui pour les deux racines est > 1 en valeur absolue ce qui rend les points fixes

de ����, que sont les racines de ����, répulsifs. Voici le graphique correspondant :

Figure 4 - XCarreMoins2.png

Une fois de plus, c'est la méthode de Newton qui converge le plus vite suivie de la méthode

de la sécante.

Question 3.

: �� � ∈]0, +∞[, il nous est demandé d’utiliser la méthode du point fixe sur 3 fonctions différentes,

���� = >7 , ����� = 2� − >

7 , �? = � @� + >

7A ; afin d’approcher la valeur de √� . Pour ce faire, nous

procéderons en 3 étapes.

a) √C est l’unique point fixe de ]D, +∞[ de ces 3 fonctions.

A. Tout d’abord, une preuve graphique ��E�� � = 2� que ces 3 fonctions admettent

bien un point fixe en √� :

Page 7: TP1 : Recherche de racines.

Figure 5 - Preuve Point Fixe.png (PreuvePointFixe.java)

On peut y voir que toutes les fonctions croise la droite d’équation ���� = � en √2.

B. Soit �∗, un point du domaine de ����, par la définition du point fixe, �∗ sera un

point fixe de ���� = >7 si et seulement si :

���∗� = >7∗ = �∗

� �∗² = �

� �∗ = ± √�

� �∗ = √� est l’unique point fixe de ���� = >7 sur ]0, +∞[.

C. Soit �∗, un point du domaine de �����, par la définition du point fixe, �∗ sera un

point fixe de ����� = 2� − >7 si et seulement si :

����∗� = 2�∗ − >7∗ = �∗

� �∗² = �

� �∗ = ± √�

� �∗ = √� est l’unique point fixe de ����� = 2� − >7 sur ]0, +∞[.

D. Soit �∗, un point du domaine de �?���, par la définition du point fixe, �∗ sera un

point fixe de �?��� = � �� + >

7� si et seulement si :

�?��∗� = � ��∗ + >

7∗� = �∗

� 7∗

� + >�7∗ − �∗ = 0

� 7∗H

�7∗ + >�7∗ − �7∗²

�7∗ = 0

Page 8: TP1 : Recherche de racines.

� � = �∗H

� �∗ = ± √�

� �∗ = √� est l’unique point fixe de �?��� = � �� + >

7� sur ]0, +∞[.

b) Seul IJ�K� possède une convergence locale pour l’algorithme du point fixe.

Rappelons le résultat vu au cours, ���� possède une convergence locale pour l’algorithme du

point fixe�|��7���| < 1.

Nous allons donc calculer les dérivées de ces 3 fonctions en a et constater si l’inégalité ci-

haut est vérifiée ou non.

A. On calcule la fonction dérivée de ����, �7���� = �7>7 = �. �7 @

7A = − >7H, on

l’évalue en √� : �7 �L√�M = − >√>² = −1 .

On constate que l’inégalité n’est pas vérifiée (|−1| ≮ 1� et donc que ���� ne

possède pas de convergence locale.

B. On calcule la fonction dérivée de �����, �7����� = �7 @2� − >7A = 2 − �. �7 @

7A

= 2 + >7H, on l’évalue en √� : �7 ��L√�M = 2 + >

√>² = 3 . On constate que l’inégalité n’est pas vérifiée �|3| ≮ |1|� et donc que ����� ne

possède pas de convergence locale.

C. On calcule la fonction dérivée de �?���, �7�?��� = �7� @� + >

7A = � + >

� . �7 @7A

= � − >

�7H, on l’évalue en √� : �7 �?L√�M = � − >

�√>² = 0 . On constate que l’inégalité est vérifiée �0 < 1� et donc que �7�?��� possède une

convergence locale.

Ces 3 points prouvent que seule PKIJ�K� possède une convergence locale.

c) On choisit PKIJ�K� pour approximer √C.

Du point b), on voit que seule la fonction �7�?��� possède une convergence locale, on

choisit donc logiquement cette dernière pour calculer ce point fixe. Voici quelques

arguments graphiques avec � = 2,

Page 9: TP1 : Recherche de racines.

A.

Figure 6 - Preuve Convergence.png (PreuveConvergence.java)

3 remarques sur ce graphique :

� On peut voir que les itérés de ���� oscillent entre 2 valeurs

(en l’occurrence 0,6666 … �� 3) et ce indéfiniment prouvant ainsi sa non-convergence.

� On peut également voir que les itérés de ����� s’éloignent totalement de la valeur du

point fixe prouvant ainsi sa non-convergence.

� Finalement, on peut voir que IJ�K� converge vers la valeur du point fixe et ce après très

peu d’itérations.

B.

Figure 7 - Erreur Relative.png (ErreurRelative.java)

Page 10: TP1 : Recherche de racines.

Ce graphique confirme ce qui était observé sur le graphe précédent, on peut ainsi voir que plus le

nombre d’itérations augmentent plus la différence entre les itérés de ����� et la valeur du point fixe

augmente (et très rapidement en fait, après 6 itérations seulement, la différence vaut déjà ≅ 79,89).

On peut également remarquer que les itérés de ���� oscillent (confirmant le graphique précédent)

ainsi que le fait que �?��� converge très rapidement, de manière quadratique (la forme de la courbe

est une demi parabole orientée vers le bas), vers la valeur du point fixe.

Au vu de ces arguments théoriques et graphiques, tout nous pousse à utiliser la fonction

IJ�K� pour approximer √C.

Question 6.

Rappelons à nouveau le résultat vu au cours :

���� possède une convergence locale pour l’algorithme du point fixe� |��7���| < 1.

Dans cet exercice, on nous demande d’utiliser l’algorithme du point fixe pour résoudre une équation

utilisée en mécanique céleste pour calculer la position des planètes : = � − W. sin���.

Pour la résoudre, on cherche le � �[ = � − W. sin���. Pour ce faire, il faut transformer cette

expression en une forme appropriée pour utiliser l’algorithme du point fixe.

Nous pouvons distinguer 2 cas :

1. On prend ���� = + W. sin��� − � et on veut ���� = 0.

On sait que la méthode du point fixe nous permet de trouver le � �[ ���� = � , on prend

donc ���� = + W. sin ��� et on cherche le point fixe de cette fonction.

(Rappel : trouver � �[ ���� = � revient à trouver � �[ ���� = 0 vu que ���� = ���� − �)

Avant de commencer les calculs, il faut s’assurer que la méthode va bel et bien converger.

Pour ce faire, on utilise le résultat du cours cité ci-haut. On calcule donc la dérivée et on

étudie sa valeur,

On a �7���� = W. cos ���, ici W = 0,2 et on sait que −1 ≤ cos ��� ≤ 1.

On peut donc écrire −0,2 ≤ �7���� ≤ 0,2 ou encore |�7����| ≤ 0,2 < 1

On a donc que pour n’importe quelle valeur de x (vu que le x est arbitraire ici) |�7����| sera

strictement inférieure à 1.

� La méthode du point fixe convergera pour tout réel. (par le résultat cité ci-haut)

2. On prend ���� = � − − W. sin���,

Pour les mêmes raisons que le cas 1, on prend ���� = 2� − − W. sin ��� et on cherche le

point fixe de cette fonction.

Page 11: TP1 : Recherche de racines.

A nouveau, il nous faut savoir si la méthode va converger, on procède donc de la même

façon :

On a �7���� = 2 − W. cos ���, ici W = 0,2 et on sait que −1 ≤ −cos ��� ≤ 1.

Donc on peut écrire −0,2 ≤ −W. cos��� ≤ 0,2.

Si on ajoute 2 dans chaque membre de l’inéquation on obtient : 1,8 ≤ 2 − W. cos��� ≤ 2,2.

On peut tirer de cette inéquation que 2 − W. cos��� > 0 et donc

∀�, |2 − W. cos���| = 2 − W. cos ���, dès lors on a 1 < 1,8 ≤ |2 − W. cos�x�| = |�7����| On a donc, pour n’importe quelle valeur de x (vu que le x est arbitraire ici), que |�7����| sera

strictement supérieure à 1.

� La méthode du point fixe ne convergera pas et ce pour aucun réel.

(par le résultat cité ci-haut)

Vérifions ces arguments théoriques sur un graphique :

Figure 8 - Meca_Celeste.png (MecaCeleste.java)

On peut remarquer que les 2 fonctions traitées (Cas 1 et 2) possèdent bel et bien le même point fixe

(x*), que ���� est une courbe pratiquement horizontale (et donc à pente très faible) ainsi

que E�^����� est une courbe très pentue (et donc à pente élevée). Ces 3 observations confirment

nos arguments théoriques.

On va donc utiliser la première méthode pour résoudre l’équation, c’est-à-dire chercher le point

fixe de la fonction ���� = + W. sin ���. Après utilisation de la méthode du point fixe

(MecaPointFixe.java), on trouve le point fixe : �∗ ≅ 0.9643338876952228 et ce, que l’on parte

de 0,1 a − 1.

Page 12: TP1 : Recherche de racines.

Ce K∗ sera donc le x tel que b = K − c. def �K�, résolvant ainsi l’équation demandée.

Vérification :

0,8 = �∗ − 0.2 sin �∗

� 0,8 ≅ 0.9643338876952228 − 0.2 sin 0.9643338876952228

� 0,8 ≅ 0,96769988905790717986204567497 − 0,821669438476113311461983347076

� 0,8 ≅ 0,80000000000000013770760333058466

� OK.

Regardons graphiquement ce que donnent les itérations de la méthode du point fixe :

Figure 9 - Meca Point Fixe.png (MecaPointFixe.java)

Remarque : la méthode converge plus vite lorsque l’on part de -1.

Montrons à présent graphiquement que la méthode du point fixe utilisée sur la fonction du second

cas : ���� = 2� − − W. sin��� ne converge pas :

Figure 10 - Meca No Conv.png (MecaNoConv.java)

Page 13: TP1 : Recherche de racines.

On voit clairement que les itérés s’éloignent complètement de la valeur du point fixe et on en a la

confirmation nette lorsque l’on regarde les valeurs générées par la méthode après, par exemple 10

itérations :

� En partant de 1, la méthode trouve �∗ ≅ 31.27 en 10 itérations,

� En partant de 0, la méthode trouve �∗ ≅ − 783.61 en 10 itérations.

� En partant de -1, la méthode trouve �∗ ≅ − 1728.74 en 10 itérations.

� Ceci nous conforte encore dans le choix que nous avons fait.

Question 8.

Tout d’abord, rappelons-nous l’équation générale de la courbe d’un polynôme du second degré :

"��� = ��² + �� + �, � ≠ 0

Nous savons 3 choses sur ce polynôme,

1. Il passe par le point �0, ℎ�,

Cet indice nous permet de trouver que � = ℎ, en effet, le fait que le polynôme passe par le

point �0, ℎ� nous indique que ce point est une solution de l’équation du polynôme, c’est-à-

dire : "�0� = �. 0� + �. 0 + � = ℎ � � = ℎ

2. Sa dérivée en � = 0 est nulle (�7��0� = 0),

Cet indice nous permet d’affirmer que � = 0, en effet, l’équation de la dérivée de "��� est la

suivante : �7"��� = 2�� + � et on sait que �7"�0� = 0, dès lors, en � = 0, on a

l’égalité 2�. 0 + � = 0 � � = 0 .

3. Il passe par le point �1,0�.

Cet indice nous permet de trouver, à l’aide des 2 points précédents, que � = −ℎ, en effet, le

fait que le polynôme passe par le point �1,0� nous indique que ce point est une solution de

l’équation du polynôme, c’est-à-dire : "�1� = �. 1² + �. 1 + � = 0, or on a � = ℎ �� � = 0,

on trouve donc que � + 0.1 + ℎ = 0 ou, autrement dit, � = −ℎ . Ceci implique que ℎ ≠ 0

car on a supposé que � ≠ 0 dans l’écriture de la forme générale de l’équation de "���.

Conclusion de ces 3 points : l’équation du polynôme est : "��� = −ℎ�² + ℎ

Page 14: TP1 : Recherche de racines.

On trace le polynôme pour certaines valeur de ℎ �ℎ = 0,1; ℎ = 0,5; ℎ = 0,7; ℎ = 0,9� :

Figure 11 - PolynomeH.png (PolynomeH.java)

a) Recherche d’une formule pour �i en fonction de ℎ ∈ [0,1].

Grâce aux points précédents, on peut trouver une formule qui nous donnerait �i, le point fixe de ce

polynôme dans [0,1], en fonction de ℎ.

On sait que �i est le point fixe de "��� :

� "��i� = �i

� −ℎ�i� + ℎ = �i

� ℎ�i� + �i − ℎ = 0

On cherche donc les �i vérifiant cette équation, pour ce faire on calcule le discriminant :

∆= 1 − 4. ℎ. �−ℎ� = 1 + 4ℎ² > 0 ���� � � 3� 2 � ���� " �������

Dès lors, on a : �i = �±k5�i²�i , on sait que ℎ ∈ [0,1] et on a également ℎ ≠ 0 (voir point

précédent), dès lors ℎ > 0, et donc on choisit �i = �5k5�i²�i car on veut que �i ∈ [0,1].

Conclusion de ce point : l’équation de �i en fonction de ℎ est :

�i�ℎ� = −1 + k1 + 4ℎ²2ℎ

Page 15: TP1 : Recherche de racines.

b) Test de la convergence de la méthode du point fixe sur ce polynôme.

Nous testons cette méthode pour 4 valeurs de h (nous fixons le nombre d’itérations à 30, cela

permettant d’ores et déjà d’apercevoir ce qui va se passer) :

• ℎ = 0,9, en partant de 0,01 � on trouve �i ≅ 0.588403 avec la formule donnée en a) et

�i ≅ 0.282023 avec la méthode du point fixe.

• ℎ = 0,7, en partant de 0,01 � on trouve �i ≅ 0.514617 avec la formule donnée en a) ainsi

qu’avec la méthode du point fixe.

• ℎ = 0,5, en partant de 0,01 � on trouve �i ≅ 0.414213 avec la formule donnée en a) ainsi

qu’avec la méthode du point fixe.

• ℎ = 0,1, en partant de 0,9 � on trouve �i ≅ 0.099019 avec la formule donnée en a) ainsi

qu’avec la méthode du point fixe.

Nous traçons la suite des nombres générés par la méthode du point fixe et voici le graphique que

nous obtenons :

Figure 12 - Convergence Point Fixe.png (PointFixePolynomeH.java)

On peut faire 3 remarques sur ce graphique :

1. Lorsque ℎ = 0,9, la méthode ne converge pas les valeurs des nombres générés oscillent

principalement entre 2 valeurs.

2. Lorsque ℎ < 0,9, la méthode converge.

3. Plus ℎ est proche de 0 plus la méthode converge rapidement. (après 3-4 itérations,

quand ℎ = 0,1, la méthode est déjà très proche de la valeur du point fixe alors que quand

ℎ = 0,7 la méthode demande pratiquement 20 itérations).

c) et d) Etude de la pertinence des derniers itérés de la méthode du point fixe en partant de

0,5.

Page 16: TP1 : Recherche de racines.

On construit la suite des itérés à partir de � = 0,5 en fixant le nombre d’itérations à 1005, et on

récupère les 6 derniers itérés pour une centaine de h répartis uniformément sur [0,1] que l’on place

sur le graphique de la fonction l: n ⟼ Kn. On y place également la fonction �"�ℎ�: ℎ ↦ |�"i��i�|. On prend donc ℎ ∈ {0,01; 0,02; 0,03 … 1} et on obtient le graphe suivant :

Figure 13 - FonctionH_xH.png (FonctionHxH.java)

On remarque que pour un ℎ < ℎ∗, la courbe de f est bien approximée par les nombres générés par la

méthode du point fixe alors que lorsque ℎ ≥ ℎ∗ les points se séparent en 2 branches qui s’écartent

autour de la courbe de f. A partir de cette observation, on peut en déduire que pour un ℎ < ℎ∗, la

méthode convergera et pour un ℎ ≥ ℎ∗, elle ne convergera pas.

On explique cela avec une seconde observation, en effet, on observe également que le ℎ∗ est en fait

le point où |�"i��i�|prend la valeur 1. Or on a vu au cours que la méthode du point fixe converge

uniquement si |�"i��i�| < 1, cela confirme donc toutes nos observations, si on utilise la méthode

du point fixe sur cette fonction avec un ℎ < ℎ∗, celle-ci convergera, sinon elle ne convergera pas.

Remarque : si on continue et que l’on prend des ℎ > 1, chaque branche se divisera à nouveau en 2,

et ainsi de suite (ca a été vu au cours).

Recherche de ℎ∗.

Utilisons la méthode de la bissection sur la fonction �"�ℎ�: ℎ ↦ |�"i��i�| − 1, afin de trouver la

valeur de ℎ∗, en effet, on cherche le ℎ∗ tel que |�"i��i�| = 1 ou, autrement dit, |�"i��i�| − 1 = 0.

Les calculs sont faits dans le fichier HCalculator.java et on trouve ℎ∗ ≅ 0.8660254037844387 .

Conclusion de cet exercice : la méthode d’approximation de racine dite « du

point fixe » utilisée avec le polynôme "i��� = −ℎ�² + ℎ ��E�� ℎ ∈ [0,1]� ne

convergera que si 0 < ℎ < 0.866025.