Application Center - Maplesoft

App Preview:

Calcul des dérivées partielles et des intégrales doubles

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

calcul_derivees_et_integrales.mw

[Inserted Image]Calcul des drives partielles et
  des intgrales doubles  

Pierre Lantagne (juin 2001)

Collge de Maisonneuve

plantag@edu.cmaisonneuve.qc.ca

http://math.cmaisonneuve.qc.ca/plantagne

> restart;

Rappel: Oprateur D et macro-commande diff

Rappelons les deux syntaxes Maple pour le calcul de la drive:

- calcul de la drive avec l'oprateur D

- calcul de la drive avec la macro-commande diff

L'oprateur de drivation D

Soit la fonction f dfinie par f(x) = x^2*exp(x^2) .

> f:= x->x^2*exp(x^2);

f := proc (x) options operator, arrow; x^2*exp(x^2) end proc

Obtenons la fonction drive premire:

> D(f);

proc (x) options operator, arrow; 2*x*exp(x^2)+2*x^3*exp(x^2) end proc

Et donc, la formule de la fonction drive premire

> D(f)(x);

2*x*exp(x^2)+2*x^3*exp(x^2)

Simplifions ce rsultat en factorisant 2*x*exp(x^2) .

> factor(D(f)(x));

2*x*exp(x^2)*(1+x^2)

>

La fonction drive successive d'ordre n, (D@@n)(f), est obtenu avec l'oprateur de composition itre @@.

Par exemple, obtenons la formule drive successive d'ordre 3 de la fonction f.

> (D@@3)(f)(x,y);

24*x*exp(x^2)+36*x^3*exp(x^2)+8*x^5*exp(x^2)

Simplifions ce rsultat en factorisant 4*x*exp(x^2) .

> factor(%);

4*x*exp(x^2)*(6+9*x^2+2*x^4)

>

La macro-commande de drivation diff

Contrairement l'oprateur D, la macro-commande diff est utilise pour driver une expression. Le rsultat est donc une formule drive et non pas une fonction drive.

Trouver y' si y = x^3-5*sqrt(sin(x)) .

> y:= x^3-5*sqrt(sin(x));

y := x^3-5*sin(x)^(1/2)

> `y'`:= diff(y,x);

`y'` := 3*x^2-5/2*cos(x)/sin(x)^(1/2)

>

On peut, bien sr, employer diff pour driver la formule f(x) d'une fonction f car, comme on le sait,  f(x) dsigne la formule de la fonction f. Soit alors la fonction f dfinie par f(x) = sec^2(x)+sqrt(1-x^2) .

> f:=x-> (sec^2)(x)+sqrt(1-x^2);

f := proc (x) options operator, arrow; sec^2(x)+sqrt(1-x^2) end proc

> `y'`:= diff(f(x),x);

`y'` := 2*sec(x)^2*tan(x)-x/(1-x^2)^(1/2)

>

Avec la macro-commande diff, la drive successive d'ordre n est obtenue en rptant n fois la variable x.

Par exemple, calculer la drive successive d'ordre 3  y'''  si  y = (x^3-2)/(1-x^2) .

> y:= (x^3-2)/(1-x^2);

y := (x^3-2)/(1-x^2)

> `y'''`:= diff(y,x,x,x);

`y'''` := 6/(1-x^2)+54*x^2/(1-x^2)^2+72*x^4/(1-x^2)^3+48*(x^3-2)*x^3/(1-x^2)^4+24*(x^3-2)*x/(1-x^2)^3

>

Utilisons plutt l'oprateur de cration de squences $ pour rpter la variable le nombre de fois voulu.

> `y'''`:= diff(y,x$3);

`y'''` := 6/(1-x^2)+54*x^2/(1-x^2)^2+72*x^4/(1-x^2)^3+48*(x^3-2)*x^3/(1-x^2)^4+24*(x^3-2)*x/(1-x^2)^3

Simplifions en normalisant cette addition de fractions.

> `y'''`:= normal(diff(y,x$3));

`y'''` := 6*(1+6*x^2+x^4-8*x^3-8*x)/(-1+x^2)^4

>

Rendons de nouveau la variable y libre.

