exo5.mw

Exercice 5

> restart:Digits:=30:with(plots):with(plottools):

> fI:=t->4/(1+t^2):aI:=0:bI:=1:NI:=20:

> fJ:=t->exp(-t*t):aJ:=-10:bJ:=10:NJ:=20:

>

Question a)

> Trapeze:=proc(f,a,b,N)
local i,S;

S:=0;

for i from 1 to N-1 do

S:=S+f(a+i*(b-a)/N);

od;

S:=(S+(f(a)+f(b))/2)*(b-a)/N;

end:

>

> Question b)

Calcul approché de I avec 20 Rectangles

> I=Int(fI(t),t=aI..bI);

I = Int(4/(1+t^2), t = 0 .. 1)

> I_(approché):=evalf(Trapeze(fI,aI,bI,NI));

I_(approché) := 3.14117598695412846344704074009

> erreur:=evalf(abs(I_(approché)-Pi));

erreur := 0.41666663566477501560264319e-3

>

Calcul approché de J avec 20 Rectangles

> J=(Int(fJ(t),t=aJ..bJ))**2;

J = (Int(exp(-t^2), t = -10 .. 10))^2

> J_(approché):=evalf((Trapeze(fJ,aJ,bJ,NJ))**2);

J_(approché) := 3.14224265993564633914314598537

> erreur:=evalf(abs(J_(approché)-Pi));

erreur := 0.65000634585310068050260209e-3

>

> Question c)

> Points_T:=proc(f,a,b,N)
local i,S;

S:=NULL;

for i from 1 to N do S:=S,[i/N,Trapeze(f,a,b,i)]; od;

[S];

end;

>

Points_T := proc (f, a, b, N) local i, S; S := NULL; for i to N do S := S, [i/N, Trapeze(f, a, b, i)] end do; [S] end proc

> plot(Points_T(fI,aI,bI,50)); Tracé des points obtenus pour le calcul approché de I

[Plot]

> plot(Points_T(fJ,aJ,bJ,50)); Tracé des points obtenus pour le calcul approché de J

[Plot]

>

> Question d)

> Suite_T:=proc(f,a,b,N)
local i,S,suite,delta;

delta:=(b-a)/N;S:=NULL;

for i from 0 to N-1 do

S:=S,polygon([[a+i*delta,0],[a+(i+1)*delta,0],[a+(i+1)*delta,f(a+(i+1)*delta)],[a+i*delta,f(a+i*delta)]],color=magenta,thickness=2);

od;

S;

end:

>

Tracé des rectangels correspondant à l'intégrale I

> TI:=Suite_T(fI,aI,bI,NI):GI:=plot(fI,aI..bI,color=black,thickness=3):

> plots[display](TI,GI);

[Plot]

Tracé des rectangels correspondant à l'intégrale J

> TJ:=Suite_T(fJ,aJ,bJ,NJ):GJ:=plot(fJ,aJ..bJ,color=black,thickness=3):

> plots[display](TJ,GJ);

[Plot]

>

Une petite animation

>

> Anim_T:=proc(t) plots[display](GI,Suite_T(fI,aI,bI,trunc(t))); end:

> animate(Anim_T,[t],t=1..NI, frames=50);

[Plot]

>

>

Exercice 5b)

La procédure Dichot renvoie la N-ieme valeur de la suite (D_n) définie par recurrence par:

> D[n]=D[n-1]+Sum(f(a+(2*k-1)*(b-a)/2^n),k=1..2^(n-1));

D[n] = D[n-1]+(Sum(f(a+(2*k-1)*(b-a)/2^n), k = 1 .. 2^(n-1)))

>

> Dichot:=proc(f,a,b,N) options remember;
local i,S;

if N=0 then S:=0; else

S:=Dichot(f,a,b,N-1);

for i from 1 to 2^(N-1) do

S:=S+f(a+(2*i-1)*(b-a)/2^N);

od;fi;

S;

end:

>

On en déduit grâce à D_n la valeur de T_2^n par la relation

> T[n]=((b-a)/2**n)*((f(a)+f(b))/2+D[n]);

T[n] = (b-a)*(1/2*f(a)+1/2*f(b)+D[n])/2^n

> T_dichot:=proc(f,a,b,N)
local i,T;

T:=NULL;

for i from 0 to N do

T:=T,(b-a)*((f(a)+f(b))/2+Dichot(f,a,b,i))/2^i;

od;

T;

end:

>

Valeurs successives T1 , T2 , T4 , ..., T_1024  pour l'intégrale I

> Sol:=evalf(T_dichot(fI,aI,bI,10)): for i from 1 to 10 do T[2**i]=Sol[i]; od;

T[2] = 3.

T[4] = 3.10000000000000000000000000000

T[8] = 3.13117647058823529411764705882

T[16] = 3.13898849449108900934542320944

T[32] = 3.14094161204138889464634560699

T[64] = 3.14142989317497443320612206098

T[128] = 3.14155196348565544464283068252

T[256] = 3.14158248106375202293422084155

T[512] = 3.14159011045828282884501179281

T[1024] = 3.14159201780691563440611788969

> 'erreur'=evalf(abs(Sol[10]-Pi));erreur commise pour T_1024

erreur = 0.63578287760405652549359e-6

>

Valeurs successives T1^2, T2^2, T4^2, ..., T_1024^2 pour l'intégrale de J

> Sol:=evalf(map(x->x**2,[T_dichot(fJ,aJ,bJ,10)])): for i from 1 to 10 do T[2**i]**2=Sol[i]; od;

T[2]^2 = 0.553558610694695012259472582792e-84

T[4]^2 = 100.

T[8]^2 = 25.0000000013887943865156895580

T[16]^2 = 6.29835452008353379639298355611

T[32]^2 = 3.16433064727026781341927919906

T[64]^2 = 3.14159265372352795309459722597

T[128]^2 = 3.14159265358979323846264338328

T[256]^2 = 3.14159265358979323846264338331

T[512]^2 = 3.14159265358979323846264338328

T[1024]^2 = 3.14159265358979323846264338313

> 'erreur'=evalf(abs(Sol[10]-Pi));erreur commise pour T_1024

erreur = 0.15e-27

>