TD 7 Intégration

I. Intégration

I. 1 Primitives

Si les bornes de l'intégration ne sont pas spécifiées, l'instruction int permet de déterminer une primitive d'une fonction.
Exemple :
int(1/(x^5+1),x);

> int(1/(x^5+1),x);

1/5*ln(1+x)-1/20*ln(-2*x^2+x+sqrt(5)*x-2)*sqrt(5)-1...
1/5*ln(1+x)-1/20*ln(-2*x^2+x+sqrt(5)*x-2)*sqrt(5)-1...
1/5*ln(1+x)-1/20*ln(-2*x^2+x+sqrt(5)*x-2)*sqrt(5)-1...

Calculer les primitives de int(1/(x^2+x+1),x) , int(x^3*ln(x),x) , int(x^3*ln(x)*exp(-x),x)

> int(1/(x^2+x+1),x);

2/3*sqrt(3)*arctan(1/3*(2*x+1)*sqrt(3))

> int(x^3*ln(x),x);

1/4*x^4*ln(x)-1/16*x^4

> int(x^3*ln(x)*exp(-x),x);

(-6-6*x-3*x^2-x^3)*exp(-x)*ln(x)-6*Ei(1,x)-11*exp(-...

La primitive d'une fonction ne s'exprime pas toujours à partir de fonction simples.
Exemple :
I2:=int(x^2*exp(x^2-x^3),x);
On peut toutefois obtenir un développement limité de l'intégrale précédente en utilisant l'instruction
series
series(I2,x,10);
permet de calculer un développement limité de l'intégrale précédente à l'ordre 10.

> I2:=int(x^2*exp(x^2-x^3),x);

I2 := int(x^2*exp(x^2-x^3),x)

> series(I2,x,10);

series(1/3*x^3+1/5*x^5-1/6*x^6+1/14*x^7-1/8*x^8+2/2...

I.2 Intégrales définies

Pour des intégrales simples de la forme int(f(x),x = a .. b) , on dispose avec Maple de l'instruction int .
Exemple:

int(4*x^3+2*x^8,x=1..8);

donne le résultat exact de l'intégrale du polynôme 4*x^3+2*x^8 entre x=1 et x=8.

> int(4*x^3+2*x^8,x=1..8);

268472309/9

Calculer int(1/sqrt(1-x^2),x = 0 .. 1) , int(x*arctan(x),x = 0 .. 1) , int(sqrt(tan(x)),x = 0 .. Pi/2) , int(x^4*sin(x)*cos(x),x = 0 .. Pi/2) ,

> int(1/sqrt(1-x^2),x = 0 .. 1);

1/2*Pi

> int(x*arctan(x),x = 0 .. 1);

1/4*Pi-1/2

> int(sqrt(tan(x)),x = 0 .. Pi/2);

1/2*sqrt(2)*Pi

> int(x^4*sin(x)*cos(x),x = 0 .. Pi/2);

-3/16*Pi^2+1/64*Pi^4+3/4

I.3 Intégrales impropres

L'instruction int permet aussi de calculer des intégrales impropres.
Exemple :
int((4*x^3+2*x^8)*exp(-3*x),x=1..infinity);
int(t^4*ln(t)^2/(1+3*t^2)^3,t=0..infinity) ;
Pour connaître une valeur approchée d'une intégrale, on peut utiliser l'instruction
evalf . Calculer les intégrales suivantes exactement et/ou de manière approchée.

> int((4*x^3+2*x^8)*exp(-3*x),x=1..infinity);

187706/2187*exp(-3)

> int(t^4*ln(t)^2/(1+3*t^2)^3,t=0..infinity) ;

1/216*Pi*sqrt(3)+1/576*Pi^3*sqrt(3)-1/108*Pi*sqrt(3...

>

Calculer int(ln(x)/(1+x^2),x = 0 .. infinity) , int(ln(x)/(1+x^2),x = 1 .. infinity) , int(x/(1+x^4),x = 1 .. infinity) , int(exp(-2*x)/(1+x^2),x = 1 .. infinity)

> I32a:=int(ln(x)/(1+x^2),x=0..infinity);

I32a := 0

> I32b:=int(ln(x)/(1+x^2),x = 1 .. infinity);evalf(I32b);

I32b := Catalan

.9159655942

> I32c:=int(x/(1+x^4),x = 1 .. infinity);evalf(I32c);

I32c := 1/8*Pi

.3926990818

> I32d:=int(exp(-2*x)/(1+x^2),x = 1 .. infinity);evalf(I32c);

I32d := 1/2*I*(exp(2*I)*Ei(1,2+2*I)-exp(-2*I)*Ei(1,...

.3926990818

I.4. Intégrales avec paramètre

Pour une fonction avec un paramètre, Maple donne parfois une réponse qui peut paraître incomplète.
Exemple :
int(exp(-a*x^2),x=0..infinity);
L'instruction
assume permet de faire une hypothèse sur une variable donnée. Dans le cas qui nous intéresse, pour supposer que la partie réelle de a est positive, on introduit l'instruction
assume(a>0) ;
Calculer à nouveau l'intégrale précédente. Noter l'apparition d'un tilde. Rappel : Pour que a puisse être à nouveau une variable quelconque, on réinitialise avec l'instruction a:='a' ;.

Vérifier que l'intégrale précédente redevient indéterminée.

> Ia:=int(exp(-a*x^2),x=0..infinity);

Definite integration: Can't determine if the integral is convergent.

Need to know the sign of --> a

Will now try indefinite integration and then take limits.

Ia := limit(1/2*Pi^(1/2)/a^(1/2)*erf(sqrt(a)*x),x =...

> assume(a>0) ;Ia;

1/2*Pi^(1/2)/a^(1/2)

> a:='a';

a := 'a'

Calculer int(exp(-a*x)*cos(b*x)^2,x = 0 .. infinity) avec a>0, int(ln(x)/((x+a)*(x-1)),x = 0 .. infinity) , int(1/(1+a^2*cos(x)),x = 0 .. 2*Pi) avec a compris entre -1 et 1, int(1/(sqrt(a)*sqrt(x)+b),x)

> I3:=int(exp(-a*x)*cos(b*x)^2,x = 0 .. infinity);

I3 := limit(-1/2*(a^2*exp(-a*x)*cos(2*b*x)-2*b*exp(...
I3 := limit(-1/2*(a^2*exp(-a*x)*cos(2*b*x)-2*b*exp(...

> assume(a>0);I3;

(a^2+2*b^2)/(a^2+4*b^2)/a

> a:='a';b:='b';

a := 'a'

b := 'b'

> int(ln(x)/((x+a)*(x-1)),x = 0 .. infinity);

1/2*(ln(1/a)^2+Pi^2)/(a+1)

> int(1/(1+a*cos(x)),x = 0 .. 2*Pi);

-2*I*csgn(-I*conjugate(sqrt(a^2-1))+I*conjugate(sqr...

> assume(-1<a, a<1);

> int(1/(1+a*cos(x)),x = 0 .. 2*Pi);

2*Pi/(1-a^2)^(1/2)

> a:='a';

a := 'a'

> int(1/(sqrt(a)*sqrt(x)+b),x);

-b*ln(-b^2+a*x)/a+2/a^(1/2)*x^(1/2)-2*b/a*arctanh(a...

>

I.5 Intégrales multiples

On peut calculer des intégrales double et triple avec Maple de manière très simple en utilisant l'instruction int de manière successive.

int(int((x+y)*cos(x+y),x = 0 .. Pi/2),y = 0 .. Pi/2... , int(int(x*y/(1+x^2+y^2),x = 0 .. 1),y = 0 .. 1)

> int(int((x+y)*cos(x+y),x = 0 .. Pi/2),y = 0 .. Pi/2);

Pi-4

> simplify(int(int(x*y/(1+x^2+y^2),x = 0 .. 1),y = 0 .. 1));

3/4*ln(3)-ln(2)

II Méthodes d'intégration

Pour calculer une intégrale, il existe un grand nombre de méthodes. Nous allons voir quelques unes de celles-ci. Soit une fonction notée ff.

L'intégrale à calculer est la suivante int(ff(x),x = a .. b) .

La méthode des rectangles estime cette intégrale par la formule :

(b-a)*sum(ff(a+(b-a)*i/n),i = 0 .. n-1)/n .

Ecrire une procédure rectangle dont les variables sont a, b, n et le nom de la fonction ff.

L'intégrale que nous allons tester est la suivante : int(tan(x)/(x+1),x = 0 .. Pi/4) .

Faire le calcul pour n de 50 à 500 avec un pas de 50. (Indication: faire une boucle sur n)

En supposant que la différence entre la valeur exacte et la valeur approchée notée I[n] est de la forme A/(n^alpha) , déterminer la valeur de alpha .

La méthode des trapèzes estime cette intégrale par la formule :

(b-a)*(sum(ff(a+(b-a)*i/n),i = 1 .. n-1)+(ff(a)+ff(... .

Ecrire une procédure trapeze dont les variables sont a, b, n et le nom de la fonction ff.

En supposant que la différence entre la valeur exacte et la valeur approchée notée I[n] est la forme A/(n^beta) , déterminer la valeur de beta .

Utiliser ensuite l'option Digits:=10; que notez vous?

On veut calculer l'intégrale int(sqrt(tan(x)),x = 0 .. Pi/4) . Quelles valeurs de alpha et de beta trouve-t-on? Conclusion.

> rectangle:=proc(a,b,n::posint,ff)

> local a1,b1,n1,i,delta;

> a1:=a;b1:=b;n1:=n;delta:=(b-a)/n;

> evalf(delta*(sum(ff(a+delta*i),i=0..n-1)));

> end;

rectangle := proc (a, b, n::posint, ff) local a1, b...
rectangle := proc (a, b, n::posint, ff) local a1, b...
rectangle := proc (a, b, n::posint, ff) local a1, b...
rectangle := proc (a, b, n::posint, ff) local a1, b...

> ff:=unapply(tan(x)/(x+1),x);

ff := proc (x) options operator, arrow; tan(x)/(x+1...

> valex:=evalf(int(ff(x),x = 0 .. Pi/4));

valex := .2292137172

> for j from 100 to 500 by 50 do
tmp:=abs((valex-rectangle(0,Pi/4,j,ff))/(valex-rectangle(0,Pi/4,(j-50),ff)));
evalf(ln(tmp)/ln(abs((j-50)/j)) );
od;

tmp := .4997740511

1.000652098

tmp := .6665663106

1.000371290

tmp := .7499433964

1.000262353

tmp := .7999638546

1.000202483

tmp := .8333082375

1.000165177

tmp := .8571246805

1.000137568

tmp := .8749863964

1.000116430

tmp := .8888780796

1.000103246

tmp := .8999902420

1.000102906

> trapeze:=proc(a,b,n::posint,ff)

> local a1,b1,n1,i,delta;

> a1:=a;b1:=b;n1:=n;delta:=(b-a)/n;

> evalf(delta*(sum(ff(a+delta*i),i=0..n1-1)+(-ff(a)+ff(b)/2)));

> end;

trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...
trapeze := proc (a, b, n::posint, ff) local a1, b1,...

> Digits:=10;

Digits := 10

> for j from 100 to 500 by 50 do
tmp:=abs((valex-trapeze(0,Pi/4,j,ff))/(valex-trapeze(0,Pi/4,(j-50),ff)));
evalf(ln(tmp)/ln(abs((j-50)/j)) );
od;

tmp := .2499434517

2.000326365

tmp := .4444444444

2.000000000

tmp := .5624434389

2.000349545

tmp := .6400966184

1.999323508

tmp := .6932746700

2.009246825

tmp := .7364130435

1.984837936

tmp := .7768187423

1.891302336

tmp := .7891373802

2.010602399

tmp := .7664670659

2.524318970

> gg:=unapply(tan(x)^(1/4),x);

gg := proc (x) options operator, arrow; tan(x)^(1/4...

> valex2:=evalf(int(gg(x),x = 0 .. Pi/4));

valex2 := .6046248155

> for j from 100 to 500 by 50 do
tmp:=abs((valex2-rectangle(0,Pi/4,j,gg))/(valex2-rectangle(0,Pi/4,(j-50),gg)));
evalf(ln(tmp)/ln(abs((j-50)/j)) );
od;

tmp := .4855395440

1.042339296

tmp := .6564865140

1.037951526

tmp := .7424140005

1.035338201

tmp := .7940419908

1.033500330

tmp := .8284722633

1.032088165

tmp := .8530612825

1.030964578

tmp := .8715012999

1.030004404

tmp := .8858352716

1.029216719

tmp := .8973021130

1.028494110

> for j from 100 to 500 by 50 do
tmp:=abs((valex2-trapeze(0,Pi/4,j,gg))/(valex2-trapeze(0,Pi/4,(j-50),gg)));
evalf(ln(tmp)/ln(abs((j-50)/j)) );
od;

tmp := .4214373481

1.246609922

tmp := .6029439850

1.247779328

tmp := .6982986794

1.248282026

tmp := .7568301752

1.248597095

tmp := .7963805184

1.248772626

tmp := .8248760178

1.248922065

tmp := .8463874211

1.248980306

tmp := .8631792752

1.249185622

tmp := .8766799866

1.249170507

l'exposant de la méthode des trapèzes est 1.5 au lieu de 2 car la fonction a une dérivée infini à l'origine et démarre en sqrt(x) , d'ou le résultat 2-1/2.