KM05_exo3.mw

Exercice 3

>

Question a)

> restart:

> perturbee:=proc(u1,n) option remember; Méthode récursive
local u;

if n=1 then [u1]; else

 u:=perturbee(u1,n-1);[op(u),evalf(u[n-1]*(u[n-1]+1/n))];

fi;

end:

> perturbee(1,5);

[1, 1.500000000, 2.750000000, 8.250000000, 69.71250000]

> perturbee(1,10);

[1, 1.500000000, 2.750000000, 8.250000000, 69.71250000, 4871.451406, 23731734.72, 0.5631952357e15, 0.3171888735e30, 0.1006087815e60]

>

>

Question b)

> test:=proc(u1)
local l,u,n,suite,sol,maxi;

maxi:=10:
pour éviter une boucle infinie on se fixe un nombre maximal (maxi) d'itérations
n:=1;l:=1;
Par défaut nous affectons la valeur l=1
u:=u1;

la limite potentielle
l est déterminée lors d'une des conditions ci-dessous pour u1
if is(u<=1-1/n) then l:=0;

elif is(u>=1) then l:=+infinity; fi;

N'ayons pas de réponse déterminnée pour u1, nous essayons les
valeurs successives (jusqu'à l'indice maxi)
while is(l=1 and n<maxi) do

  u:=u*(u+1/n);n:=n+1;

 if is(u<=1-1/n) then l:=0;

elif is(u>=1) then l:=+infinity; fi;

od;

Après ces nombreuses tentatives, on peut espérer conclure sans trop se tromper

if l=+infinity then sol:=true else sol:=false; fi;

end:


> test(0.3);test(1);

false

true

>

Question c)

> alpha:=proc(epsilon)
local a,b,m,n,t;

n:=0:a:=0;b:=1;
intialement (n=0) on travaille sur l'intervalle [a,b]=[0,1]
while is(b-a>epsilon) do

n:=n+1:m:=(a+b)/2;t:=test(m);

On remplace [a,b] par le segmet coupé en son milieu m
if t then b:=m  
c'est le segment [a,m] si pour u1=m la suite u tend vers +infini, (car alors alpha<m)
else a:=m fi;  
c'est le segment [m,b] si pour u1=m la suite u ne tend pas vers +infini (car alors alpha>=m)
od;

m,n;

end:

>

> u:=alpha(1/10):'alpha'=evalf(u[1]); 'n'=u[2];

alpha = .4375000000

n = 4

>

> u:=alpha(1/100):'alpha'=evalf(u[1]); 'n'=u[2];

alpha = .4453125000

n = 7

> u:=alpha(1/1000):'alpha'=evalf(u[1]); 'n'=u[2];

alpha = .4462890625

n = 10

> u:=alpha(1/10000):'alpha'=evalf(u[1]); 'n'=u[2];

alpha = .4468383789

n = 14

> Digits:=12:

> u:=alpha(10^(-10)):'alpha'=evalf(u[1]); 'n'=u[2];

alpha = .446855781192

n = 34

>

>

> with(plots):

Warning, the name changecoords has been redefined

> e:=10^(-4):u:=perturbee(alpha(e)):n:=nops(u):plot([seq([k,u[k]],k=1..n)],0..n,0..e,style=point);

[Plot]

> e:=10^(-10):u:=perturbee(alpha(e)):n:=nops(u):plot([seq([k,u[k]],k=1..n)],0..n,0..e,style=point);

[Plot]

> e:=10^(-15):u:=perturbee(alpha(e)):n:=nops(u):plot([seq([k,u[k]],k=1..n)],0..n,0..e,style=point);

[Plot]

> e:=10^(-20):u:=perturbee(alpha(e)):n:=nops(u):plot([seq([k,u[k]],k=1..n)],0..n,0..e,style=point);

[Plot]

>