Université de GenèveDépartement d'informatique
P ro g ra m m e r e n
8 . L a r e c h e rc h e d e « z é ro s »
« In tr o d u c tio n à l’ in fo rm a tiq u e » s e m e st re d 'é té 2 0 0 2 O liv ie r S c h a a d
B ib lio g ra p h ie
•Introductory JAVA for Scientists and EngineersRichard Davies, ed Addison-Wesley, 1999,ISBN 0-201-39813-3,http://cseng.aw.com/
•http://www.jscieng.co.uk/
•http://www.jscieng.co.uk/Code/NumComp/
R e ch e rch e d e « z é ros »
• L a re che rche d e « z é ros » d ’une fo n ct io n p e rm e t d e m a n iè re g é n é ra le d e tr o u v e r u n e s o lu tio n à l’ é q u a tio n :
f(x,y,....) = zf(x,y,...) –z = 0• L a re che rche de z éros de la dér iv ée d ’u n e f o n c tio n p e rm e t d e t ro u v e r d e s v a le u rs s in g u liè re s te lle s q u e m in im a e t m a x im a
M é thod e s nu m é riqu e s
• L a r é s o lu tio n d ’u n e é q u a tio n f (x
i) = 0 n ’e s t p a s t o u jo u rs p o s s ib le o u r é a lis a b le p a r u n e v o ie a n a ly tiq u e ( la p lu s p ré c is e , la p lu s c o m p lè te ). D a n s d e n o m b re u x c a s e n s c ie n c e s , il e s t n é c e s s a ir e d e re c o u rir à d e s m é th o d e s n u m é riq u e s q u i n é c e s s it e n t l’é c rit u re d e p ro g ra m m e s o u a u m in im u m l’ e m p lo i d e p ro g ra m m e s in fo rm a tiq u e s .
E x e m p le
00.20.40.60.811.21.41.61.82 -20 0 20 40 60 80 100
Z ér o
T h é o rè m e f o n d a m e n ta l
• L a r e c h e rc h e n u m é riq u e d e « z é ros » u tili s e le s c o n s é q u e n c e s d ir e c te s d ’u n th é o rè m e f o n d a m e n ta l d ’a lg è b re :
–Si une fonction continue et monotone dansl’intervalle [a,b] possède la propriété quef(a) * f(b) < 0 alors cette fonction possèdeune valeur x telle f(x) = 0T h é o rè m e f o n d a m e n ta l
00.20.40.60.811.21.41.61.82 -20 0 20 40 60 80 100
ab f(b) f(a) f(a)*f(b) < 0.0
Z ér o
M é th o d e d e r e c h e rc h e d e z é ro s : -1 - re c h e rc h e e x h a u s tiv e
•Méthode exhaustive : à partir de a on calculela valeur de f(a), puis f(a+x) et on évalue lavaleur de la fonction. Si la valeur de f(a + nx) est suffisamment proche de zéro onconserve cette valeur de a +nx. et oncontinue–Cette méthode ale mérite de la simplicité de sonconcept et de sa mise en oeuvre.–C’estune méthode robuste qui permet l’obtention deplusieurs solutions.–C’estune méthode qui n’est pas pas optimale dupoint de vue du tempsde calcul.
-1 - re c h e rc h e e x h a u s tiv e P s e u d o -c o d e
1 x = a ( borne inférieur)2 calculde x = x +x3 calcul de f(x)4 tester si f(x) < epsilon ( valeur acceptable)4’ si f(x) < Epsilon conserver x4’’ si f(x) > Epsilon ne rien faire5 tester si x est supérieur à b (borne supérieure)5’ si oui alors on arrête5’’ si non alors on continue la boucle en 2
M é th o d e d e r e c h e rc h e d e z é ro s : -2 - re c h e rc h e a lé a to ir e
• C e tt e m é th o d e c o n s is te à c h o is ir u n n o m b re a lé a to ir e d a n s l’ in te rv a lle [ a ,b ] p u is d ’é v a lu e r s a s im ili tu d e a v e c la v a le u r z é ro .
–Méthode plus rapide–Méthode robuste, exhaustive si le nombrede tirage est grand–Méthode lente dans certains cas–Ne présente pas d’effet de mémoire-1 - R e c herche a lé a to ire P s e u d o -c o d e
1 calculde x = a+ rand [0 1] * (b-a)3calcul de f(x)4 tester si f(x) < epsilon ( valeur acceptable)4’ si f(x) < Epsilon conserver x4’’ si f(x) > Epsilon ne rien faire5 tester si Nle nombre de tirages est suffisant5’ si oui alors on arrête5’’ si non alors on continue la boucle en 1
M é th o d e d e r e c h e rc h e d e z é ro s : -3 - re c her c he p a r b is s e c tio n
•La méthode par bissection est une méthoderapide et simple permettant de trouver lasolution d’une équation–Lafonctiondoit êtrecontinue dans l’intervalle [a,b].–La fonction doit avoirunsigne différent à la borne ade la borneb.–Cette méthode est plus rapide quela rechercheexhaustive.–Cette méthode permet l’obtention d’une solution,encas de solutions multiplesdans l’intervalle [a,b] laméthode par bissectionvaprocurer qu’une seulesolution.–Afin d’obtenir d’autres solutions,il convient demodifier les bornes [a,b].
-3 - R e c h e rc h e p a r b is s e c tio n P rinc ip e
• A fin d e t ro uve r une s o lu tio n o n c a lc u le le p o in t m ili e u d e l’ in te rv a lle [ a ,b] , le p o in t c p u is o n é v a lu e s i l a f o n c tio n c h a n g e d e s ig n e e n tr e [ a c ] o u [ c ,b ]. • L e s o u s in te rv a ll e c h o is i, o n l’ u tili s e p o u r l’i té ra tio n s u iv a n te . • L ’a rr ê t e s t d é te rm in é p a r c o m p a ra is o n d e f (x ) a v e c u n e v a le u r E p s ilo n p ro c h e d e z é ro c h o is ie p a r l’u tili s a te u r.
R echerche p a r b isse ct ion P rinc ip e
0)(*)( 2 0)(*)(
bfcf cbc afcf100
b 80604020100
ab 080-20600.82.01.21.600.440ac200-200.82.01.21.600.4
-3 - R e c h e rc h e p a r b is s e c tio n P s e u d o -c o d e
1 milieu= moyenne des deux bornes [a,b]2 calculde f(a),f(b),f(milieu)3 tester la valeur de f(milieu)si la valeur est acceptable arrêter4tester si f(milieu)*f(b)< 04’ si oui le milieu devient la nouvelle gauche (a)4’’ si non le milieu devient la nouvelle droite (4)5on boucle via 1
-3 - R e c h e rc h e p a r b is s e c tio n c o d e j a v a
//repetitiontantque la valeur > epsilon etNiter<maxIter
epsilon = epsilon*epsilon ;
milieu=(a+b)/2.0;
y=f(milieu) ;
gauche=a;droite=b;
Niter=0;
while((y*y>epsilon) && (Niter<MaxIteration)){
Niter=Niter+1;
milieu=(gauche+droite)/2.0;
y=f(milieu) ;//change demaniereaetredansl'intervalle qui change de signeif (y*f(droite) <=0) {
gauche = milieu}
else{
droite = milieu;}
}
-3 - R e ch e rch e p a r b iss e ct ion a pp le t ja v a
-1-0.500.511.522.53 -8 -6 -4 -2 0 2 4 6
E x em p le d’ app le t :
R e ch e rch e d e « z é ros » -4 - M é th od e d e N e w to n
• L a m é th o d e d e N e w to n o u s o n a p p li c a tio n p lu s g é né ra le : N e w to n - R a p h s o n s o n t d e s a lg o rit h m e s p lu s ra p id e s q u e la m é th o d e d e b is s e c tio n .
–Méthode rapide–Moins stable–Dépend plus des conditions de départ–L’idée de base est une approximation par une série de Taylor-4 - M é th o d e d e N e w to n
Série de Taylor•Une expansion en série de Taylord’une fonctionconsiste àcalculer les différentesdérivées de lafonction étudiée, puis de calculer une somme :
...'''6 ''2 )(')()( 22f hf hxhfxfhxf
•Si h est petit et que la fonction est monotone, lestermes audelà de la première dérivée peuvent êtrenégligés
)(')()(xhfxfhxf
-4 - M é th o d e d e N e w to n
Série de Taylor•On recherche quef(x+h) soit égale à zéro
)(' )()(')(0)( )(')()(
xf xfhxhfxfhxf xhfxfhxf
•Ce qui nous procure la formule itérative suivante :
)(' )(
1n nnnxf xfxx
•Cetteformule nécessite la connaisance de la dérivée, ellepeut êtrenumérique estimée :
h hxfhxfxfn2 )()()('
-4 - M é th o d e d e N e w to n
Interprétation géométrique4
)(' )(
1n nnnxf xfxx 3.532.52
1.5
10.5
0-0.5-1-1.5
11.21.41.61.822.22.42.62.83
-3 - R e c h e rc h e p a r b is s e c tio n P s e u d o -c o d e
1.Choisir un x de départ2.calculer x(n+1) = x(n) –f(x)/derivée(f(x))3.tester la valeur de f(x)si la valeur est acceptable arrêter4.on boucle via 2
-3 - R e c h e rc h e p a r b is s e c tio n c o d e j a v a
Niter=0; double x=xo; y=f(x);while((y*y>epsilon) && (Niter<MaxIteration) ) {Niter++;x = x-f(x) /deriv(x,h);y=f(x) ;}// Estimationnumérique de la dérivée d’une fonction«f»publicstaticdoublederiv(double x, double h){return (f(x+h)-f(x-h))/(2.0*h);}
-3 - R e ch e rch e p a r N e w ton a pp le t ja v a
-1-0.500.511.522.53 -8 -6 -4 -2 0 2 4 6