> y:='y':

>

Calcul des drives partielles de fonctions explicites

Avec l'oprateur de drivation D

Soit la fonction f dfinie par f(x, y) = ln(sin(x^2)+2*y^2) .

> f:=(x,y)-> ln(sin(x^2)+2*y^2);

f := proc (x, y) options operator, arrow; ln(sin(x^2)+2*y^2) end proc

La fonction drive partielle par rapport x, Diff(f, x) , est obtenue ainsi:

> D[1](f);

proc (x, y) options operator, arrow; 2*cos(x^2)*x/(sin(x^2)+2*y^2) end proc

Et donc, la formule de la drive partielle par rapport x de la fonction f:

> D[1](f)(x,y);

2*cos(x^2)*x/(sin(x^2)+2*y^2)

On a prcis, l'oprateur D, le nombre 1 entre crochet car, au moment de la cration de la fonction f,  la premire variable prcise a t la variable x. Alors, la formule de la drive partielle par rapport y, Diff(f, y) , sera

> D[2](f)(x,y);

4*y/(sin(x^2)+2*y^2)

Pour le calcul des drives mixtes, il suffit de prciser entre crochets l'ordre des variables de la drivation.

Par exemple, trouver Diff(f, x, y)  

> D[2,1](f)(x,y);

-8*y*cos(x^2)*x/(sin(x^2)+2*y^2)^2

En fait, D[i,j](f) est quivalent D[i](D[j](f)).

Alors, le calcul de Diff(f(x, y), y, x) est pos comme suit:

> D[1,2](f)(x,y);

-8*y*cos(x^2)*x/(sin(x^2)+2*y^2)^2

Pourquoi a-t-on Diff(f(x, y), x, y) = Diff(f(x, y), y, x) ? En est-il toujours ainsi ?

>

Pour calculer la drive partielle (par rapport x) successive d'ordre 3, Diff(f(x, y), `$`(x, 3)) , on devra rpter trois fois le chiffre 1:

> D[1,1,1](f)(x,y);

-8*cos(x^2)*x^3/(sin(x^2)+2*y^2)-12*sin(x^2)*x/(sin(x^2)+2*y^2)+24*sin(x^2)*x^3*cos(x^2)/(sin(x^2)+2*y^2)^2-12*cos(x^2)^2*x/(sin(x^2)+2*y^2)^2+16*cos(x^2)^3*x^3/(sin(x^2)+2*y^2)^3

On peut, bien sr, employer l'oprateur de cration de squence $.

> D[1$3](f)(x,y);

-8*cos(x^2)*x^3/(sin(x^2)+2*y^2)-12*sin(x^2)*x/(sin(x^2)+2*y^2)+24*sin(x^2)*x^3*cos(x^2)/(sin(x^2)+2*y^2)^2-12*cos(x^2)^2*x/(sin(x^2)+2*y^2)^2+16*cos(x^2)^3*x^3/(sin(x^2)+2*y^2)^3

>

Voici un autre exemple de calcul.

Trouver la drive partielle d'ordre 5 Diff(f(x, y), x, `$`(y, 2), `$`(x, 2)) .

> D[1$2,2$2,1](f)(x,y);

