La méthode de Dichotomie
Transcription
La méthode de Dichotomie
La méthode de Dichotomie La méthode de Dichotomie Trouver la racine d’une équation par la méthode de Dichotomie. Ça peut paraitre une méthode très compliquée à comprendre ou à appliquer. Loin de là, c’est comme pour dire réaliste en vous dit pragmatique, juste pour impressionner. Enfin, la méthode de Dichotomie c’est l’illustration même de la stupidité d’un ordinateur. Est-ce que vous savez que l’ordinateur n’est pas intelligent ? Difficile à admettre et pourtant c’est vrai. Le pauvre pour faire une opération comme 4 x 10, il va faire dix additions (4+4=8 ensuite 8+4=12 et 12+4=16……et j’en passe). Son principal atout c’est la rapidité et c’est comme ça qu’il peut nous dépasser tous. Pour revenir à notre sujet, si vous avez un problème complexe et vous voulez le résoudre par ordinateur. Il faut penser absurde, exactement comme l’ordinateur et imaginer l’algorithme le plus primaire possible. Peu importe le nombre d’opérations à faire pourvue qu’elles soient des trucs simples comme opérations arithmétiques ou comparaisons logiques. On va illustrer tout ça à travers l’exemple de la méthode de Dichotomie. Soit à résoudre une équation quelconque (non linéaire, trigonométrique ou ce que vous voulez, on s’en fou). F(x) = 0 On commence par imaginer le tracé de la fonction y=f(x) entre x=a et x=b A ce niveau if faux quand même vérifier que la fonction est continue. Chose assez facile à faire. Il est évident que si f(a) et f(b) sont de signes opposés, la solution x0 vérifiant f(x0)=0 se trouve à l’intérieur de l’intervalle (a,b) voir la figure ci-dessous. Reste à trouver le moyen de capter cette solution. Une dernière condition à vérifier : si le signe de la dérivée est constant sur l’intervalle (a,b), le graphe de la fonction ne peut couper l’axe des x qu’une seule fois. On en déduit que la solution est unique. L’algorithme de la méthode de Dichotomie 1. 2. 3. 4. Calculer f(a) et f(b) Vérifier que la solution existe dans l’intervalle [a,b], (il faut que f(a)*f(b) <0) Diviser l’intervalle [a,b] en deux (d’où l’appellation dichotomie) Trouver dans quel sous intervalle se situe la solution a. Soit c le milieu de l’intervalle [a,b] b. Vérifier le signe de f(a)*f(c) i. Si <0 : la solution se trouve dans [a,c] ii. Si >0 : la solution se trouve dans [c,b] 5. Vérifier si ce nouveau sous intervalle est inférieur à la précision désirée a. Si oui : on a trouvé la solution -- > sortie www.abbesazzi.com, Marseille, 25 Avril 2013 Page 1 La méthode de Dichotomie b. Si non : continuer 6. Considérer les bornes du nouveau sous intervalle et revenir à 3 Vous voyez bien que l’approche n’a rien de compliqué mais c’est sûr qu’elle va aboutir. Passons maintenant à l’organigramme. Waw, c’est beaucoup de travail pour un truc assez simple. Bref, on est en pédagogie il faut faire les choses en détail. C’est essentiel pour passer aux trucs plus compliqués. L’organigramme : Si quelqu’un peut le faire, je pourrais l’insérer par la suite. Je déteste dessiner… Maintenant, il faut traduire l’organigramme en langage de programmation (matlab, c, fortran ou autre). Moi je suis dans le fortran…allons y Ah plus intelligent, il y a surement quelqu’un, quelque part qui a déjà écrit le programme. En plus on est en 2013 (Dieu merci, nous sommes connectés). Je vais sur google et je tape (dichotomie fortran). Je clic sur le premier lien trouvé, chanceux je tombe sur le programme souhaité. Je vais juste rajouter des commentaires pour expliquer ce qu’on fait (tout ce que je rajoute est en bleu gras): Le Programme Fortran !* !* Recherche des zeros par methode de dichotomie Program dichotomie !* !* Declarations !* ! c’est le nombre d’itérations maximale à ne pas dépasser ! il est fixé ici à 10000, largement suffisant integer MAX parameter (MAX = 10000) ! a et b : sont les bornes de l’intervalle de départ ! C’est valeurs seront introduites par la suite en interactif ! precision : c’est un nombre infiniment petit pour tester l’arrêt ! du calcul, lui aussi est introduit en interactif ! Vous pouvez prendre 10-3 ou 10-4 c’est suffisant real a, b, precision, gauche, droite, fg, fc, c ! f : c’est la variable qui renvoi à la fonction étudiée ! L’expression de la fonction est introduite à la fin du programme real f integer i !* !* Lecture des donnees !* write(*,*) "Intervalle a etudier?: " read(*,*) a, b write(*,*) "Precision necessaire?: " read(*,*) precision !* !* Initialisations !* i = 0 gauche = a www.abbesazzi.com, Marseille, 25 Avril 2013 Page 2 La méthode de Dichotomie ! Ici une erreur, la valeur ‘a’ est introduite de part et d’autre ! J’ai rectifié ! FAUX droite = a droite = b fg = f(gauche) !* !* Boucle d'iteration !* do i = 1,MAX ! On calcule ‘c’, milieu entre ‘a’ et ‘b’ c = (gauche + droite)/2 ! J’ai rajouté cette ligne pour afficher l’historique write(*,*)i,c ! Là aussi une autre erreur….grrr c’est des pièges ou quoi ! il faut affecté f(c) à fc et non f(gauche) ! Je corrige ! FAUX fc = f(gauche) fc = f(c) if (fg*fc .lt. 0.) then !la solution est entre ‘a’ et ‘c’, la borne droite sera déplacée vers ‘c’ droite = c else !la solution est entre ‘c’ et ‘b’, !la borne gauche sera déplacée vers ‘c’ ! et bien sur fg est actualisée gauche = c fg = fc endif ! ici on fait le test sur la dimension de l’intervalle ! si inferieure à la limite imposée on sort, sinon on continue la boucle if((droite - gauche).lt. precision) then write(*,*) "x = ", (gauche + droite)/2. stop endif enddo write(*,*) "Convergence non obtenue" stop end !* ! Ici aussi je ne comprends pas comment est définit cette fonction ! Je rectifie Function f(x) Real f ! J’annule real functionf(x) !* !* Cette fonction est juste un exemple. !* Elle doit etre remplacee !* real x f = -x*x + 2.*x + 3. return end Ayant trouvé des anomalies sur le programme original, il est bon de le tester tel qu’il est et seulement ensuite passer à la version corrigée. bla bla …..ok c’est confirmé, les erreurs étaient bel est bien réelles. Cela n’enlève en rien le mérite des premiers auteurs, je reviens un peu en arrière (en enlevant /dichof.html sur l’adresse web) et je tombe sur un cours bien détaillé et plus complet. Je peux même prendre une figure que je modifie un peu et qui va me faire gagner un peu de temps. www.abbesazzi.com, Marseille, 25 Avril 2013 Page 3 La méthode de Dichotomie Pour terminer, je reviens au programme est j’introduis une ligne (C’est la ligne en vert gras) pour afficher l’évolution de la solution. Ce qui va me permettre de voir comment je converge vers la solution et combien d’opérations à fait notre ‘stupide’ ordinateur pour arriver à la solution. Vous pouvez aussi vous amuser à écrire l’historique sur un fichier et ploter les résultats. B 0 -50 y -100 -150 -200 -250 0 2 4 6 8 10 12 14 16 18 20 22 24 26 x Voilà, je vous laisse faire. Si vous avez aimé vous n’aimez pas, si vous êtes contre ou si vous avez des questions, n’hésitez pas, y’a les commentaires pour ça….je suis en déplacement, beaucoup de belles chose à voir bien sûr mais aussi moins de responsabilités quotidiennes, donc j’ai le temps de bloger. www.abbesazzi.com, Marseille, 25 Avril 2013 Page 4