La méthode de Dichotomie

publicité
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
Téléchargement