Correction - Université Paris-Est Marne-la
Transcription
Correction - Université Paris-Est Marne-la
Université Paris xii – Val de Marne, ufr Sciences et Technologie, Module Libre Sciences l2/s3 Corrigé du TP3 2008–09 Mathématiques expérimentales 1. Exercice 1 Dans la procédure Newton, les cinq paramètres ont le sens suivant : • f désigne la fonction dont on cherche une racine • var désigne la variable de la fonction précédente • depart désigne la donnée initiale à partir de laquelle on cherche la racine • erreur désigne la tolérance d’erreur : on arrête les itérations si deux successives ont un écart inférieur à erreur • maxiter désigne le nombre maximal d’itérations à effectuer. 2. Exercice 2 Une solution parmi les nombreuses possibles est > Digits:=50: Approx:=Newton(x^2-2,x,1,10^(-50),50): trunc(10^30*Approx) mod 10; qui retourne la valeur 9. En effet, on lance la méthode de Newton avec une précision d’environ 50 décimales, ensuite on multiplie par 1030 pour déplacer la 30e décimale cherchée en chiffre des unités, on supprime enfin les chiffres après la virgule en prenant la partie entière (trunc) et ceux avant celui des dizaines (celui-ci inclus) en ne gardant que le reste de la division euclidienne par 10. 3. Exercice 3 Pour chacune des fonctions, on utilise Newton avec erreur= 10−10 , maxiter= 50 et en essayant beaucoup de valeurs différentes x0 pour depart. • x2 − 3x + 2 = (x − 1)(x − 2) a deux racines 1 et 2. Suivant que x0 < 3/2 ou x0 > 3/2, (xn ) tend vers 1 ou 2 toujours par valeur supérieure. Pour x0 = 3/2, Newton produit une erreur car la dérivée s’y annule. En terme de vitesse de convergence vers la racine, c’est assez rapide, en effet xn+1 − 1 = (xn − 1)2 et xn+1 − 2 = (xn − 2)2 le nombre de décimales correctes est approximativement doublé à chaque itération (à part pour des x0 très grand, on converge donc en très peu d’itérations). • ex n’a pas de racine. Toutefois limx→−∞ ex = 0 ce qui est refleté par le comportement de la suite (xn ). Précisément, on a xn = x0 − n qui tend vers −∞. • x4 + x2 = x2 (x2 + 1) ne possède qu’une seule racine 0 qui est double. Pour x0 6= 0, (xn ) tend vers 0. Pour x0 = 0, Newton produit une erreur car la dérivée s’y annule. En terme de vitesse de convergence vers la racine, c’est assez lent, en effet xn 1 + 3x2n 2 1 + 2xn la distance à 0 est approximativement divisée par 2 à chaque itération. • tan x − x est impaire et s’annule de nombreuses fois, précisément une et une seule fois dans chaque intervalle ouvert du type ](2k−1) π2 , (2k−1) π2 +π[ (en effet, d’après sa dérivée, la fonction y est strictement croissante et de limites −∞ et +∞ aux deux bornes de l’intervalle). Par exemple pour k = 0, elle s’annule en 0. Pour k = 1, la racine est approximativement xn+1 = 4.4934094579092473905296673680357980294906820630939 pour k = 2, 7.7252518369384636022806130085748738130560478766375 et ainsi de suite... La convergence vers les racines (sauf 0) sont rapides (5 ou 6 itérations) pourvu que x0 soit déjà proche de la racine. Pour 0, la convergence est beaucoup plus lente du fait que la dérivée s’y annule. D’ailleurs, Newton retourne une erreur pour x0 = 0 pour cette raison. Enfin, si x0 n’est pas proche d’une des racines, (xn ) semble tendre vers +∞ ou vers −∞ suivant que x0 > 0 ou x0 < 0. • x1 − 1 ne s’annule qu’en 1. Pour 0 < x0 < 2, (xn ) tend vers 1 par valeur inférieure assez rapidement car xn+1 − 1 = −(xn − 1)2 . Pour x0 = 0, Newton produit une erreur car la fonction n’est pas définie en 0. Pour x0 = 2, Newton s’arrête à la valeur 0 car il a prolongé par continuité la formule xn+1 = 2xn − x2n qui n’est valide que pour xn 6= 0. Sinon, pour les autres valeurs de x0 (x0 > 2 ou x0 < 0), (x √ n ) tend vers −∞. • x ne s’annule qu’en 0 où la dérivée est infinie. Pour x0 6= 0, (xn ) est périodique de période 2 et vaut alternativement x0 et −x0 , on notera encore une fois que Newton a prolongé à xn < 0 la formule √ xn+1 = xn − 2( xn )2 = −xn qui n’est valide que pour xn > 0. Pour x0 = 0, Newton produit une erreur car la dérivée n’est pas définie. • x/(1√+ x2 ) ne s’annule qu’en 0, mais tend vers 0 quand x tend vers +∞ ou −∞. Pour √ −1/ 3 < x0 < 1/ 3, (xn ) tend vers 0, c’est très rapide, en effet xn+1 = x2n 2 x3 −1 n le nombre correctes est approximativement triplé à chaque itération. Pour √ de décimales √ x0 = 1/ 3 et x0 = −1/ 3, (xn ) est périodique de période 2 et vaut alternativement x0 et −x0 . Pour x0 = 1 et x0 = −1, Newton retourne une erreur car la dérivée s’y annule. Pour x0 > 1 (respectivement x0 < −1), (xn ) tend vers +∞ (respectivement −∞) assez lentement, en effet 1 xn+1 = 2xn 1 − x12 n la distance à 0 est approximativement √ √ multipliée par 2 à chaque itération. Pour les autres valeurs de x0 (sur ] − 1, −1/ 3[∪]1/ 3, 1[), la situation est numériquement beaucoup plus confuse. On observe que la suite tend tantôt vers +∞, tantôt vers −∞ sans être capable de donner précisément les frontières de ces deux comportements... (l’étude mathématique de ces frontières est très intéressante, mais c’est une autre histoire...) 4. Exercice 4 (a) Les deux conditions de non-nullité contrôlent à quel moment on a atteint un point où la dérivée (de z 3 − 1) s’annule (en l’occurence 0). En effet, dans ce cas, la méthode de Newton ne s’applique plus (on devrait diviser par 0) ce qu’on avait déjà observé au cours de l’exercice 3. (b) > z1,z2,z3:=solve(z^3-1,z): > abs(z1-z2),abs(z2-z3),abs(z3-z1); √ √ √ 3, 3, 3 Comme les trois longueurs sont égales, on en déduit que les trois racines forment un triangle équilatéral. (c) Il suffit d’introduire deux tests : un pour voir si on a déjà atteint un des bassins d’attraction et l’autre pour déterminer dans quel bassin d’attraction on est. > Newtonter:=proc(depart,maxiter) local y,j,L,z,i; y:=depart; j:=(-1+I*sqrt(3))/2; if y<>0 then z:=evalf((2*y^3+1)/(3*y^2)); L:=[[Re(z),Im(z)]]; for i from 1 to maxiter while (z<>0) and ## est-on deja dans un bassin ? (min(evalf(abs(z-1)),evalf(abs(z-j)),evalf(abs(z-j^2)))>0.25) do y:=z; z:=evalf((2*y^3+1)/(3*y^2)); L:=[op(L),[Re(z),Im(z)]]; ## on remplit L au fur et a mesure od; if evalf(abs(z-1))<0.25 then L:=[0,op(L)]; ## bassin de 1 elif evalf(abs(z-j))<0.25 then L:=[1,op(L)]; ## bassin de j elif evalf(abs(z-j^2))<0.25 then L:=[2,op(L)]; ## bassin de j^2 else L:=[3,op(L)]; fi; ## bassin de 0 ou on ne sait pas encore else L:=[3]; fi; L; end; (d) de retourne au hasard un nombre rationnel dans [−1, 1] dont le dénominateur divise resolution. z0 utilise alors de à deux reprises pour retourner un nombre complexe au hasard dans le carré [−1, 1] + i[−1, 1]. (e) En lançant Newtonter(&,50); avec, successivement, les 5 valeurs indiquées en lieu et √ −1+i 3 1 est vert, −i est bleu et − √ et 10−6 place de &, on obtient que −1 est rouge, 3 4 2 sont jaunes. Pour les deux derniers, ce n’est effectivement pas pour la même raison : la première itération conduit le premier sur 0 (qui est racine de la dérivée) tandis que pour le second, les 50 itérations (maximales) sont effectuées sans pouvoir décider dans quel bassin on est (précisément, à la première itération, on est envoyé près de 106 /3 puis on est approximativement multiplié par 2/3 à chacune des autres itérations). (f ) > with(plots): > dessin:=proc(maxiter,nbvaleurs) local R,V,B,J,k,depart,depart2,L,dR,dV,dB,dJ,dess; R:=[[1,0]]; V:=[[-0.5,sqrt(3)/2]]; B:=[[-0.5,-sqrt(3)/2]]; J:=[[0,0]]; for k from 1 to nbvaleurs do depart:=z0(); depart2:=[Re(depart),Im(depart)]; L:=Newtonter(depart,maxiter); if L[1]=0 then R:=[op(R),op(subsop(1=depart2,L))]; elif L[1]=1 then V:=[op(V),op(subsop(1=depart2,L))]; elif L[1]=2 then B:=[op(B),op(subsop(1=depart2,L))]; else J:=[op(J),op(subsop(1=depart2,L))]; fi; od; dR:=plot(R,style=point,symbol=CIRCLE,color=red); dV:=plot(V,style=point,symbol=CIRCLE,color=green); dB:=plot(B,style=point,symbol=CIRCLE,color=blue); dJ:=plot(J,style=point,symbol=CIRCLE,color=yellow); dess:=display({dR,dV,dB,dJ},view=cadre); dess; end; (g) Après avoir rentré rajout dans Maple, il suffit de lancer > dessin(50,1000); > rajout(%,50,1000); en revalidant à plusieurs reprises la deuxième ligne. Avec deux ou trois rajouts en trois minutes, on obtient la figure fractale suivante