-192*cos(x^2)^3*x^3/(sin(x^2)+2*y^2)^4-192*cos(x^2)*x^3*sin(x^2)/(sin(x^2)+2*y^2)^3+96*cos(x^2)^2*x/(sin(x^2)+2*y^2)^3+32*cos(x^2)*x^3/(sin(x^2)+2*y^2)^2+48*sin(x^2)*x/(sin(x^2)+2*y^2)^2+3072*y^2*cos(...

>

Avec la macro-commande de drivation diff

Soit calculer Diff(sqrt(x^2-y^2)/(x-y), x) .

Afin de documenter plus clairement les rsultats, utilisons la forme inactive de diff, soit Diff et formulons les requtes sous la forme d'une quation

Forme inerte = Forme active

> Diff(sqrt(x^2-y^2)/(x-y),x)=diff(sqrt(x^2-y^2)/(x-y),x);

Diff((x^2-y^2)^(1/2)/(x-y), x) = x/((x^2-y^2)^(1/2)*(x-y))-(x^2-y^2)^(1/2)/(x-y)^2

Simplifions ce rsultat en normalisant la soustraction des deux fractions.

> normal(%);

Diff((x^2-y^2)^(1/2)/(x-y), x) = -y/((x^2-y^2)^(1/2)*(x-y))

Soit calculer Diff(sqrt(x^2-y^2)/(x-y), x, y) .

> Diff(sqrt(x^2-y^2)/(x-y),x,y)=diff(sqrt(x^2-y^2)/(x-y),x,y);

Diff((x^2-y^2)^(1/2)/(x-y), x, y) = x*y/((x^2-y^2)^(3/2)*(x-y))+x/((x^2-y^2)^(1/2)*(x-y)^2)+y/((x^2-y^2)^(1/2)*(x-y)^2)-2*(x^2-y^2)^(1/2)/(x-y)^3

Simplifions.

> normal(%);

Diff((x^2-y^2)^(1/2)/(x-y), x, y) = -(x^2+x*y+y^2)/((x^2-y^2)^(3/2)*(x-y))

>

En fait, diff(Formule, x, y) est quivalent diff(diff (Formule, x), y).

Soit calculer Diff(sqrt(x^2-y^2)/(x-y), x, `$`(y, 2))

> Diff(sqrt(x^2-y^2)/(x-y),x,y$2)=diff(sqrt(x^2-y^2)/(x-y),x,y$2);

Diff((x^2-y^2)^(1/2)/(x-y), x, `$`(y, 2)) = 3*x*y^2/((x^2-y^2)^(5/2)*(x-y))+2*x*y/((x^2-y^2)^(3/2)*(x-y)^2)+x/((x^2-y^2)^(3/2)*(x-y))+2*x/((x^2-y^2)^(1/2)*(x-y)^3)+y^2/((x^2-y^2)^(3/2)*(x-y)^2)+4*y/((...

Simplifions.

> normal(%);

Diff((x^2-y^2)^(1/2)/(x-y), x, `$`(y, 2)) = -(2*x^3+7*x^2*y+4*x*y^2+2*y^3)/((x^2-y^2)^(5/2)*(x-y))

>

Calcul des drives partielles de fonctions implicites

Soit z = f(x, y) o z est dfinie implicitement par la relation x*y^2+x*y*z = 2-z^3 . Pour trouver diff(z, x) , il faut driver chaque membre de cette quation, par rapport x. Dans ce cas, il faut signifier l'valuateur que z est dfinie implicitement en termes de x et y. Pour signifier l'valuateur que z est une variable dpendante de x et de y,  il faut utiliser la syntaxe fonctionnelle z(x, y) au lieu de taper seulement z.

Crons l'quation driver.

> Eq:= x*y^2+x*y*z(x,y) = 2-z(x,y)^3;

Eq := x*y^2+x*y*z(x, y) = 2-z(x, y)^3

Drivons ensuite chaque membre de cette quation par rapport x.

> Eq_derivee:=diff(Eq,x);

Eq_derivee := y^2+y*z(x, y)+x*y*(diff(z(x, y), x)) = -3*z(x, y)^2*(diff(z(x, y), x))

Reste donc isoler diff(z(x, y), x) . Rsolvons donc Eq_derivee par rapport diff(z(x, y), x) .

> solve(Eq_derivee,{diff(z(x,y),x)});

{diff(z(x, y), x) = -(y^2+y*z(x, y))/(x*y+3*z(x, y)^2)}

On aurait pu galement employer la macro-commande isolate. Depuis Maple 6, cette macro-commande de la bibliothque de base est auto-chargeable mais, avec Maple V, nous devons la rendre disponible en excutant au pralable un readlib sur cette macro-commande.

> ### WARNING: persistent store makes one-argument readlib obsolete
readlib(isolate);

proc (expr, x, n) local expr1, expr2, ito, t1, xx, linop, new_args, subs_args, funcs; option `Copyright (c) 1992 by the University of Waterloo. All rights reserved.`; if nargs < 2 or 3 < nargs or narg...

> isolate(Eq_derivee,diff(z(x,y),x));

diff(z(x, y), x) = (-y^2-y*z(x, y))/(x*y+3*z(x, y)^2)

Simplifions en factorisant ce rsultat.

> factor(%);

diff(z(x, y), x) = -y*(y+z(x, y))/(x*y+3*z(x, y)^2)

>

Pour obtenir plus directement la formule de diff(z, x) , il est de loin prfrable d'employer la macro-commande implicitdiff.

Reformulons Eq en terme de z et non pas en terme de z(x, y) .

> Eq:= x*y^2+x*y*z = 2-z^3;

Eq := x*y^2+x*y*z = 2-z^3

Le second argument de la macro-commande implicitdiff doit obligatoirement prciser lesquelles des variables en causes sont les variables dpendantes. On emploiera pour cela la syntaxe fonctionnelle.

> Diff(z,x)=implicitdiff(Eq,z(x,y),x);

Diff(z, x) = -(y^2+y*z)/(x*y+3*z^2)

>

Le rsultat prcdent est plus conforme la notation habituelle utilise en classe.

Comme dernier exemple, trouvons diff(z, `$`(x, 2)) .

> Diff(z,x$2)=implicitdiff(Eq,z(x,y),x$2);

Diff(z, `$`(x, 2)) = -(-2*y^4*x+6*y^3*z^2-2*y^3*z*x+6*z*y^4)/(x^3*y^3+9*x^2*y^2*z^2+27*x*y*z^4+27*z^6)

Essayons de simplifier ce rsulat en factorisant.

> factor(%);

Diff(z, `$`(x, 2)) = -2*y^3*(y+z)*(-x+3*z)/(x*y+3*z^2)^3

>

Rappel: Calcul d'une intgrale simple

La macro-commande int permet le calcul d'une intgrale indfinie ou le calcul d'une intgrale dfinie.

Par exemple, soit le calcul de l'intgrale indfinie int(x*sin(x), x) .

Ici galement, afin de documenter plus clairement les rsulats, utilisons la forme inactive de int, soit Int et formulons les requtes sous la forme d'une quation

Forme inerte = Forme active

> Int(x*sin(x),x)=int(x*sin(x),x)+C;

Int(x*sin(x), x) = sin(x)-x*cos(x)+C

Rappel: La constante d'intgration doit tre ajouter manuellement.

Pour le calcul d'une intgrale dfinie, il suffit de remplacer la variable d'intgration par un intervalle de la variable d'intgration.

valuer int(sin(x), x = 0 .. 2*Pi) .

> Int(sin(x), x=0..2*Pi)=int(sin(x), x=0..2*Pi);

Int(sin(x), x = 0 .. 2*Pi) = 0

Un dernier exemple.  valuer int(1/(x^2), x = 1 .. infinity) .

> Int(1/x^2,x = 1 .. infinity)=int(1/x^2,x = 1 .. infinity);

Int(1/x^2, x = 1 .. infinity) = 1

>

Calcul des intgrales doubles

Le calcul d'une intgrale double est, comme vous le savez, un calcul successif de deux intgrales simples.

Soit le calcul de int(int(1/((x+y)^2), y = 1 .. 2), x = 3 .. 4) .

Une manire d'effectuer le calcul demand est de calculer successivement les deux intgrales simples en commenant par l'intgrale imbrique. Il faut donc intgrer d'abord par rapport la variable y.

Posons le calcul demand.

> Calcul:=Int(Int(1/((x+y)^2),y = 1 .. 2),x = 3 .. 4);

Calcul := Int(Int(1/(x+y)^2, y = 1 .. 2), x = 3 .. 4)

>

Intgrons d'abord par rapport y. Posons ce calcul.

> yintegrale:=Int(1/(x+y)^2,y=1..2);

yintegrale := Int(1/(x+y)^2, y = 1 .. 2)

Imbriquons ensuite l'valuation de yintegrale dans l'intgration par rapport x.

> Int(value(yintegrale),x=3..4);

Int((PIECEWISE([infinity, And(-2 < x, x < -1)], [0, otherwise]))+1/((x+1)*(x+2)), x = 3 .. 4)

Reste donc valuer la seconde intgrale par rapport x.

> Calcul=value(%);

Int(Int(1/(x+y)^2, y = 1 .. 2), x = 3 .. 4) = -3*ln(2)+2*ln(5)-ln(3)

>

Une autre faon de faire est d'imbriquer immdiatement ces deux intgrales simples. Cette manire s'avre plus directe et donc plus claire.

> Calcul=int(int(1/(x+y)^2,y=1..2),x=3..4);

Int(Int(1/(x+y)^2, y = 1 .. 2), x = 3 .. 4) = -3*ln(2)+2*ln(5)-ln(3)

Simplifions l'criture logarithmique de ce rsultat l'aide des proprits des logarithmes.

> combine(%,ln);

Int(Int(1/(x+y)^2, y = 1 .. 2), x = 3 .. 4) = -ln(24/25)

>

Dans une intgrale double, les bornes d'intgration de l'intgrale imbrique ne sont pas ncessairement des constantes.

Calculer int(int(r*sqrt(9-r^2), r = 0 .. 3*sin(theta)), theta = 0 .. Pi) .

Posons le calcul demand.

> Calcul:=Int(Int(r*sqrt(9-r^2),r=0..3*sin(theta)),theta=0..Pi);

Calcul := Int(Int(r*(9-r^2)^(1/2), r = 0 .. 3*sin(theta)), theta = 0 .. Pi)

valuons.

> Calcul=int(int(r*sqrt(9-r^2),r=0..3*sin(theta)),theta=0..Pi);

Int(Int(r*(9-r^2)^(1/2), r = 0 .. 3*sin(theta)), theta = 0 .. Pi) = -12+9*Pi

>

Voici un autre exemple de calcul d'une intgrale double. Calculer int(int(r, theta = arccos(2/r) .. arcsin(2/r)), r = 2 .. 2*sqrt(2)) .

Posons le calcul demand.

> Calcul:=Int(Int(r,theta=arccos(2/r)..arcsin(2/r)),r=2..2*sqrt(2));

Calcul := Int(Int(r, theta = arccos(2/r) .. arcsin(2/r)), r = 2 .. 2*2^(1/2))

valuons.

> Calcul=int(int(r,theta=arccos(2/r)..arcsin(2/r)),r=2..2*sqrt(2));

Int(Int(r, theta = arccos(2/r) .. arcsin(2/r)), r = 2 .. 2*2^(1/2)) = -Pi+4

>

Le rsultat obtenu montre que, cette fois-ci, Maple n'a pu complter automatiquement l'valuation demande. Utilisons donc la macro-commande expand afin que Maple puisse, sur demande, effectuer ce dernier calcul en dveloppant l'intgrale d'une somme en la somme de deux intgrales.

> expand(%);

Int(r*Int(1, theta = arccos(2/r) .. arcsin(2/r)), r = 2 .. 2*2^(1/2)) = -Pi+4

Remarquez que ce sont les deux membres qui ont t dvelopps mais que le membre de gauche, quant lui, l'a t dans sa forme inerte.

>

Les exemples prcdents ont montr comment employer Maple dans des calculs formels. On peut, bien sr, commander une approximation numrique plutt qu'une valuation symbolique (exacte) lorsqu'on value des intgrales dfinies. Dans ce cas, il faut employer la macro-commande evalf.

Obtenez une approximation de int(int(r, r = 1 .. 16*theta/Pi), theta = Pi/16 .. Pi/8) .

Posons le calcul demand.

> Calcul:=Int(Int(r,r=1..16*theta/Pi),theta=Pi/16..Pi/8);

Calcul := Int(Int(r, r = 1 .. 16*theta/Pi), theta = 1/16*Pi .. 1/8*Pi)

Obtenons une approximation avec des calculs impliquant 20 chiffres dcimaux.

> Calcul=evalf(Calcul,20);

Int(Int(r, r = 1 .. 16*theta/Pi), theta = 1/16*Pi .. 1/8*Pi) = .13089969389957471827

>

Comme dernier exemple, reprenons le calcul de la page 89 du cahier de notes Intgrales doubles : int(int(r^2, theta = 0 .. Pi/4), r = 0 .. 2)+int(int(r^2, theta = arccos(2/r) .. Pi/4), r = 2 .. 2*sqrt(2)) .

Dans le cahier de notes, le dveloppement de ce calcul est fait sur environ trois pages et applique les techniques d'intgration par parties (2 fois) et la substitution trigonomtrique. Voyons le rsultat que donnera Maple.

Posons le calcul demand.

> Calcul:=Int(Int(r^2,theta = 0 .. Pi/4),r = 0 .. 2)+Int(Int(r^2,theta = arccos(2/r) .. Pi/4),r = 2 .. 2*sqrt(2));

Calcul := Int(Int(r^2, theta = 0 .. 1/4*Pi), r = 0 .. 2)+Int(Int(r^2, theta = arccos(2/r) .. 1/4*Pi), r = 2 .. 2*2^(1/2))

valuons.

> Calcul=int(int(r^2,theta = 0 .. Pi/4),r = 0 .. 2)+int(int(r^2,theta = arccos(2/r) .. Pi/4),r = 2 .. 2*sqrt(2));

Int(Int(r^2, theta = 0 .. 1/4*Pi), r = 0 .. 2)+Int(Int(r^2, theta = arccos(2/r) .. 1/4*Pi), r = 2 .. 2*2^(1/2)) = 2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1)+4/3*2^(1/2)

Aidons Maple complter le calcul en employant la macro-commande expand.

> ``=expand(rhs(%));

`` = 2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1)+4/3*2^(1/2)

Maple a formul symboliquement la rponse l'aide de la partie relle d'une arctangente hyperbolique. Exprimons cette arctangente hyperbolique avec une criture logarithmique.

> ``=convert(rhs(%),ln);

`` = 2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1)+4/3*2^(1/2)

