Exercice 1Question a)
M\351thode it\351rative
iteration:=proc(a,b,n)
local s,an,bn,temp,k;
an:=a;bn:=b; initialisation des valeurs de la suite an et bn repr\351sentent ici a0 et bo
for k from 1 to n do
on utilise des variables temporaires atemp et btemp pour ne pas interferer dans le calcul du nouveau an et bn en fonction des anciens
temp:=sqrt(an*bn);bn:=(an+bn)/2;
an:=temp; les anciennes valeurs de an et bn deviennent ici les nouvelles
od:
[an,bn];
end:iteration(0.5,1,25); Calcul de [a(25),b(25)] pour a0=0.5 et b0=1M\351thode r\351cursiveiteration:=proc(a,b,n) option remember;
local s,u;
if n=0 then s:=[a,b] la recursion doit pouvoir s'arr\352ter pour donner une valeur effective ici [a0,b0]
else
u:=iteration(a,b,n-1); on fait appel \340 notre propre proc\351dure pour connaitre les valeurs a(n-1) et b(n-1)
s:=[sqrt(u[1]*u[2]),(u[1]+u[2])/2]; on en d\351duit an et bn
fi:
s;
end:iteration(0.5,1,25); Calcul de [a(25),b(25)] pour a0=0.5 et b0=1Question bCalcul d'une limite approch\351eM\351thode naivelimite:=proc(a,b,epsilon)
local an,bn,u,n;
an:=a;bn:=b;n:=0;
while is(abs(an-bn)>epsilon) do tant que la distance s\351parant an, bn (suites adjacentes) d\351passe epsilon, le calcul continue
n:=n+1:u:=iteration(a,b,n);an:=u[1];bn:=u[2];
od;
['an'=an,'n'=n];
end:limite(0.5,3,1/1000000); limite approch\351e \340 10^(-6) pr\350s avec a0=0.5 et b0=3M\351thode it\351rativelimite:=proc(a,b,epsilon)
local s,an,bn,temp,n;
an:=a;bn:=b;
n:=0;
while is(abs(an-bn)>epsilon) do
n:=n+1:temp:=sqrt(an*bn);bn:=(an+bn)/2;
an:=temp;
od:
['an'=an,'n'=n];
end:limite(0.5,3,1/1000000); limite approch\351e \340 10^(-6) pr\350s avec a0=0.5 et b0=3M\351thode r\351cursivelimite:=proc(a,b,epsilon) option remember;
local s,u;
if is(abs(a-b)<=epsilon) then s:=[a,b,0]; la recursion doit pouvoir s'arr\352ter pour donner une valeur effective ici [a0,b0]
else
s:=limite(sqrt(a*b),(a+b)/2,epsilon); on en d\351duit an et bn
s:=[s[1],s[2],s[3]+1];
fi:
s;
end:limite(0.5,3,1/1000000); limite approch\351e \340 10^(-6) pr\350s avec a0=0.5 et b0=3Question cM\351thode na\357veerreur:=proc(a,b,n)
local souvenir,i,un;
souvenir:=b-a;
for i from 1 to n do
un:=iteration(a,b,i);souvenir:=souvenir,un[2]-un[1];
od;
[sol];
end:
evalf(erreur(1,3,5));M\351thode it\351rativeerreur:=proc(a,b,n)
local s,an,bn,temp,k,souvenir;
an:=a;bn:=b;
souvenir:=bn-an;
for k from 1 to n do
temp:=sqrt(an*bn);bn:=(an+bn)/2;
an:=temp;
souvenir:=souvenir,bn-an;
od:
[souvenir];
end:evalf(erreur(1,3,5));M\351thode r\351cursiveval_suite:=proc(a,b,n)
option remember;
local s,u;
if n=0 then s:= [[a,b]] la recursion doit pouvoir s'arr\352ter pour donner une valeur effective ici [a0,b0]
else
u:=val_suite(a,b,n-1); on fait appel \340 notre propre proc\351dure pour connaitre les valeurs a(n-1) et b(n-1)
s:=[op(u),[sqrt(u[n][1]*u[n][2]),(u[n][1]+u[n][2])/2]]; on en d\351duit an et bn
fi:
s;
end:val_suite(a,b,2);erreur:=proc(a,b,n)
local suite,k,sol,suiten;
suite:=val_suite(a,b,n);
sol:=NULL;
for k from 1 to n+1 do
suiten:=suite[k];
sol:=sol,suiten[2]-suiten[1];
od:
[sol];
end:evalf(erreur(1,3,5));Commentons ces valeurs, il apparait des choses \351tranges comme la valeur n\351agtive pour b4-a4 alors que celle-ci devrait \352tre positive (suites adjacentes) Par ailleurs la diff\351rence b5-a5 est suspecte car on imagine mal la suite devenir stationnaire comme nous le montre le calcul des valeurs suivantesevalf(erreur(1,3,15));En fait les choses deviennent plus claires lorsque l'on change la pr\351cision des calculsDigits:=50;evalf(erreur(1,3,5));La convergence \351tant si rapide et les expressions si complexes que les r\351sultats approch\351s sont tr\350s sensibles \340 la pr\351cision qu'on se fixe.