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