>

La rapidit du rsultat est remarquable mais il a t ncessaire de convertir le rsultat prcdent en des termes plus communs pour notre niveau d'enseignement.

Pour terminer cette feuille Maple, montrons que le rsultat 4*sqrt(2)/3+2*ln(sqrt(2)+1)/3-2*ln(sqrt(2)-1)/3 qu'a donn l'valuateur est quivalent celui du cahier de notes 4*(sqrt(2)+ln(sqrt(2)+1))/3 .

> Reponse_cahier:=4*(sqrt(2)+ln(sqrt(2)+1))/3;

Reponse_cahier := 4/3*2^(1/2)+4/3*ln(1+2^(1/2))

Il suffit donc montrer que 4*ln(sqrt(2)+1)/3 = 2*ln(sqrt(2)+1)/3-2*ln(sqrt(2)-1)/3

> Resultat_1:=2/3*ln(sqrt(2)+1)-2/3*ln(sqrt(2)-1);

Resultat_1 := 2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1)

> ### WARNING: note that `I` is no longer of type `radical`
Resultat_2:=combine(Resultat_1,[ln,radical]);

Resultat_2 := 2/3*ln((1+2^(1/2))/(2^(1/2)-1))

Rationalisons l'argument de la fonction ln.

> Arg_Rationalise:=rationalize(op(1,Resultat_2));

Arg_Rationalise := 2/3

Substituons cette rationalisation l'argument de la fonction ln.

> Resultat_3:=subs(op(1,Resultat_2)=Arg_Rationalise,Resultat_2);

Resultat_3 := 2/3*ln((1+2^(1/2))/(2^(1/2)-1))

> Resultat_1=expand(Resultat_3);

2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1) = 2/3*ln(1+2^(1/2))-2/3*ln(2^(1/2)-1)

Ce qu'il fallait dmontrer.

>

On aurait pu galement comparer numriquement le calcul demand Int(Int(r^2, theta = 0 .. Pi/4), r = 0 .. 2)+Int(Int(r^2, theta = arccos(2/r) .. Pi/4), r = 2 .. 2*sqrt(2)) et la rponse du cahier 4*(sqrt(2)+ln(sqrt(2)+1))/3 .

> evalf(Calcul,20);

3.0607828658568507654

> evalf(Reponse_cahier,20);

3.0607828658568507653

>