Utiliser Maple 8
Utiliser Maple 8
Utiliser Maple 8
Maple 8
c 2002 Waterloo Maple Inc.
ii •
c 2002, 2001, 2000, 1998, 1996 Waterloo Maple Inc.
Imprimé au Canada
ISBN 1-894511-33-6
Table des matières
1 Introduction à Maple 1
1.1 Les autres manuels . . . . . . . . . . . . . . . . . . . . . . 3
iii
iv • Table des matières
Texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Texte Maple . . . . . . . . . . . . . . . . . . . . . . . . . . 283
LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
HTML et HTML avec MathML . . . . . . . . . . . . . . . 285
RTF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
7.4 Imprimer des graphiques . . . . . . . . . . . . . . . . . . . 288
7.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 290
1
2 • Chapitre 1: Introduction à Maple
1
La version étudiante n’inclut pas les deux guides de programmation. Ces guides
peuvent toutefois etre achetés chez des libraires spécialisés ou directement auprès de
Waterloo Maple Inc.
4 • Chapitre 1: Introduction à Maple
?commande
2.1 Introduction
Les calculs les plus simples dans Maple sont numériques. Maple peut
fonctionner comme une calculatrice traditionnelle avec les entiers et les
5
6 • Chapitre 2: Mathématiques de base avec Maple
> 1 + 3/2;
5
2
> 2*(3+1/3)/(5/3-4/5);
100
13
> 2.8754/2;
1.437700000
Bien entendu, Maple peut faire beaucoup plus, comme vous pourrez
le voir bientôt.
Pour le moment, considérez cet exemple simple.
> 1 + 1/2;
3
2
Remarquez que Maple effectue des calculs exacts avec des nombres
rationnels. Le résultat de 1 + 1/2 est 3/2, et non 1.5. Pour Maple, le
nombre rationnel 3/2 et son approximation décimale 1.5 sont deux objets
complètement différents.
La possibilité de représenter des expressions de manière exacte permet
à Maple de préserver beaucoup plus d’information à propos de leur origine
et de leur structure. Par exemple, l’origine et la structure d’un nombre
comme
1
N.d.t. : Le logiciel Maple utilise la syntaxe anglo-saxonne pour la représentation
des nombres décimaux. C’est donc le point, et non la virgule, qu’il faut utiliser pour
saisir de tels nombres.
2.2 Calculs numériques • 7
0.5235987758
est beaucoup moins évidente que pour une quantité exacte comme
1
π
6
> 75 - 3;
72
> 5*3;
15
> 120/2;
60
8 • Chapitre 2: Mathématiques de base avec Maple
933262154439441526816992388562667004907\
15968264381621468592963895217599993229\
91560894146397615651828625369792082722\
37582511852109168640000000000000000000\
00000
> length(%);
158
> iquo(25,3);
2.2 Calculs numériques • 9
> isprime(18002676583);
true
5
6
3.1415926535897932384626433832795028841\
97169399375105820974944592307816406286\
208998628034825342117068
Il est important d’apprendre comment Maple distingue les représen-
tations exactes des valeurs de leurs approximations décimales.
Voici un exemple de nombre rationnel (exact).
> 1/3;
1
3
0.3333333333
15
2
> 1.5*5;
7.5
2.2 Calculs numériques • 11
> sin(Pi);
> ln(exp(5));
3.141592654
3.1415926535897932384626433832795028841\
97169399375105820974944592307816406286\
20899862803482534211706798214808651328\
23066470938446095505822317253594081284\
81117450284102701938521105559644622948\
9549303820
Vous pouvez également forcer Maple à effectuer tous ses calculs avec
des approximations décimales en incluant au moins un nombre décimal
dans chaque expression. Les nombres à virgule flottante sont conta-
gieux : si une expression contient ne serait-ce qu’un seul nombre décimal,
Maple évalue l’expression entière en arithmétique à virgule flottante.
> 1/3 + 1/4 + 1/5.3;
0.7720125786
> sin(0.2);
.1986693308
Digits := 20
> sin(0.2);
0.19866933079506121546
les vingt chiffres qu’il contient. En général, déterminer la valeur que doit
prendre Digits pour obtenir une précision donnée n’est pas chose facile,
le résultat final dépendant du problème. Cependant, il est en général de
mise d’en augmenter la valeur pour obtenir plus de précision. Maple est
très flexible si une grande précision décimale est importante dans votre
travail.
3 + 4I
1 5
+ I
13 13
Vous pouvez aussi travailler sous d’autres bases avec d’autres systèmes
de nombres.
> convert(247, binary);
11110111
3FF
[2, 2, 1]
> 27 mod 4;
−1
> modp(27,4);
Fonctions mathématiques
Maple connaı̂t toutes les fonctions mathématiques standard (consultez la
table 2.2 pour une liste partielle).
> sin(Pi/4);
1√
2
2
> ln(1);
Lorsque Maple ne peut trouver une forme plus simple, il laisse l’ex-
pression telle quelle plutôt que de la convertir en une forme inexacte.
> ln(Pi);
ln(π)
16 • Chapitre 2: Mathématiques de base avec Maple
(1 + x)2
> (1 + x) + (3 - 2*x);
4−x
1 + 2 x + x2
> factor(%);
(1 + x)2
d
sin(x)
dx
> value(%);
cos(x)
> value(%);
1 3 1 2 1
n − n + n
3 2 6
18 • Chapitre 2: Mathématiques de base avec Maple
2+x
1 3 1 5 1 1
x− x + x − x7 + x9 + O(x10 )
6 120 5040 362880
nom := expression ;
var := x
terme := x y
eqs := x = y + 2
2.4 Affecter des noms à des expressions • 19
Sous Maple, les noms peuvent contenir n’importe quel caractère al-
phanumérique en plus du caractère souligné (underscore en anglais),
mais ils ne peuvent pas commencer par un nombre. De plus, évitez
de commencer un nom par le caractère souligné ; Maple utilise ces noms
à des fins de classification interne. Les noms polynomial, test_data,
RoOt_lOcUs_pLoT et value2 sont des noms Maple valides, tandis que
2ndphase (parce qu’il commence par un nombre) et x&y (parce que &
n’est pas un caractère alphanumérique) sont des noms invalides.
Vous pouvez définir vos propres fonctions à l’aide de la notation
flèche (->) de Maple. Cela indique à Maple comment évaluer la fonc-
tion lorsqu’elle apparaı̂t dans les expressions Maple. À ce point de votre
lecture, vous pouvez dessiner des graphiques simples au moyen de la com-
mande plot.
> f := x -> 2*x^2 -3*x +4;
f := x → 2 x2 − 3 x + 4
70
60
50
40
30
20
10
–4 –2 0 2 4
x
f := x → x2
20 • Chapitre 2: Mathématiques de base avec Maple
25
> f(y+1);
(y + 1)2
1, 2, 3, 4
2.5 Les principaux types d’objets Maple • 21
> x, y, z, w;
x, y, z, w
ab
S := 1, 2, 3, 4
> a||S;
a1 , a2 , a3 , a4
f, g, h := 3, 6, 1
22 • Chapitre 2: Mathématiques de base avec Maple
> f;
> h;
Les listes
Une liste est formée en encadrant un nombre quelconque d’objets Maple
(séparés par des virgules) par des crochets.
> data_list := [1, 2, 3, 4, 5];
data_list := [1, 2, 3, 4, 5]
polynomes := [x2 + 3, x2 + 3 x − 1, 2 x]
Ainsi, une liste est une suite d’expressions encadrée par des crochets.
Maple conserve l’ordre et la répétition des éléments dans une liste.
Ainsi, [a,b,c], [b,c,a] et [a,a,b,c,a] sont trois listes différentes.
> [a,b,c], [b,c,a], [a,a,b,c,a];
lettres := [a, b, c]
2.5 Les principaux types d’objets Maple • 23
> lettres[2];
Les ensembles
Maple permet la gestion d’ensembles au sens mathématique du terme.
Tout comme dans une suite ou dans une liste, des virgules séparent les
objets ; cependant, les accolades désignent l’objet en tant qu’ensemble.
> data_set := {1, -1, 0, 10, 2};
inconnues := {x, y, z}
Ainsi, un ensemble est une suite d’expressions encadrée par des acco-
lades.
Maple ne conserve ni l’ordre, ni la répétition des éléments dans les
ensembles : ces derniers possèdent ainsi les mêmes propriétés que leurs
équivalents mathématiques. Ainsi, les trois ensembles suivants sont iden-
tiques :
> {a,b,c}, {c,b,a}, {a,a,b,c,a};
{1, 2, 2.0}
Les propriétés que revêtent les ensembles font de ceux-ci des outils par-
ticulièrement utiles dans Maple, tout comme ils le sont en mathématiques.
Maple fournit plusieurs opérateurs ensemblistes, incluant les opérateurs
de base de l’intersection et de l’union en utilisant la notation intersect
et union.
> {a,b,c} union {c,d,e};
{a, b, c, d, e}
{1, a}
1 1
nombres := {0, π, π, π}
3 2
1 1
{g(0), g(π), g( π), g( π)}
3 2
2.5 Les principaux types d’objets Maple • 25
1√
{0, 1, 3}
2
true
data_set := {3, 5, 6, 7}
false
Pour choisir des éléments depuis une liste, utilisez la notation indicée
[n ] , où n désigne la position de l’élément désiré dans la liste.
> participants[2];
Sophie
empty _set := {}
empty _list := []
Les tableaux
Les tableaux (arrays en anglais) sont une extension d’une autre structure
de données : la liste. Imaginez une liste comme un groupe d’éléments où
chacun est associé à un nombre entier positif, son indice, qui représente
sa position dans la liste. La structure de tableau (array) est une
généralisation de cette idée. Chaque élément est toujours associé à un
indice, mais cet indice n’est pas forcément unidimensionnel. De plus, les
indices peuvent être nuls ou négatifs. Vous pouvez également définir ou
modifier individuellement chacun des éléments d’un tableau sans pour
autant redéfinir ce dernier entièrement.
On doit déclarer le tableau de manière que Maple connaisse le nombre
de dimensions souhaité.
> carres := array(1..3);
carres 1 := 1
carres 2 := 4
carres 3 := 9
carres
> print(carres);
[1, 4, 9]
pwrs 1, 1 := 1
pwrs 1, 2 := 1
pwrs 1, 3 := 1
expr := z 2 + 3
30 • Chapitre 2: Mathématiques de base avec Maple
(x + y)2 + 3
pwrs
Les tables
Une table est une extension de tableau. À la différence d’un tableau, les
indices d’une table peuvent être quelconques, et non seulement limités à
des nombres entiers.
> traduit := table([one=un,two=deux,three=trois]);
> traduit[two];
deux
[.5976000000 1025 , kg ]
Dans cet exemple, chacun des indices est un nom et chaque entrée est
une liste. Ce n’est en fait qu’un exemple très simple ; la plupart du temps,
des indices beaucoup plus généraux sont préférables. Ainsi, vous pourriez
construire une table dont les indices sont des formules algébriques et dont
les valeurs sont les dérivées de ces formules.
Les chaınes
Une chaıne est un autre objet Maple créé en encadrant un nombre quel-
conque de caractères par des guillemets anglais.
> "Ceci est une chaine.";
Les chaı̂nes sont des unités indivisibles que l’on peut considérer comme
des constantes : on ne peut leur assigner une valeur.
> "mon age" := 22;
Comme les éléments des listes ou des tableaux, on peut accéder indivi-
duellement aux différents caractères d’une chaı̂ne en utilisant la notation
des crochets.
> mystr := "I ate the whole thing.";
> mystr[11..-2];
“whole thing”
> length(newstr);
38
La commande simplify
Vous pouvez choisir cette commande pour appliquer des règles de simpli-
fication à une expression. Maple connaı̂t certaines règles de simplification
pour divers types d’expressions et de formes comme les fonctions trigo-
nométriques, les radicaux, les fonctions logarithmiques, les fonctions ex-
ponentielles, les puissances ainsi que plusieurs autres fonctions spéciales.
> expr := cos(x)^5 + sin(x)^4 + 2*cos(x)^2
> - 2*sin(x)^2 - cos(2*x);
expr :=
cos(x)5 + sin(x)4 + 2 cos(x)2 − 2 sin(x)2 − cos(2 x)
> simplify(expr);
cos(x)5 + cos(x)4
1 + ln(2) + ln(y)
1 + ln(2 y)
La commande factor
La commande factor factorise les expressions polynomiales.
> big_poly := x^5 - x^4 - 7*x^3 + x^2 + 6*x;
big _poly := x5 − x4 − 7 x3 + x2 + 6 x
> factor(big_poly);
x (x − 1) (x − 3) (x + 2) (x + 1)
x3 − y 3
rat _expr :=
x4 − y 4
x2 + x y + y 2
(y + x) (x2 + y 2 )
La commande expand
Essentiellement, la commande expand est l’inverse de la commande
factor. Elle permet l’expansion de termes multipliés de même que plu-
sieurs autres expansions. Pour cette raison, expand figure parmi les com-
mandes de manipulation les plus utiles. Bien que l’on puisse imaginer par
2.6 La manipulation d’expressions • 35
son nom que le résultat qu’elle produit soit plus long et plus complexe que
l’expression originale, il n’en est pas toujours ainsi. En fait, l’expansion
de certaines expressions permet de grandes simplifications.
> expand((x+1)*(x+2));
x2 + 3 x + 2
> expand(sin(x+y));
> expand(exp(a+ln(b)));
ea b
La commande convert
Cette commande convertit les expressions entre différentes formes.
> convert(cos(x),exp);
1 (I x) 1 1
e +
2 2 e(I x)
36 • Chapitre 2: Mathématiques de base avec Maple
cosh(x)
> A := Matrix([[a,b],[c,d]]);
a b
A :=
c d
{a, b, c, d}
[a, b, c, d]
2.6 La manipulation d’expressions • 37
La commande normal
Cette commande transforme les expressions rationnelles en forme nor-
male factorisée (factored normal form),
numérateur
dénominateur
où numérateur et dénominateur sont deux polynômes relativement pre-
miers à coefficients entiers. Ainsi, la commande normal met les fractions
au même dénominateur.
> rat_expr_2 := (x^2 - y^2)/(x - y)^3 ;
x2 − y 2
rat _expr _2 :=
(−y + x)3
> normal(rat_expr_2);
y+x
(−y + x)2
y+x
y 2 − 2 x y + x2
La commande combine
Cette commande combine les termes de sommes, de produits et de puis-
sances en un seul terme. Ces transformations sont, dans plusieurs cas,
l’inverse des transformations appliquées par la commande expand.
> combine(exp(x)^2*exp(y),exp);
e(2 x+y)
x(2 a)
38 • Chapitre 2: Mathématiques de base avec Maple
La commande map
Cette commande est très utile lorsque vous travaillez sur des listes, des en-
sembles et des tableaux. Elle fournit un moyen commode de gérer plusieurs
solutions ou d’appliquer une opération à chaque élément d’un tableau. La
commande map applique une commande à chaque élément de la structure
de données ou de l’expression fournie. Même s’il est possible d’écrire des
boucles dans un programme pour accomplir ces tâches, l’utilité et la puis-
sance de la commande map ne devraient pas être sous-estimées. Prenez le
temps nécessaire pour vous assurer que vous connaissez bien l’utilisation
de map, l’une des plus puissantes fonctions de Maple.
> map( f, [a,b,c] );
1 3
data_list := [0, π, π, 2 π]
2 2
[0, 1, −1, 0]
Par exemple, pour dériver chaque élément d’une liste par rapport à
x, vous pouvez utiliser les commandes suivantes :
> fcn_list := [sin(x),ln(x),x^2];
d d d 2
[ sin(x), ln(x), x ]
dx dx dx
2.6 La manipulation d’expressions • 39
1
[cos(x), , 2 x]
x
[1, 0, 1, 4, 9]
eqn1 := y + x = z + 3
> lhs(eqn1);
y+x
> rhs(eqn1);
z+3
x+1
x, 2
y, z
2.6 La manipulation d’expressions • 41
expr := a3 b2
a3 b2
25 a
25 a
> simplify(expr2);
1 − cos(x)2
Encore une fois, utilisez les relations accessoires pour spécifier l’iden-
tité.
> simplify(%, {1-cos(x)^2=sin(x)^2});
sin(x)2
2x + 2y
expr3 := 2 x + 2 y
x deux + y deux
> factor(%);
deux (x + y)
2.7 Conclusion • 43
2.7 Conclusion
Dans ce chapitre, vous avez vu plusieurs des types d’objets que Maple
peut manipuler : les suites, les ensembles et les listes. Vous avez également
vu plusieurs commandes, dont expand, factor et simplify, qui figurent
parmi les plus utiles pour manipuler et simplifier des expressions algé-
briques. D’autres, comme map, sont utiles pour les ensembles, les listes et
les tableaux. De son côté, la commande subs sert dans presque toutes les
situations.
Dans le prochain chapitre, vous apprendrez à manipuler ces concepts
pour aborder un des problèmes fondamentaux des mathématiques : la
résolution des systèmes d’équations. À mesure que vous apprendrez de
nouvelles commandes, observez comment les concepts de ce chapitre sont
utilisés pour poser les problèmes et manipuler leurs solutions.
44 • Chapitre 2: Mathématiques de base avec Maple
3 Trouver des solutions
{x = 2}, {x = −2}
45
46 • Chapitre 3: Trouver des solutions
{x = −y, y = y}
1
{x = −1, y = 2}, {x = 2, y = }
2
1
eqns := {x + 2 y = 3, y + = 1}
x
Puis, résolvez.
> soln := solve( eqns, {x,y} );
3.1 Résolution au moyen de solve • 47
1
soln := {x = −1, y = 2}, {x = 2, y = }
2
{x = −1, y = 2}
et ensuite,
> soln[2];
1
{x = 2, y = }
2
{3 = 3, 1 = 1}
{3 = 3, 1 = 1}
x1 := −1
y1 := 2
[x, y]
[−1, 2]
[2, −1]
1
{y = 2, x = −1}, {y = , x = 2}
2
1
[{y = 2, x = −1}, {y = , x = 2}]
2
{x = −y, y = y}, {x = y, y = y}
{x = −y, y = y}
527 28 70 59
s2 := {x = − − 7t − u, z = − − 7 t − u,
13 13 13 13
635 70
y= + 12 t + u}
13 13
Tout comme à la page 47, supposons que vous nécessitiez que les cinq
solutions trouvées par solve soient placées dans un ordre particulier.
Puisqu’il est impossible de fixer l’ordre des éléments dans un ensemble,
solve ne retournera pas nécessairement les solutions dans l’ordre x, y, z.
Cependant, les listes préservent l’ordre de leurs éléments ; ainsi, essayez
la commande suivante.
> eval( [x,y,z], s2 );
527 28 635 70 70 59
[− − 7t − u, + 12 t + u, − − 7 t − u]
13 13 13 13 13 13
3.1 Résolution au moyen de solve • 51
Non seulement cette commande a fixé l’ordre des solutions, mais elle
en a également extrait le côté droit de l’égalité (puisque vous connais-
sez toujours quelle solution s’applique à quelle variable en raison de leur
ordre). Cette possibilité est particulièrement utile lorsque vous souhaitez
tracer la surface qui représente la solution.
> plot3d(%, u=0..2, t=0..2, axes=BOXED);
–5
–10
–15
–20
–25
50 –58
–56
55 –54
60 –52
65 –50
–48
70 –46
75 –44
80 –42
La commande unapply
Supposez que vous souhaitez explorer encore davantage. Par souci de com-
modité, définissez x = x(u, t), y = y(u, t) et z = z(u, t) (c.-à-d. convertis-
sez les solutions en fonctions). Souvenez-vous que vous pouvez facilement
choisir l’expression d’une solution pour une variable particulière en uti-
lisant eval.
> eval( x, s2 );
527 28
− − 7t − u
13 13
x(1, 1)
f := (x, y) → x2 + y 2 + 4
a2 + b2 + 4
527 28
− − 7t − u
13 13
527 28
x := (u, t) → − − 7t − u
13 13
> x(1,1);
−646
13
635 70
+ 12 t + u
13 13
> y := unapply(%,u,t);
635 70
y := (u, t) → + 12 t + u
13 13
3.1 Résolution au moyen de solve • 53
> eval(z,s2);
70 59
− − 7t − u
13 13
70 59
z := (u, t) → − − 7t − u
13 13
861 −220
,
13 13
La commande assign
La commande assign permet également d’affecter des valeurs à des in-
connues. Par exemple, plutôt que de définir x, y et z en tant que fonc-
tions, assignez chacune d’elles à l’expression du côté droit de l’égalité de
l’équation correspondante.
> assign( s2 );
> x, y, z;
527 28 635 70 70 59
− − 7t − u, + 12 t + u, − − 7 t − u
13 13 13 13 13 13
s3 := f(x) = 2 x3 + x
> assign( s3 );
2 x3 + x
f(1)
f(x) := 2 x3 + x
f := x → 2 x3 + x
> eval(f(x),s3);
2 x3 + x
3.1 Résolution au moyen de solve • 55
f := x → 2 x3 + x
> f(1);
La commande RootOf
À l’occasion, Maple retourne ses solutions à l’aide de la commande
RootOf. Considérons l’exemple suivant.
> solve({x^5 - 2*x + 3 = 0},{x});
{x = .7390851332}
Pour une équation générale, fsolve cherche une racine réelle simple.
Pour un polynôme, cependant, la commande cherche toutes les racines
réelles.
> poly :=3*x^4 - 16*x^3 - 3*x^2 + 13*x + 16;
poly := 3 x4 − 16 x3 − 3 x2 + 13 x + 16
> fsolve({poly},{x});
{x = 1.324717957}, {x = 5.333333333}
Pour chercher plus d’une racine d’une équation générale, utilisez l’op-
tion avoid.
> fsolve({sin(x)=0}, {x});
{x = 0.}
{x = −3.141592654}
{x = 1.324717957}
{x = 4.712388980}
Dans plusieurs cas, fsolve peut échouer dans sa recherche d’une ra-
cine, même si une telle racine existe. Dans ces situations, spécifier un
intervalle peut aider Maple. Pour améliorer la précision de solutions,
vous pouvez augmenter la valeur de la variable spéciale, Digits. Remar-
quez que dans l’exemple suivant, la solution trouvée ne garantit pas une
précision de trente décimales ; cependant, Maple effectue toutes les étapes
de ses calculs à une précision d’au moins trente chiffres significatifs au lieu
des dix chiffres par défaut.
> Digits := 30;
Digits := 30
{x = 1.57079632679489661923132169164}
{x = 0}
Remarquez que Maple retourne seulement une solution parmi une in-
finité. Cependant, si vous fixez la valeur de la variable _EnvAllSolutions
à true (vrai), Maple retourne alors l’ensemble complet des solutions.
> _EnvAllSolutions := true;
_EnvAllSolutions := true
{x = π _Z1 ~}
{x = 3.14159265358979323846264338328}
(x − 1)2
expr :=
x2 − 1
soln := {x = 1}
(x − 1)2
lim
x→1 x2 − 1
10
8
6
y
4
2
–4 –2 0 2 4
–2 x
–4
–6
–8
–10
{x = 5 + 4 _Z1 , y = 2 + 3 _Z1 }
{y = 6, x = 14}
Maple utilise les variables globales _Z1, . . ._Zn pour dénoter les pa-
ramètres entiers de la solution.
> msolve({2^n=3},19);
{n = 13 + 18 _Z1 ~}
Le tilde (~) sur _Z1 indique que msolve a placé une hypothèse à propos
de _Z1 ; dans ce cas-ci, que _Z1 soit entier.
> about( _Z1 );
3.4 Les polyn
omes • 61
x2 − 1
> x + y + z;
62 • Chapitre 3: Trouver des solutions
x+y+z
1 2 √ 1
x − 3x −
2 3
(1 − I) x + 3 + 4 I
a x4 + b x3 + c x2 + d x + f
Tri et regroupement
La commande sort arrange les termes d’un polynôme dans l’ordre
décroissant des degrés de leurs inconnues. Plutôt que de conserver une
deuxième copie du polynôme original dont les termes ont été triés, sort
modifie directement la manière dont les termes sont emmagasinés dans
le polynôme de départ. Ainsi, si vous affichez le polynôme après l’avoir
passé à sort, vous remarquerez qu’il demeure trié :
> sort_poly := x + x^2 - x^3 + 1 - x^4;
sort _poly := x + x2 − x3 + 1 − x4
> sort(sort_poly);
−x4 − x3 + x2 + x + 1
> sort_poly;
−x4 − x3 + x2 + x + 1
3.4 Les polyn
omes • 63
x2 y 2 + x3 + y 3
x3 + x2 y 2 + y 3
big _poly := x y + z x y + y x2 − z y x2 + x + z x
(y − z y) x2 + (y + z y + 1 + z) x
(x y − y x2 + x) z + x y + y x2 + x
64 • Chapitre 3: Trouver des solutions
Opérations mathématiques
Vous pouvez effectuer plusieurs opérations mathématiques sur les po-
lynômes. Parmi les opérations les plus fondamentales, on trouve la division
(c’est-à-dire diviser un polynôme par un autre et en déterminer le quotient
et le reste). Maple fournit les commandes rem et quo pour déterminer le
reste (remainder en anglais) et le quotient d’une division polynomiale.
> r := rem(x^3+x+1, x^2+x+1, x);
r := 2 + x
q := x − 1
x3 + x + 1
true
poly := x2 + 3 x − 4
6
3.4 Les polyn
omes • 65
−1
Coefficients et degrés
Les commandes degree et coeff déterminent le degré d’un polynôme et
fournissent un mécanisme d’extraction des coefficients.
> poly := 3*z^3 - z^2 + 2*z - 3*z + 1;
poly := 3 z 3 − z 2 − z + 1
−1
> degree(poly,z);
poly1 := x6 − x5 − 9 x4 + x3 + 20 x2 + 12 x
> factor(poly1);
x (x − 2) (x − 3) (x + 2) (x + 1)2
poly2 := x + 3
poly3 :=
x6 + 18 x5 + 135 x4 + 540 x3 + 1215 x2 + 1458 x + 729
> factor(poly3);
(x + 3)6
(x + y) (x2 − x y + y 2 )
x2 − 2 x + 1
f := x →
x4 + 3 x3 − 7 x2 + x + 2
x2 − 2 x + 1
lim
x→1 x4 + 3 x3 − 7 x2 + x + 2
> value(%);
1
8
68 • Chapitre 3: Trouver des solutions
lim tan(x)
x→(1/2 π)−
> value(%);
lim tan(x)
x→(1/2 π)+
> value(%);
−∞
Une autre opération facile à effectuer est la création d’une série ap-
proximant une fonction donnée. Par exemple, utilisez la fonction
> f := x -> sin(4*x)*cos(x);
f := x → sin(4 x) cos(x)
38 3 421 5
fs1 := 4 x − x + x + O(x6 )
3 30
> p := convert(fs1,polynom);
38 3 421 5
p := 4 x − x + x
3 30
–1
–2
Order := 12
–1
–2
f := x → x sin(a x) + b x2
> Diff(f(x),x);
∂
(x sin(a x) + b x2 )
∂x
> df := value(%);
df := sin(a x) + x cos(a x) a + 2 b x
> value(%);
> simplify(%);
x (sin(a x) + b x)
3.5 Le calcul différentiel • 71
Il n’est pas nécessaire d’utiliser les formes inertes Diff et Int en con-
jonction avec la commande value pour calculer symboliquement la dérivée
et l’intégrale. Les résultats peuvent être calculés en une seule commande
en utilisant respectivement diff et int.
Vous pouvez également effectuer des intégrales définies. Par exemple,
recalculez l’intégrale précédente sur l’intervalle de x = 1 à x = 2.
> Int(df,x=1..2);
2
sin(a x) + x cos(a x) a + 2 b x dx
1
> value(%);
2 sin(2 a) + 3 b − sin(a)
> value(%);
1√
π erf(x)
2
g := t → e(−a t) ln(t)
> value(%);
72 • Chapitre 3: Trouver des solutions
> value(%);
ln(a~) γ
− −
a~ a~
Le résultat est beaucoup plus simple. Le seul terme non élémentaire est
la constante gamma. Le tilde (~) indique que a porte une hypothèse. Vous
devez maintenant supprimer cette hypothèse pour parcourir les exemples
ultérieurs. Deux étapes sont nécessaires. La réponse, ans, contient a avec
des hypothèses. Si vous souhaitez repartir de zéro et continuer à utiliser
ans, vous devez remplacer toutes les occurrences de a~ par a.
> ans := subs(a =’a’, ans );
∞
ans := e(−a t) ln(t) dt
0
d2 d
ode1 := {( 2
y(t)) + 5 ( y(t)) + 6 y(t) = 0}
dt dt
ic := {y(0) = 0, D(y)(0) = 1}
−e(−3 t) + e(−2 t)
y1 := t → −e(−3 t) + e(−2 t)
74 • Chapitre 3: Trouver des solutions
> y1(a);
−e(−3 a) + e(−2 a)
{0 = 0}
{1 = 1, 0 = 0}
y := t → −e(−3 t) + e(−2 t)
{0 = 0}
> ic;
{1 = 1, 0 = 0}
y := y
d4
ode2 := 1000000 ( y(x)) = Dirac(x − 2) − Dirac(x − 4)
dx4
iv := {(D(2) )(y)(5) = 0}
1
soln := y(x) = Heaviside(x − 2) x3
6000000
1 1
− Heaviside(x − 2) + Heaviside(x − 2) x
750000 500000
1
− Heaviside(x − 2) x2
1000000
1
− Heaviside(x − 4) x3
6000000
1 1
+ Heaviside(x − 4) − Heaviside(x − 4) x
93750 125000
1 1
+ Heaviside(x − 4) x2 − x3
500000 15000000
1
+ x
1250000
> eval(y(x), soln);
76 • Chapitre 3: Trouver des solutions
1 1
Heaviside(x − 2) x3 − Heaviside(x − 2)
6000000 750000
1
+ Heaviside(x − 2) x
500000
1
− Heaviside(x − 2) x2
1000000
1
− Heaviside(x − 4) x3
6000000
1 1
+ Heaviside(x − 4) − Heaviside(x − 4) x
93750 125000
1 1
+ Heaviside(x − 4) x2 − x3
500000 15000000
1
+ x
1250000
> y := unapply(%, x);
1
y := x → Heaviside(x − 2) x3
6000000
1 1
− Heaviside(x − 2) + Heaviside(x − 2) x
750000 500000
1
− Heaviside(x − 2) x2
1000000
1
− Heaviside(x − 4) x3
6000000
1 1
+ Heaviside(x − 4) − Heaviside(x − 4) x
93750 125000
1 1
+ Heaviside(x − 4) x2 − x3
500000 15000000
1
+ x
1250000
Cette valeur de y satisfait à l’équation différentielle, à la condition
aux limites et à la valeur initiale.
> ode2;
3.6 Les équations différentielles : dsolve • 77
24 Dirac(1, x − 4) − 12 Dirac(1, x − 2)
+ 6 Dirac(1, x − 2) x − 6 Dirac(1, x − 4) x
+ 8 Dirac(2, x − 2) − 8 Dirac(2, x − 2) x
+ 2 Dirac(2, x − 2) x2 + 16 Dirac(2, x − 4) x
1
− 2 Dirac(2, x − 4) x2 + Dirac(3, x − 2) x3
6
+ 2 Dirac(3, x − 2) x − Dirac(3, x − 2) x2
1
− Dirac(3, x − 4) x3 − 8 Dirac(3, x − 4) x
6
+ 2 Dirac(3, x − 4) x2 − 32 Dirac(2, x − 4)
4 32
− Dirac(3, x − 2) + Dirac(3, x − 4) + 4 Dirac(x − 2)
3 3
− 4 Dirac(x − 4) = Dirac(x − 2) − Dirac(x − 4)
> simplify(%);
> bc;
{0 = 0}
> iv;
{0 = 0}
1e–06
8e–07
6e–07
4e–07
2e–07
0
0 1 2 3 4 5
x
> y := ’y’;
y := y
d2 d2
de_sys := { y(x) = z(x), z(x) = y(x)}
dx2 dx2
soln := {
y(x) = −_C1 sin(x) + _C2 ex − _C3 cos(x) + _C4 e(−x) ,
z(x) = _C1 sin(x) + _C2 ex + _C3 cos(x) + _C4 e(−x) }
Si vous résolvez le système sans spécifier de conditions supplémen-
taires, Maple produit automatiquement les constantes appropriées _C1,
. . ., _C4.
Observez encore qu’il est possible d’extraire et de définir les solutions
à l’aide des commandes eval et unapply :
> y := unapply(eval(y(x), soln), x );
> y(1);
y := y
3.7 L’organisation de Maple • 79
package[souspackage][cmd] (...)
cmd (...)
2. Activez les noms abrégés pour toutes les commandes d’un package en
utilisant la commande with.
with(package )
with(package[souspackage] )
cmd (...)
with(package, cmd )
with(package[souspackage], cmd )
cmd (...)
d
(4 x2 )
dx
Creating problem #1
d d
(4 x2 ) = 4 ( (x2 ))
dx dx
d
(4 x2 ) = 8 x
dx
Creating problem #2
3.8 Les packages Maple • 87
π π π
x cos(x) + x dx = x cos(x) dx + x dx
0 0 0
[parts , x, sin(x)]
1 x
lim (1 + )
x→∞ x
Creating problem #3
1 x 1
[rewrite, (1 + ) = e(x ln(1+ x )) ]
x
1 x 1
lim (1 + ) = lim e(x ln(1+ x ))
x→∞ x x→∞
> Hint(%);
[exp]
> Rule[%](%%);
1 x x ln(1+ x1 ))
lim (1 + ) = e(limx→∞
x→∞ x
> Hint(%);
1
[lhopital , ln(1 + )]
x
> Rule[%](%%);
3.8 Les packages Maple • 89
1 x x
lim (1 + ) = e(limx→∞ x+1
)
x→∞ x
> Hint(%);
x 1
rewrite, =
1
x+1
1+
x
> Rule[%](%%);
1 x
lim (1 + ) =e
x→∞ x
1
x
–2 –1 1 2
–1
–2
–3
–4
–5
f(x)
Thetangentatx=0
3
[0, ]
2
Vous pouvez calculer l’aire sous la courbe entre ces deux points au
moyen de sommes de Riemann.
90 • Chapitre 3: Trouver des solutions
0.3
0.2
0.1
–0.2
Area:.3768750000
f(x)
0.3
0.2
0.1
–0.2
Area:.3751171867
f(x)
> value(%);
3
8
> value(%);
3
8
Le package LinearAlgebra
En algèbre linéaire, un ensemble de vecteurs linéairement indépendants
qui engendrent l’espace vectoriel se nomme une base. Il est possible d’ex-
primer n’importe quel élément de l’espace vectoriel comme une combinai-
son linéaire des éléments de la base.
Un ensemble de vecteurs {v1 , v2 , v3 , . . . , vn } est linéairement indépen-
dant si et seulement si, lorsque
c1 v1 + c2 v2 + c3 v3 + · · · + cn vn = 0
alors
c1 = c2 = c3 = · · · = cn = 0.
92 • Chapitre 3: Trouver des solutions
c1 + 5c2 + 6c3 = 0
−c1 − 2c2 − 3c3 = 0
3c2 + 3c3 = 0
c1 − c2 = 0
b1 := [1, 0, 1, −1]
b2 := [0, 1, 1, −2]
> basis:=<b1,b2>;
1 0 1 −1
basis :=
0 1 1 −2
Le package Matlab
Le package Matlab vous permet d’appeler certaines fonctions de Matlab à
partir d’une session Maple, en supposant que Matlab soit installé sur votre
système 1 . Matlab est une abréviation de matrix laboratory (laboratoire
de matrices) et est un package de calcul numérique fort populaire, utilisé
par des ingénieurs et d’autres professionnels.
On doit d’abord établir une connexion entre les deux produits avec
> Matlab[openlink]();
Pour déterminer les valeurs et les vecteurs propres d’une matrice d’en-
tiers, on définit d’abord la matrice souhaitée avec la syntaxe de Maple.
> A := Matrix([1,2,3],[1,2,3],[2,5,6]]):
1
Il existe également un Symbolic Computation Toolbox disponible pour Matlab qui
vous permet d’appeler des commandes Maple depuis Matlab.
94 • Chapitre 3: Trouver des solutions
> P;
−.3940365889964673 −.9486832980505138 −.5567547110202646
−.3940365889964672 −2.758331802155925 10−16 −.5567547110202655
−.8303435030540421 .3162277660168383 .6164806432593667
Le package Statistics
Le package stats possède plusieurs commandes d’analyse et de mani-
pulation de données, de même que plusieurs types de graphiques utilisés
en statistique. Il contient également un grand éventail de distributions
statistiques.
stats est un exemple de package renfermant des sous-packages (sub-
packages en anglais). À l’intérieur de chaque sous-package se trouvent
plusieurs commandes groupées par fonctionnalité.
> with(stats);
marks := [64, 93, 75, 81, 45, 68, 72, 82, 76, 73]
readings :=
[.75, .75, .003, 1.01, .9125, .04, .83, 1.01, .874, .002]
qui sont équivalentes à cette liste statistique.
> readings := [ Weight(.75, 2), .003, Weight(1.01, 2),
> .9125, .04, .83, .874, .002 ];
> describe[range](marks);
45..93
> describe[range](readings);
.002..1.01
> describe[standarddeviation](readings);
.4038750456
> data_list:=transform[tallyinto](random_data,ranges);
20
15
10
–6 –4 –2 0 2 4 6
w := −x + y + 2 z
c1 := 3 x + 4 y − 3 z ≤ 23
c2 := 5 x − 4 y − 3 z ≤ 10
c3 := 7 x + 4 y + 11 z ≤ 30
true
3.9 Conclusion
Ce chapitre vous a présenté des caractéristiques fondamentales de Maple
qui vous aideront grandement à mesure que vous apprendrez de nouvelles
méthodes de résolution de problèmes plus complexes. La section 3.1 vous
a introduit aux commandes solve et fsolve de même qu’à leur utilisation
adéquate. Que vous utilisiez ou non les commandes solve, ces méthodes
s’avèreront utiles à de nombreuses reprises.
Les dernières sections du présent chapitre ont introduit les mani-
pulations, la commande solve et l’organisation de Maple et de ses bi-
bliothèques de manière à vous donner un avant-goût de son potentiel. À
ce point de votre lecture, vous ne connaissez pas encore tout à fait ce
logiciel. Vous en savez cependant suffisamment pour commencer à utiliser
Maple de manière efficace.
À votre guise, vous pouvez interrompre ici votre étude pour travailler
(ou jouer !) avec Maple.
100 • Chapitre 3: Trouver des solutions
4 Tracer des graphiques
0.5
–6 –4 –2 0 2 4 6
x
–0.5
–1
101
102 • Chapitre 4: Tracer des graphiques
f := x → 7 sin(x) + sin(7 x)
6
4
2
0 2 4 6 8 10
–2 x
–4
–6
y6
40 2 4 6 8 10
x
0 infinity
x
Vous tracez ainsi une liste contenant x-expr, y-expr, le nom et l’intervalle
du paramètre. Par exemple :
> plot( [ t^2, t^3, t=-1..1 ] );
0.5
–0.5
–1
0.5
–1 –0.5 0.5 1
–0.5
–1
0.5
–1 –0.5 0.5 1
–0.5
–1
20
18
16
14
12
10
8
6
4
2
0 0.5 1 1.5 2 2.5 3
x
20
18
16
14
12
10
8
6
4
2
012 3
x
r
y
0 x
0.5
–1 –0.5 0.5 1
–0.5
–1
0.4
0.2
–0.8–0.6–0.4–0.2 0.2 0.4 0.6 0.8
0
–0.2
–0.4
–0.6
–0.8
–1
8
6
4
2
–5 5 10
–2
–4
–6
–8
–10
0.4
0.2
–1 –0.5 0.5 1
–0.2
–0.4
0 1 2 3 4 5 6
–2
–4
Maple dessine des lignes presque verticales près d’un point de discon-
tinuité. L’option discont=true indique qu’il peut y avoir des disconti-
nuités.
> plot(f(x), x=0..3, discont=true);
250000
200000
150000
100000
50000
–4 –2 0 2 4 6
x
110 • Chapitre 4: Tracer des graphiques
7
6
5
4
y
3
2
1
–4 –2 0 2 4 6
–1 x
π
La fonction tangente possède plusieurs singularités en x = 2 + πn, où
n est un entier.
> plot( tan(x), x=-2*Pi..2*Pi );
3000
2000
1000
–6 –4 –2 2 4 6
x
4
3
y 2
1
–6 –4 –2 0 2 4 6
–1 x
–2
–3
–4
4.1 Graphiques en deux dimensions • 111
Maple dessine des lignes presque verticales près des singularités ; vous
devez donc utiliser l’option discont=true.
> plot( tan(x), x=-2*Pi..2*Pi, y=-4..4, discont=true );
4
3
y 2
1
–6 –4 –2 0 2 4 6
–1 x
–2
–3
–4
Graphiques multiples
Pour tracer plus d’une fonction dans un même graphique, il suffit de
donner à la commande plot une liste de fonctions.
> plot( [ x, x^2, x^3, x^4 ], x=-10..10, y=-10..10 );
10
8
6
y
4
2
–10 –8 –6 –4 –2 0 2 4 6 8 10
–2 x
–4
–6
–8
–10
–2 –1 0 1 2
x
–1
0.5
–2 –1 1 2
–0.5
–1
1.4
1.2
1
y0.8
0.6
0.4
0.2
0 5 10 15 20 25
–0.2 x
–0.4
0 1 2 3 4 5
–1
data_list :=
[[−2, 4], [−1, 1], [0, 0], [1, 1], [2, 4], [3, 9], [4, 16]]
> pointplot(data_list);
16
14
12
10
8
6
4
2
–2 –1 0 1 2 3 4
Par défaut, Maple ne relie pas les points par des lignes droites ; l’option
style=line oblige à tracer ces lignes. Vous pouvez également utiliser les
menus pour indiquer à Maple de tracer les lignes.
> pointplot( data_list, style=line );
16
14
12
10
8
6
4
2
–2 –1 0 1 2 3 4
3.5
2.5
1.5
1
1 1.5 2 2.5 3 3.5 4
3.4
3.2
2.8
2.6
–1 0 1 2 3 4 5 6
x
3.4
3.2
2.8
2.6
–1 0 1 2 3 4 5 6
x
φ r
0
y
x θ
0
y
x θ r
grid=[m, n ]
4.3 L’animation
Tracer des graphiques constitue une excellente manière de représenter
l’information ; cependant, des images statiques ne mettent pas toujours
en évidence certains comportements graphiques, comme la déformation
d’une balle qui rebondit.
Une animation Maple ressemble à une séquence d’images d’un film :
une suite de graphiques s’affichent rapidement l’un après l’autre. Les deux
commandes utilisées pour les animations, animate et animate3d, sont
définies dans le package plots. Souvenez-vous qu’il vous faut d’abord
entrer la commande with(plots) pour exploiter ensuite ces fonctions
sous leur forme abrégée.
x x x x
x x x x
x x x x
x x x x
–1
10 1
x t
–10 2
Les images qui suivent sont un exemple d’une animation en trois di-
mensions.
> animate3d( cos(t*x)*sin(t*y),
> x=-Pi..Pi, y=-Pi..Pi, t=1..2 );
2 2 2 2
2 2 2
–3
2 2
12
PlotofSine
1
0.5
–6 –4 –2 0 2 4 6
x
–0.5
–1
Prenez note qu’en spécifiant le titre, vous devez placer des guillemets
doubles (") aux deux extrémités du texte. Ce détail est très important.
Maple utilise des guillemets doubles pour délimiter les chaı̂nes de ca-
ractères : il considère tout ce qui apparaı̂t entre les guillemets doubles
comme du texte qu’il doit prendre tel quel. Vous pouvez spécifier la po-
lice, le style et la taille du titre au moyen de l’option titlefont. Consultez
?plot,options ou ?plot3d,options.
> with(plots):
TheSphere
L’option labels vous permet de créer des étiquettes aux axes, l’op-
tion labelsfont définit la police et le style des étiquettes et l’option
labeldirections permet de placer les étiquettes des axes verticale-
ment ou horizontalement. Remarquez que les étiquettes ne doivent pas
4.4 Annoter des graphiques • 131
3
2.5
2
time
1.5
1
0.5
2
8
0
4
velocity
0.8
height
–0.8
–1 –1
width length
1 1
0.5
–4 –2 2x 4
–0.5
–1
TheSineFunction
TheCosineFunction
0.5
–10 –8 –6 –4 –2 0 2 4 6 8 10
x
–0.5
–1
0.5
–1 –0.5 0 0.5 1
–0.5
–1
Par exemple :
> a := plot( sin(x), x=-Pi..Pi ):
> b := textplot( [ Pi/2, 1, "Local Maximum" ] ):
> c := textplot( [ -Pi/2, -1, "Local Minimum" ] ):
> display( [a,b,c] );
1 LocalMaximum
0.5
–3 –2 –1 1 2 3
x
–0.5
LocalMinimum –1
y 0.5
–1 –0.5 0 0.5 1
x
–0.5
–1
10
–1 1 2 3 4 5
–5
–10
Dans l’exemple suivant, l’axe vertical est tracé à une échelle logarith-
mique.
> logplot( 10^x, x=0..10 );
1e+10
1e+09
1e+08
1e+07
1e+06
1e+05
.1e5
.1e4
.1e3
.1e2
1. 2 4 6 8 10
x
2
1.8
1.6
1.4
1.2
1
0.8
0.6
1. 2. 4. 7. .1e2
x
Maple peut également tracer des graphiques où les deux axes pos-
sèdent des échelles logarithmiques.
> loglogplot( x^17, x=1..7 );
4.6 Quelques graphiques particuliers • 137
1e+14
1e+13
1e+12
1e+11
1e+10
1e+09
1e+08
1e+07
1e+06
1e+05
.1e5
.1e4
.1e3
.1e2
1. 2. 4. 7.
x
y 0.5
–1 –0.5 0.5 1
x
–0.5
–1
10
y 5
–10 –5 0 5 10
x
–5
–10
–4 –2 0 2 4
y 0.5
–1 –0.5 0.5 1
x
–0.5
–1
4
2
0
–2
–4
2 2
4 4
column 6 6 row
8 8
0.5
–0.5
–1
1
1 1.5 2 2.5 3
En tapant ?plots à l’invite, vous obtiendrez une liste de tous les types
de graphiques possibles dans Maple.
Placez une seconde sphère dans l’image et faites afficher les axes.
> s2 := sphere( [3/2,-1/4,1/2], 1/4, color=red):
> display( [s1, s2], axes=normal, scaling=constrained );
142 • Chapitre 4: Tracer des graphiques
–0.4 0.6
–0.20.4
0
1.3 0.2
1.4 0.4
1.5
1.6
1.7
2
1.5
1
–0.4 0.5 –0.4
–0.2 –0.2
0.2 0.2
0.4 0.4
–2
0.4 –1.5
–0.4 0.2 –1
–0.2 –0.5
–0.2 0.2
–0.4 0.4
0.6
–0.4 0.4
–0.20.2
0
0.2
1–0.2 0.4
1.5
2
2.5
3
Les côtés du dodécaèdre mentionné plus tôt dans cette section sont
tous des pentagones. Si vous élevez le point milieu de chaque penta-
gone au moyen de la commande stellate, l’objet résultant se nomme
144 • Chapitre 4: Tracer des graphiques
un dodécaèdre étoilé.
> a := stellate( dodecahedron() ):
> display( a, scaling=constrained, style=patch );
> style=patchnogrid );
1
La plupart des planches en couleurs ont été exportées et dessinées dans POV-
RayTM . La duplication exacte des images peut de ce fait s’avérer difficile.
146 • Chapitre 4: Tracer des graphiques
2. Ensemble de Mandelbrot
L’ensemble de Mandelbrot est l’un des objets mathématiques les plus
complexes en raison de sa nature cahotique. Le code de ce graphique
est disponible dans le Maple Application Center.
3. Oiseau en origami
L’oiseau en origami peut être affiché comme un simple graphique ou
comme une animation Maple. Le code de ce graphique ainsi que de
l’animation sont disponibles dans le Maple Application Center.
4. Structure conchoı̈dale
Le code de cet objet ainsi que d’autres coquillages est disponible dans
le Maple Application Center.
5. Transformation de Gauss appliquée à un tore
> sp := [rho*cos(2*Pi*t), rho*sin(2*Pi*t), 0, radius=b]:
> pc := n -> [ (rho-r*cos(2*Pi*t))*cos(2*Pi/(n+t)),
> (rho-r*cos(2*Pi*t))*sin(2*Pi/(n+t)),
> -r*sin(2*Pi*t)]:
> rho, r, b := 3, 1.1, 1:
> with(plots):
> s := spacecurve( {seq(pc(k), k=1..50)}, t=0..1, thickness=2,
> color=blue, view=[-4.4..4.4, -4.4..4.4, -2.2..2.2]):
> s2 := tubeplot( sp, t=0..1, tubepoints=20, color=green,
> view=[-4.4..4.4, -4.4..4.4, -2.2..2.2], style=PATCHNOGRID,
> lightmodel=light2 ):
> display( {s,s2} );
6. Ruban de Moebius
4.9 Conclusion • 147
7. Icosaèdre
> with(geom3d):
> icosahedron(p1, point(o, 0, 0, 0), 1):
> stellate(p2, p1, 4):
> p := draw(p2):
> q := plottools[homothety](p,3):
> plots[display]([p,q], scaling=constrained, style=patchnogrid,
> lightmodel=light4, shading=xyz, orientation=[-107,81]);
9. Bonhomme de neige
Le graphique du bonhomme de neige est une animation. Le code de
cette animation est disponible dans le Maple Application Center.
10. Fonction de deux variables en coordonnées cartésiennes
> plot3d({sin(x^2+y^2), 2*cos(x^3+y^3)}, x=-3..3, y=-3..3,
> style=patch, grid=[120, 120], axes=none, shading=zhue,
> style=patchnogrid, scaling=constrained, orientation=[50,30]);
4.9 Conclusion
Ce chapitre a présenté les capacités d’affichage graphique de Maple en
deux et trois dimensions pour des fonctions explicites, implicites et pa-
ramétriques. Les coordonnées cartésiennes, polaires, sphériques et cylin-
driques ne sont que quelques-uns des systèmes de coordonnées exploités
par Maple. De plus, vous pouvez animer un graphique et le colorier de
plusieurs manières pour vous assurer d’une bonne compréhension de sa
nature.
148 • Chapitre 4: Tracer des graphiques
eq := 4 x + 17 = 23
149
150 • Chapitre 5: L’évaluation et la simplification
Ici, vous devez soustraire 17 des deux côtés de l’équation. Pour ce faire,
il suffit de soustraire l’équation 17=17 de eq. Assurez-vous de mettre des
parenthèses autour de l’équation sans nom.
> eq - ( 17 = 17 );
4x = 6
3
x=
2
3
poly := (x + 1) (x + 2) (x + 5) (x − )
2
13 3 31
x4 + x + 5 x2 − x − 15
2 2
x y2 xy x y2
−2 + +
z (y − 1) z (y − 1) z (y − 1) z (y − 1)
y 1
−2 +
z (y − 1) z (y − 1)
5.1 Manipulations mathématiques • 151
2 sin(x) cos(x)
|x|2
ln( )
1 + |x|
> expand(%);
xy + xz + y + z
(x + 1) y + (x + 1) z
x7 + 2 x6 − 10 x5 − 12 x4 + 37 x3 + 10 x2 − 52 x + 24
152 • Chapitre 5: L’évaluation et la simplification
> % mod 3;
x7 + 2 x6 + 2 x5 + x3 + x2 + 2 x
x7 + 2 x6 + 2 x5 + x3 + x2 + 2 x
Lorsque vous utilisez Expand avec mod, Maple effectue tous les calculs
intermédiaires en arithmétique modulo. Vous pouvez également écrire vos
propres routines pour expand ; consultez la rubrique ?expand pour plus
de détails.
(1 − c) x2 + (2 − a) x + b + 1
poly := x2 + 2 y x − 3 y + y 2 x2
(1 + y 2 ) x2 + 2 y x − 3 y
y 2 x2 + (2 x − 3) y + x2
Vous pouvez regrouper les termes sur des variables ou des appels de
fonctions non évalués.
5.1 Manipulations mathématiques • 153
(cos(x) + 1 + y) sin(x)
2
2 f(x)) sin(x) − ( dx f(x)) sin(f(x))
d d
DE := ( dx
d d 2
+ sin(x) ( dx f(x)) + sin(f(x)) ( dx 2 f(x))
d
(−sin(f(x)) + sin(x)) ( dx f(x))
d 2
+ (sin(x) + sin(f(x))) ( dx 2 f(x))
Vous ne pouvez regrouper les termes sur des sommes ou des produits.
> big_expr := z*x*y + 2*x*y + z;
big _expr := z x y + 2 y x + z
z xyprod + 2 xyprod + z
(z + 2) xyprod + z
154 • Chapitre 5: L’évaluation et la simplification
(z + 2) y x + z
poly := y x + z x y + y x2 − z y x2 + x + z x
(1 − z) y x2 + ((1 + z) y + 1 + z) x
(1 + z) x + (1 + z) y x + (1 − z) y x2
La commande collect ne trie pas les termes ; pour ce faire, vous devez
utiliser la commande sort. Consultez la présente section à la page 164.
(x − 1) (x + 1)
(x + y) (x2 − y x + y 2 )
x16 − y 16
rat _expr :=
x8 − y 8
x8 + y 8
x16 − y 16
rat _expr :=
x7 − y 7
> factor(rat_expr);
poly := x5 − x4 − x3 + x2 − 2 x + 2
(x − 1) (x2 − 2) (x2 + 1)
√
Dans le prochain exemple, les coefficients incluent 2. Remarquez la
différence dans le résultat.
156 • Chapitre 5: L’évaluation et la simplification
> factor( % );
√ √ √
2 (x2 + 1) (x − 2) (x + 2) (x − 1)
poly := x4 − 5 x2 + 6
(x2 − 2) (x2 − 3)
(x + 6) (x + 4)
(x + 1) (x2 + 4 x + 1)
(x + 1) (x + 4 RootOf(_Z 2 + _Z + 1) + 4)
(x + RootOf(_Z 2 + _Z + 1))
Pour obtenir des détails sur l’algorithme utilisé, la factorisation des
polynômes multivariés ou la factorisation de polynômes sur des corps
algébriques de nombres, consultez la rubrique ?Factor.
1
2 + 2(1/3)
> rationalize( % );
2 1 (1/3) 1 (2/3)
− 2 + 2
5 5 10
x2 + 5
x + x(5/7)
> rationalize( % );
(x2 + 5)
(x(6/7) − x(12/7) − x(4/7) + x(10/7) + x(2/7) − x(8/7) + x2 ) (
x3 + x)
Le résultat de rationalize est souvent plus long que l’original.
1
sin(2 x)
2
e(2 x+y)
x(2 a)
infolevel combine := 1
x2 + 1 dx
x2 + 1
x
x 1 1
expr := + +
x+1 x x+1
x2 − y 2
expr :=
(x − y)3
x+y
(x − y)2
1
x−
expr := x
x−2
x2 − 1
x (x − 2)
x2 − 1
x2 − 2 x
x2 − 1 x2 +1
[ , e( x ) ]
x (x − 2)
(x + 1) x − x 2 x2
big _expr := sin( ) + cos( )2
x+2 −x − 2
x2 2 x2 2
sin( ) + cos( )
x+2 x+2
x25 − 1
expr :=
x−1
expr :=
cos(x)5 + sin(x)4 + 2 cos(x)2 − 2 sin(x)2 − cos(2 x)
> simplify( expr );
cos(x)4 (cos(x) + 1)
ln(3 x) + 1
ln(3) + ln(x) + 1
|x y|
xy
expr := x y z + x y + x z + y z
xy + yz + y + 1
164 • Chapitre 5: L’évaluation et la simplification
expr := x3 + y 3
siderel := x2 + y 2 = 1
y3 − x y2 + x
x3 − y x2 + y
poly := 1 + x4 − x2 + x + x3
5.1 Manipulations mathématiques • 165
x4 + x3 − x2 + x + 1
x4 + x3 − x2 + x + 1
w5 + z 4 + x3 + y 2 + x
x3 y + x2 y 2
x4 + x3 y + x2 y 2
x3 y + x2 y 2
y 2 x2 + y x3
166 • Chapitre 5: L’évaluation et la simplification
w5 + x3 + x + y 2 + z 4
Encore une fois, l’ordre dans lequel sont données les inconnues au
moment de l’appel à sort détermine l’ordonnancement.
> sort( x + x^3 + w^5 + y^2 + z^4, [x,y,z,w], plex );
x3 + x + y 2 + z 4 + w5
−1 1
I (e(I x) − (I x) )
2 e
cos(x)
sin(x)
n!
k! (n − k)!
5.1 Manipulations mathématiques • 167
1 1
x+ − 2
x−1 x
19615
59713
−I ((e(I x) )2 − 1)
(e(I x) )2 + 1
−I ((cos(x) + I sin(x))2 − 1)
(cos(x) + I sin(x))2 + 1
sin(x)
cos(x)
La commande assume
Le système d’hypothèses de Maple est un ensemble de routines permettant
de gérer les propriétés des inconnues. La commande assume permet une
meilleure simplification d’expressions symboliques, particulièrement avec
les fonctions retournant plusieurs valeurs comme les racines carrées.
> sqrt(a^2);
√
a2
a~
frac(n)
signum(b) ∞
infolevel int := 2
int/cook/nogo1:
Given Integral
Int(exp(c*x),x = 0 .. infinity)
Fits into this pattern:
Int(exp(-Ucplex*x^S1-U2*x^S2)*x^N*ln(B*x^DL)^M*cos(C1*x^R)
/((A0+A1*x^D)^P),x = t1 .. t2)
Definite integration: Can’t determine if the integral is
convergent.
Need to know the sign of --> -c
Will now try indefinite integration and then take limits.
int/indef1: first-stage indefinite integration
int/indef2: second-stage indefinite integration
int/indef2: applying derivative-divides
170 • Chapitre 5: L’évaluation et la simplification
e(c x) − 1
lim
x→∞ c
int/cook/nogo1:
Given Integral
Int(exp(x),x = 0 .. infinity)
Fits into this pattern:
Int(exp(-Ucplex*x^S1-U2*x^S2)*x^N*ln(B*x^DL)^M*cos(C1*x^R)
/((A0+A1*x^D)^P),x = t1 .. t2)
int/cook/IIntd1:
--> U must be <= 0 for converging integral
--> will use limit to find if integral is +infinity
--> or - infinity or undefined
πI
ln(ex )
x~
true
true
true
eq := ξ 2 = a~
√ √
{ξ = −a~ I}, {ξ = −I −a~}
Pour retirer des hypothèses sur une variable, il suffit d’en désaffecter
le nom. Cependant, l’expression eq renvoie toujours à a~.
> eq;
ξ 2 = a~
eq := ξ 2 = a
Puis, désaffectez a.
172 • Chapitre 5: L’évaluation et la simplification
> a := ’a’;
a := a
La commande assuming
Pour n’effectuer qu’une seule évaluation avec des hypothèses sur les noms
d’une expression, utilisez la commande assuming. Son utilisation est
équivalente à la procédure consistant à appeler la commande assume,
à évaluer l’expression, puis à retirer les hypothèses sur l’expression et ses
composantes. Cela facilite l’expérimentation de l’évaluation d’une expres-
sion sous différentes hypothèses.
> about(a);
a:
nothing known about this object
−a
> about(a);
a:
nothing known about this object
Vous pouvez évaluer une expression avec une hypothèse sur tous les
noms dans une expression :
5.3 Manipulations structurelles • 173
a b~
x ~ + ln(ey )
L := {O, R, Z, Q, H, C}
> L[3];
Choisir des éléments de listes et d’ensembles est facile, ce qui rend leur
manipulation aisée. Le concept de ce qui constitue les parties d’une ex-
pression générale est plus difficile. Cependant, plusieurs des commmandes
qui manipulent les listes et les ensembles s’appliquent également aux ex-
pressions générales.
174 • Chapitre 5: L’évaluation et la simplification
f([a, b, c])
{x2 + 2 x, x2 + 3 x + 2}
[a2 , b2 , c2 ]
Lorsque map est appelée avec plus de deux arguments, les arguments
supplémentaires sont passés à la fonction.
> map( f, [a, b, c], p, q );
[2 x + 3, 2 x + 2]
La commande map2 est étroitement liée à map. Là où map remplace
séquentiellement le premier argument d’une fonction, map2 remplace le
deuxième argument d’une fonction.
> map2( f, p, [a,b,c], q, r );
xy y xy ln(x) xy
[ , , − 2]
xz z z
Vous pouvez utiliser map2 pour obtenir la liste de toutes les dérivées
partielles d’une expression.
> map2( map, { [a,b], [c,d], [e,f] }, p, q );
{[a(p, q), b(p, q)], [c(p, q), d(p, q)], [e(p, q), f(p, q)], }
Vous pouvez même utiliser seq conjointement avec map lorsque vous
les appliquez à des sous-éléments. Ici, seq produit une suite en appliquant
la fonction f aux éléments d’un ensemble et d’une liste.
> seq( f(i), i={a,b,c} );
L := [0, 1, 2, 3, 4, 5]
[1, 0, 0, 0, 0, 0]
[1, 1, 0, 0, 0, 0]
[1, 2, 1, 0, 0, 0]
[1, 3, 3, 1, 0, 0]
[1, 4, 6, 4, 1, 0]
[1, 5, 10, 10, 5, 1]
[]
50 + y 2 + sin(x)2
Les commandes map, map2, seq, add et mul peuvent également agir
sur des expressions générales. Consultez la section Les parties d’une
expression de la page 182.
[8, π]
[2.95, sin(9)]
true
false
[8, 2.95]
P := [[2, 6], [3, 15], [5, 20], [7, 15], [11, 6], [13, 1]]
> plot( P );
20
18
16
14
12
10
8
6
4
2
2 4 6 8 10 12
Si les deux listes sont de longueur différente, zip retourne une liste
de la longueur de la plus courte.
5.3 Manipulations structurelles • 179
[a, 2 b, 3 c]
Vous pouvez spécifier un quatrième argument à zip qui lui fait retour-
ner une liste aussi longue que la plus longue des deux listes, en utilisant
le quatrième paramètre pour remplacer les valeurs manquantes.
> zip( (x,y) -> x.y, [a,b,c,d,e,f], [1,2,3], 99 );
[a, 2 b, 3 c, 99 d, 99 e, 99 f ]
[1, 18, 3, 2, 3]
[1, 2, 3, 3, 3, 4, 5, 6, 6]
[1, “apple”, x]
2
[π, 4.3, ]
3
1
[3.12, 1, ]
2
2
[sin(5), , π, 4.3]
3
5.3 Manipulations structurelles • 181
Maple ne possède pas de méthode intégrée pour trier des listes mixtes
de chaı̂nes de caractères et de nombres (sauf par adresse machine). Pour
trier une liste mixte de chaı̂nes et de nombres, vous pouvez effectuer les
opérations suivantes.
> big_list := [1,"d",3,5,2,"a","c","b",9];
list2 := [1, 3, 5, 2, 9]
list2 := [1, 2, 3, 5, 9]
eq := a2 + b2 = c2
> lhs( eq );
a2 + b2
c2
> eq := x = -2..infinity;
5.3 Manipulations structurelles • 183
eq := x = −2..∞
> lhs( eq );
> rhs( eq );
−2..∞
−2
x + sin(x)3 x − y
x (y 2 − 1 + x)
Considérez l’expression
> expr := 3 + sin(x) + 2*cos(x)^2*sin(x);
2, cos(x)2 , sin(x)
factor2 := cos(x)2
cos(x), 2
op1 := cos(x)
function
x est un symbole.
186 • Chapitre 5: L’évaluation et la simplification
symbol
> op( x );
3 * sin
x
sin ^ 2
x
cos 2
x
Les opérandes d’une liste ou d’un ensemble sont ses éléments.
> op( [a,b,c] );
a, b, c
e, f, d
5.3 Manipulations structurelles • 187
f(x)f(2)
8 sin(x) − e9
true
true
x = RootOf(_Z 6 − b2 − a _Z 5 )}}
188 • Chapitre 5: L’évaluation et la simplification
b
{{y = ,
RootOf(_Z − b2 − a _Z 5 )2
6
x = RootOf(_Z 6 − b2 − a _Z 5 )}}
Vous pouvez également choisir ou retirer des sous-expressions par
type. La commande type détermine si une expression est d’un type donné.
> type( 3+x, ‘+‘ );
true
3+x
true
Les deux RootOf contenus dans sol sont de type RootOf. Puisqu’ils
sont identiques, l’ensemble retourné par indets contient seulement un
élément.
> indets( sol, RootOf );
{RootOf(_Z 6 − b2 − a _Z 5 )}
true
Vous pouvez utiliser ceci pour trouver toutes les dérivées d’une
équation différentielle.
> DE := expand( diff( cos(y(t)+t)*sin(t*z(t)), t ) )
> + diff(x(t), t);
∂ ∂ ∂
{ x(t), y(t), z(t)}
∂t ∂t ∂t
190 • Chapitre 5: L’évaluation et la simplification
d
x(t)
dt
La substitution
Il est souvent nécessaire de substituer une valeur à une variable (en
d’autres termes, d’évaluer une expression en un point). Par exemple, pour
résoudre le problème Si f (x) = ln(sin(xecos(x) )), trouvez f (2) , vous
devez substituer la valeur 2 à x dans la dérivée. La commande diff calcule
la dérivée.
> y := ln( sin( x * exp(cos(x)) ) );
y := ln(sin(x ecos(x) ))
−0.1388047428
Vous êtes cependant limité aux sous-expressions telles que Maple les
reconnaı̂t.
> expr := a * b * c * a^b;
expr := a b c ab
a b c ab
a, b, c, ab
Le produit a*b n’est donc pas un facteur dans expr. Vous pouvez effec-
tuer la substitution a*b=3 de trois manières : résoudre la sous-expression
pour une des variables :
> subs( a=3/b, expr );
192 • Chapitre 5: L’évaluation et la simplification
3
3 c ( )b
b
3 c ab
3 c ab
expr := z sin(x2 ) + w
z sin(z) + π
3 sin(π) + w
5.3 Manipulations structurelles • 193
expr := 5x
5, x
tx
expr := cos(x)
sin(x)
f := sin(x)
1 3 1 5
t := x − x + x + O(x6 )
6 120
1 3 1 5
p := x − x + x
6 120
p_txt := “x-1/6*x^3+1/120*x^ 5”
x–1/6*x^3+1/120*x^5
1.5
1
0.5
–4 –3 –2 –1 0 1 2 3 4
–0.5 x
–1
–1.5
La commande cat concatène tous ses arguments pour créer une nou-
velle chaîne.
> ttl := cat( convert( f, string ),
> " and its Taylor approximation ",
> p_txt );
5.3 Manipulations structurelles • 195
sin(x)anditsTaylorapproximationx–1/6*x^3+1/120*x^5
1.5
1
0.5
–4 –3 –2 –1 0 1 2 3 4
–0.5 x
–1
–1.5
L := [1, 2, 5, 2, 1]
S := {1, 2, 5}
[1, 2, 5]
Niveaux d’évaluation
Dans la plupart des cas, Maple effectue une évaluation complète des noms :
lorsque vous utilisez un nom ou un symbole, le logiciel vérifie si ce nom
ou ce symbole possède une valeur assignée. Le cas échéant, Maple rem-
place le nom par la valeur trouvée. Si cette valeur possède elle-même une
valeur assignée, Maple effectue une autre substitution, et ainsi de suite de
manière récursive jusqu’à ce qu’aucune substitution ne soit possible.
> x := y;
x := y
> y := z;
y := z
> z := 5;
z := 5
5
5.4 Les règles d’évaluation • 197
x := y
> y := z;
y := z
> x;
Maple utilise l’évaluation du dernier nom pour les tableaux, les tables,
les matrices et les procédures pour conserver la représentation compacte
des entrées de tableaux non assignées (par exemple T[3]) et les com-
mandes non évaluées (par exemple sin(x)). Vous pouvez forcer une
évaluation complète en appelant explicitement la commande eval.
> eval(x);
1 2
3 4
> add2;
add2
erfi
> eval(erfi);
proc(x : :algebraic)
option‘Copyright (c) 1996 Waterloo Maple Inc.\
All rights reserved .‘;
if nargs = 1 then
error “expecting 1 argument, got %1”, nargs
elif type(x, ’complex(float )’) then evalf(’erfi ’(x))
elif x = 0 then 0
elif type(x, ’∞’) then
if type(x, ’{undefined , cx _infinity }’) then
undefined + undefined ∗ I
elif type(x, ’extended _numeric’) then x
elif type( (x), ’∞’) then ∞ + ∞ ∗ I
else CopySign(I,
(x))
end if
elif type(x, ’undefined ’) then
if type(x, ’extended _numeric’) then undefined
elif type(x, ’imaginary ’) then undefined ∗ I
else undefined + undefined ∗ I
end if
elif type(x, ‘ ∗ ‘) and member(I, {op(x)}) then
I ∗ erf(−I ∗ x)
elif type(x, ’complex(numeric)’) and csgn(x) < 0 then
− erfi(−x)
eliftype(x, ‘ ∗ ‘) and type(op(1, x), ’complex(numeric)’)
and csgn(op(1, x)) < 0then − erfi(−x)
elif type(x, ‘ + ‘) and traperror(sign(x)) = −1 then
− erfi(−x)
else ’erfi ’(x)
end if
end proc
La valeur par défaut de verboseproc est 1.
200 • Chapitre 5: L’évaluation et la simplification
Évaluation à un niveau
Les variables locales d’une procédure sont appliquées à l’évaluation à un
niveau : si vous assignez une variable locale, le résultat de l’évaluation est
la valeur la plus récemment assignée directement à cette variable.
> test:=proc()
> local x, y, z;
> x := y;
> y := z;
> z := 5;
> x;
> end proc:
> test();
x := y
> y := z;
y := z
> evaln(x);
x
5.4 Les règles d’évaluation • 201
true
i := 2
1, 4, 9, 16, 25
> i;
Emp
echer l’évaluation d’une expression
Le langage Maple supporte l’utilisation des guillemets pour retarder l’éva-
luation d’un niveau. Entourer un nom de guillemets simples (’) empêche
Maple d’évaluer celui-ci.
> i := 4;
i := 4
> i;
202 • Chapitre 5: L’évaluation et la simplification
> ’i’;
55
> i;
x := 0
> ’’’x’+1’’;
’’x’ + 1’
> %;
’x’ + 1
> %;
5.4 Les règles d’évaluation • 203
x+1
> %;
> ’p+q-i-p+3*q’;
4q − i
x := 1
> x;
> x := ’x’;
x := x
> x;
i := 4
> a[i] := 9;
a4 := 9
ai
a4
a4 := a4
true
> q;
x+1
> q := 2;
q := 2
> q := evaln(q);
q := q
true
> q;
x+y
Concaténation de noms
La concaténation est une manière de former de nouveaux noms de va-
riables basés sur d’autres noms.
> a||b;
ab
a := x
> b := 2;
206 • Chapitre 5: L’évaluation et la simplification
b := 2
> a||b;
a2
> c := 3;
c := 3
> a||b||c;
a23
a := x
> b := y+1;
b := y + 1
> y := 3;
y := 3
> new_name;
a4
Vous pouvez vous servir des noms concaténés pour assigner et créer
des expressions.
5.5 Conclusion • 207
> i := 1;
i := 1
> b||i := 0;
b1 := 0
a0 + a1 x + a2 x2 + a3 x3 + a4 x4 + a5 x5 + a6 x6 + a7 x7
+ a8 x8
Lorsque vous omettez les guillemets simples, Maple évalue a||k à ak.
> sum( a||k * x^k, k=0..8 );
ak + ak x + ak x2 + ak x3 + ak x4 + ak x5 + ak x6 + ak x7
+ ak x8
Vous pouvez également utiliser la concaténation pour former des titres
de graphiques.
5.5 Conclusion
Dans ce chapitre, vous avez vu comment effectuer plusieurs types de ma-
nipulations sur des expressions, depuis l’addition de deux équations à la
sélection de parties d’une expression générale. Cependant, les commandes
que vous avez vues ici vous permettent de transformer une expression sous
plusieurs formes, souvent celles que vous jugez les plus simples. Si tel n’est
pas le cas, vous pouvez utiliser les relations accessoires pour spécifier vos
propres règles de simplification, ou encore des hypothèses pour spécifier
des propriétés des inconnues.
Vous avez également vu que, dans la plupart des cas, Maple effectue
l’évaluation complète des variables. Il existe cependant quelques excep-
tions, comme l’évaluation du dernier nom pour certaines grandes struc-
tures de données, l’évaluation à un seul niveau des variables locales d’une
procédure ainsi que l’évaluation retardée au moyen des guillemets simples.
208 • Chapitre 5: L’évaluation et la simplification
6 Exemples tirés du calcul
différentiel
La dérivée
La prsente section illustre la signification graphique de la dérivée en tant
que pente de la droite tangente, puis montre comment déterminer l’en-
semble des points d’inflexion d’une fonction.
Définissez la fonction f : x → exp(sin(x)) de la manière suivante.
> f := x -> exp( sin(x) );
f := x → esin(x)
209
210 • Chapitre 6: Exemples tirés du calcul différentiel
x0 := 1
p0 := [1, esin(1) ]
p1 := [1 + h, esin(1+h) ]
esin(1) − esin(1+h)
m := −
h
esin(2) − esin(1)
0.162800903
(esin(1+h) − esin(1) ) (x − 1)
y − esin(1) =
h
(esin(1+h) − esin(1) ) (x − 1)
y= + esin(1)
h
(esin(1+h) − esin(1) ) (x − 1)
secant := x → + esin(1)
h
x x x x x
x x x x x
x x x x x
x x x x x
Dans la limite lorsque h tend vers zéro, la pente est donnée par
> Limit( m, h=0 );
esin(1+h) − esin(1)
lim
h→0 h
esin(1) cos(1)
Bien entendu, cette réponse est la valeur de f (x0 ). Pour vous assurer
de ceci, définissez d’abord la fonction f 1 comme étant la dérivée première
de f . Puisque f est une fonction, utilisez D. L’opérateur D calcule la dérivée
d’une fonction, alors que diff calcule la dérivée d’une expression. Pour
en savoir plus, consultez la rubrique ?operators,D.
> f1 := D(f);
f1 := x → cos(x) esin(x)
Maintenant, vous pouvez voir que f 1(x0 ) est égale à la limite ci-
dessus.
> f1(x0);
esin(1) cos(1)
6.1 Calcul différentiel élémentaire • 213
0 2 4 6 8 10
x
–1
–2
1√ 1 1√ 1
5− 5−
2 2 2
sol := arctan 2 2 √ , −arctan 2 √ + π,
−2 + 2 5 −2 + 2 5
1 1√ 1 √
arctan(− − 5, − −2 − 2 5),
2 2 2
1 1√ 1 √
arctan(− − 5, −2 − 2 5)
2 2 2
{0.6662394321, 2.475353222,
−1.570796327 + 1.061275064 I,
−1.570796327 − 1.061275064 I, }
Dans cet exemple, seules les solutions réelles sont d’intérêt. Vous pou-
vez utiliser la commande select pour choisir les constantes réelles dans
l’ensemble solution.
> infl := select( type, sol, realcons );
1√ 1 1√ 1
5− 5−
2 2 2 2
infl := arctan 2 √ , −arctan 2 √ +π
−2 + 2 5 −2 + 2 5
{0.6662394325, 2.475353222}
√
1√ 1 2 1/2
5−1/2
5− √ √
√
(1/2 5−1/2) 2
2 2 −2+2 5 1+4 √
arctan 2 √ , e
−2+2 5
,
−2 + 2 5
√
1√ 1 2 1/2
5−1/2
5− √ √
√
(1/2 5−1/2) 2
2 2 −2+2 5 1+4 √
−arctan 2 √ + π, e −2+2 5
−2 + 2 5
> evalf( % );
{[2.475353222, 1.855276958],
[0.6662394325, 1.855276958]}
Puisque la fonction f est périodique, elle possède une infinité de points
d’inflexion. Vous pouvez les obtenir tous en déplaçant horizontalement les
deux points d’inflexion ci-dessus par des multiples entiers de 2π.
1 (2) 1
f(a) + D(f )(a) (x − a) + (D )(f )(a) (x − a)2 + (D(3) )(f )(a)
2 6
1 1
(x − a)3 + (D(4) )(f )(a) (x − a)4 + (D(5) )(f )(a) (x − a)5 +
24 120
O((x − a)6 )
Vous pouvez utiliser cette formule pour calculer une approximation
polynomiale d’une fonction f près de x = a.
> f := x -> exp( sin(x) );
f := x → esin(x)
> a := Pi;
216 • Chapitre 6: Exemples tirés du calcul différentiel
a := π
1 1 1
1 − (x − π) + (x − π)2 − (x − π)4 + (x − π)5 +
2 8 15
O((x − π)6 )
Avant de tracer le graphique de l’approximation de Taylor, vous devez
convertir cette série en un polynôme.
> poly := convert( %, polynom );
1 1 1
poly := 1 − x + π + (x − π)2 − (x − π)4 + (x − π)5
2 8 15
2.5
1.5
0.5
0 2 4 6 8 10
x
1
err := (−sin(ξ) esin(ξ) + 16 cos(ξ)2 esin(ξ)
720
− 15 sin(ξ)2 esin(ξ) + 75 sin(ξ) cos(ξ)2 esin(ξ)
− 20 cos(ξ)4 esin(ξ) − 15 sin(ξ)3 esin(ξ)
+ 45 sin(ξ)2 cos(ξ)2 esin(ξ) − 15 sin(ξ) cos(ξ)4 esin(ξ)
+ cos(ξ)6 esin(ξ) )(x − π)6
Le graphique précédent indique que l’erreur (en valeur absolue) est
faible pour x compris entre 2 et 4.
> plot3d( abs( err ), x=2..4, xi=2..4,
> style=patch, axes=boxed );
0.16
0
2 2
xi x
4 4
218 • Chapitre 6: Exemples tirés du calcul différentiel
3.5
xi 3
2.5
2
2 2.5 3 3.5 4
x
1
err _x := (−sin(ξ) esin(ξ) + 16 cos(ξ)2 esin(ξ)
120
− 15 sin(ξ)2 esin(ξ) + 75 sin(ξ) cos(ξ)2 esin(ξ)
− 20 cos(ξ)4 esin(ξ) − 15 sin(ξ)3 esin(ξ)
+ 45 sin(ξ)2 cos(ξ)2 esin(ξ) − 15 sin(ξ) cos(ξ)4 esin(ξ)
+ cos(ξ)6 esin(ξ) )(x − π)5
> err_xi := diff(err, xi);
6.1 Calcul différentiel élémentaire • 219
1
err _xi := (−cos(ξ) esin(ξ) − 63 sin(ξ) cos(ξ) esin(ξ)
720
+ 91 cos(ξ)3 esin(ξ) − 210 sin(ξ)2 cos(ξ) esin(ξ)
+ 245 sin(ξ) cos(ξ)3 esin(ξ) − 35 cos(ξ)5 esin(ξ)
− 105 sin(ξ)3 cos(ξ) esin(ξ) + 105 sin(ξ)2 cos(ξ)3 esin(ξ)
− 21 sin(ξ) cos(ξ)5 esin(ξ) + cos(ξ)7 esin(ξ) )(x − π)6
Les deux dérivées partielles sont nulles au point critique.
> sol := solve( {err_x=0, err_xi=0}, {x, xi} );
sol := {x = π, ξ = ξ}
critical := {0}
1
sol := { π, arctan(RootOf(%1, index = 4),
2
RootOf(_Z 2 + RootOf(%1, index = 4)2 − 1)), arctan(
RootOf(%1, index = 1),
RootOf(_Z 2 + RootOf(%1, index = 1)2 − 1)), arctan(
RootOf(%1, index = 5),
RootOf(_Z 2 + RootOf(%1, index = 5)2 − 1)), arctan(
RootOf(%1, index = 2),
RootOf(_Z 2 + RootOf(%1, index = 2)2 − 1)), arctan(
RootOf(%1, index = 6),
RootOf(_Z 2 + RootOf(%1, index = 6)2 − 1)), arctan(
RootOf(%1, index = 3),
RootOf(_Z 2 + RootOf(%1, index = 3)2 − 1))}
%1 := −56 − 161 _Z + 129 _Z 2 + 308 _Z 3 + 137 _Z 4
+ 21 _Z 5 + _Z 6
> evalf(sol);
0.6
0.4
0.2
sol := 2.446729125
0.07333000221 (2 − π)6
sol := 3.467295314
−0.01542298119 (4 − π)6
critical :=
{0, 0.07333000221 (2 − π)6 , −0.01542298119 (4 − π)6 }
À la frontière ξ = a, l’erreur est
> B := eval( err, xi=a );
222 • Chapitre 6: Exemples tirés du calcul différentiel
1
B := − (x − π)6
240
1
B1 := − (x − π)5
40
sol := {π}
critical :=
{0, 0.07333000221 (2 − π)6 , −0.01542298119 (4 − π)6 }
À la dernière frontière, ξ = x, l’erreur est
> B := eval( err, xi=x );
1
B := (−sin(x) esin(x) + 16 cos(x)2 esin(x) − 15 sin(x)2 esin(x)
720
+ 75 sin(x) cos(x)2 esin(x) − 20 cos(x)4 esin(x)
− 15 sin(x)3 esin(x) + 45 sin(x)2 cos(x)2 esin(x)
− 15 sin(x) cos(x)4 esin(x) + cos(x)6 esin(x) )(x − π)6
Encore une fois, vous devez trouver le point où la dérivée s’annule.
> B1 := diff( B, x );
6.1 Calcul différentiel élémentaire • 223
1
B1 := (−cos(x) esin(x) − 63 sin(x) cos(x) esin(x)
720
+ 91 cos(x)3 esin(x) − 210 sin(x)2 cos(x) esin(x)
+ 245 sin(x) cos(x)3 esin(x) − 35 cos(x)5 esin(x)
− 105 sin(x)3 cos(x) esin(x) + 105 sin(x)2 cos(x)3 esin(x)
1
− 21 sin(x) cos(x)5 esin(x) + cos(x)7 esin(x) )(x − π)6 + (
120
−sin(x) esin(x) + 16 cos(x)2 esin(x) − 15 sin(x)2 esin(x)
+ 75 sin(x) cos(x)2 esin(x) − 20 cos(x)4 esin(x)
− 15 sin(x)3 esin(x) + 45 sin(x)2 cos(x)2 esin(x)
− 15 sin(x) cos(x)4 esin(x) + cos(x)6 esin(x) )(x − π)5
> sol := { solve( B1=0, x ) };
sol := {π}
0.8
0.6
0.4
0.2
2.180293062
sol := {2.180293062, π}
0.1623112756
6.1 Calcul différentiel élémentaire • 227
2.5
1.5
0.5
2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4
x
L’intégrale
L’intégrale d’une fonction peut être considérée comme une mesure de l’aire
comprise entre l’axe des x et la courbe de cette fonction. La définition
de l’intégrale de Riemann repose sur cette interprétation graphique de
l’intégrale.
> f := x -> 1/2 + sin(x);
1
f := x → + sin(x)
2
AnApproximationoftheIntegralof
f(x)=1/2+sin(x)
ontheInterval[0,10]
UsingaLeft-endpointRiemannSum
ApproximateValue:6.839071529
1.5
0.5
2 4 6 8 10
x
–0.5
–1
Area:6.845601763
f(x)
Changez output = plot pour output = sum pour calculer l’aire des
boı̂tes.
> ApproximateInt( f(x), x=0..10, method=left, partition=6,
> output=sum);
5
5 1 5
( + sin( i))
3 2 3
i=0
6.845601766
1 1 1 1
0 2 4 6 8 10 12 0 2 4 6 8 10 12 0 2 4 6 8 10 12 0 2 4 6 8 10 12
x x x x
–0.5 –0.5 –0.5 –0.5
–1 –1 –1 –1
Area:6.283185309 Area:6.283185308 Area:6.283185308 Area:6.283185311
1 1 1
0 2 4 6 8 10 12 0 2 4 6 8 10 12 0 2 4 6 8 10 12
x x x
–0.5 –0.5 –0.5
–1 –1 –1
Area:6.283185308 Area:6.283185309 Area:6.283185309
6 − cos(10)
6.839071529
> value( % );
1
x − cos(x)
2
1
F := x → x − cos(x)
2
1
x − cos(x) + 1
2
> F := unapply( %, x );
1
F := x → x − cos(x) + 1
2
1.5
0.5
0 2 4 6 8 10
x
–0.5
–1
Area:6.954499888
F(x)
f(x)
6.1 Calcul différentiel élémentaire • 231
x y (x2 − y 2 )
f := (x, y) →
x2 + y 2
> value( % );
f(0., 0.) := 0
y (x2 − y 2 ) x2 y x2 y (x2 − y 2 )
fx := (x, y) → + 2 − 2
x2 + y 2 x2 + y 2 (x2 + y 2 )2
fx(0, 0) := 0
3 1
r sin(3 θ) − r sin(5 θ)
4 4
Lorsque la distance r entre (x, y) et (0, 0) tend vers zéro, |fx (x, y) −
fx (0, 0)| tend également vers zéro.
> Limit( abs( % - fx(0,0) ), r=0 );
3 1
lim r sin(3 θ) − r sin(5 θ)
r→0 4 4
> value( % );
x (x2 − y 2 ) x y2 x y 2 (x2 − y 2 )
fy := (x, y) → − 2 − 2
x2 + y 2 x2 + y 2 (x2 + y 2 )2
fy(0, 0) := 0
x2 − y 2 x2 x2 (x2 − y 2 )
fxy := (x, y) → + 2 − 2
x2 + y 2 x2 + y 2 (x2 + y 2 )2
y2 y 2 (x2 − y 2 ) x2 y 2 (x2 − y 2 )
−2 − 2 + 8
x2 + y 2 (x2 + y 2 )2 (x2 + y 2 )3
Encore une fois, cette formule n’est pas valide à l’origine.
> fxy(0,0);
lim − 1
k→0
fxy(0, 0) := −1
x2 − y 2 x2 x2 (x2 − y 2 )
fyx := (x, y) → + 2 − 2
x2 + y 2 x2 + y 2 (x2 + y 2 )2
y2 y 2 (x2 − y 2 ) x2 y 2 (x2 − y 2 )
−2 − 2 + 8
x2 + y 2 (x2 + y 2 )2 (x2 + y 2 )3
À l’origine, vous devez utiliser la définition de la dérivée sous forme
de limite.
> Limit( ( fy(h, 0) - fy(0,0) )/h, h=0 );
lim 1
h→0
fyx(0, 0) := 1
6.2 Équations différentielles ordinaires • 235
−1 = 1
> evalb( % );
true
Les dérivées partielles mixtes sont égales seulement si elles sont conti-
nues. En traçant le graphique de fxy, on peut remarquer que cette fonc-
tion n’est pas continue en (0, 0).
> plot3d( fxy, -3..3, -3..3 );
La commande dsolve
La commande la plus utilisée pour étudier le comportement des équations
différentielles ordinaires (EDO) dans Maple est dsolve. Vous pouvez uti-
liser cet outil polyvalent pour obtenir à la fois des solutions exactes et des
solutions numériques pour un grand nombre d’EDO. La syntaxe de base
de dsolve est la suivante.
dsolve(eqns, vars )
d
eq := ( v(t)) + 2 t = 0
dt
ini := v(1) = 5
v(t) = −t2 + 6
d2
eq := ( y(x)) − y(x) = 1
dx2
d2 d
de1 := ( 2
y(t)) + 5 ( y(t)) + 6 y(t) = 0
dt dt
d2 d
de2 := 2
y(x) = (ln(y(x)) + 1) ( y(x))
dx dx
y(x)
1
{y(x) = _C1 }, d_a − x − _C2 = 0
_a ln(_a) + _C1
{y(x) = _C1 },
! _Z "#
1
y(x) = RootOf − d_f + x + _C2
_f ln(_f ) + _C1
Cependant, dans certains cas, Maple peut ne pas être en mesure de
trouver une solution explicite.
Il existe également une option implicit pour forcer Maple à donner
ses résultats sous forme implicite.
> eqn1 :=
> alpha*m*diff(x[1](t),t$2) = k*(x[2](t) - x[1](t)) + u(t);
d2
eqn1 := α m ( x1 (t)) = k (x2 (t) − x1 (t)) + u(t)
dt2
d2
eqn2 := m ( x2 (t)) = k (x1 (t) − x2 (t))
dt2
u := t → Heaviside(t − 1)
1
x2 (t) = (t2 k α + α k − 2 t k α − 2 α m
2
√
%1 (t − 1)
+ 2 α cosh( ) m + t2 k + k − 2 t k)
α$m
Heaviside(t − 1) ((1 + 2 α + α2 ) k m)
√
%1 t
α (−1 + cosh( ))
−2 α m , x1 (t) =
1+α
√
%1 (t − 1)
Heaviside(t − 1) cosh( )
− αm
k (1 + α)2
√
%1 t
α cosh( ) √ √
−2 α m + e(− α%1 m
t
) %1 t
+ e( α m ) + (
1+α
1
k Heaviside(t − 1) (1 + α) t2
2
− k Heaviside(t − 1) (1 + α) t + 2 α2 m k
1
+ Heaviside(t − 1) m + Heaviside(t − 1) α k
2
1 $
+ 2 α m k + Heaviside(t − 1) k) ((1 + α)2 k m)
2
%1 := −α m k (1 + α)
Évaluez le résultat en fixant des valeurs pour les constantes.
> ans := eval( %, {alpha=1/10, m=1, k=1} );
6.2 Équations différentielles ordinaires • 241
50
ans := {x2 (t) =
121
11 2 9 11 1 1 √ √
( t + − t + cosh( −11 100 (t − 1)))
10 10 5 5 10
2 2 1 √ √
Heaviside(t − 1) + − cosh( −11 100 t), x1 (t)
11 11 10
100 1 √ √
=− Heaviside(t − 1) cosh( −11 100 (t − 1))
121 10
2 1 √ √ √ √
− cosh( −11 100 t) + e(−1/10 −11 100 t)
11 10
√ √ 5
+ e(1/10 −11 100 t) + Heaviside(t − 1) t2
11
10 2 155
− Heaviside(t − 1) t + + Heaviside(t − 1)}
11 11 121
Vous pouvez transformer la solution précédente en deux fonctions,
y1 (t) et y2 (t), de la manière suivante. Tout d’abord, évaluez l’expression
x[1](t) en sa solution pour extraire l’expression x1 (t).
> eval( x[1](t), ans );
100 1 √ √
− Heaviside(t − 1) cosh( −11 100 (t − 1))
121 10
2 1 √ √ √ √
− cosh( −11 100 t) + e(−1/10 −11 100 t)
11 10
√ √ 5
+ e(1/10 −11 100 t) + Heaviside(t − 1) t2
11
10 2 155
− Heaviside(t − 1) t + + Heaviside(t − 1)
11 11 121
Transformez ensuite l’expression en fonction au moyen d’unapply.
> y[1] := unapply( %, t );
y1 := t →
100 1 √ √
− Heaviside(t − 1) cosh( −11 100 (t − 1))
121 10
2 1 √ √ √ √
− cosh( −11 100 t) + e(−1/10 −11 100 t)
11 10
√ √ 5
+ e(1/10 −11 100 t) + Heaviside(t − 1) t2
11
10 2 155
− Heaviside(t − 1) t + + Heaviside(t − 1)
11 11 121
242 • Chapitre 6: Exemples tirés du calcul différentiel
50
y2 := t →
121
11 2 9 11 1 1 √ √
( t + − t + cosh( −11 100 (t − 1)))
10 10 5 5 10
2 2 1 √ √
Heaviside(t − 1) + − cosh( −11 100 t)
11 11 10
Tracez maintenant les deux fonctions.
> plot( [ y[1](t), y[2](t) ], t=-3..6 );
14
12
10
8
6
4
2
–2 2 4 6
t
et
> laplace( eqn2, t, s );
{m s2 laplace(x2 (t), t, s) =
k (laplace(x1 (t), t, s) − laplace(x2 (t), t, s)),
α m s (s laplace(x1 (t), t, s) − 2) =
e(−s)
k (laplace(x2 (t), t, s) − laplace(x1 (t), t, s)) + }
s
Vous devez maintenant résoudre cet ensemble d’équations algébriques
pour les transformées de Laplace des deux fonctions x1 (t) et x2 (t).
> sol := solve( %, { laplace(x[1](t),t,s),
> laplace(x[2](t),t,s) } );
k (2 α m s2 es + 1)
sol := {laplace(x2 (t), t, s) = ,
es s3 m (k + α m s2 + α k)
(m s2 + k) (2 α m s2 es + 1)
laplace(x1 (t), t, s) = }
es s3 m (k + α m s2 + α k)
Maple a résolu le problème algébrique ; vous devez maintenant prendre
la transformée inverse de Laplace pour en extraire les fonctions x1 (t) et
x2 (t) .
> invlaplace( %, s, t );
244 • Chapitre 6: Exemples tirés du calcul différentiel
1 2
x2 (t) = k (t k α + α k − 2 t k α − 2 α m
2
√
%1 (t − 1)
+ 2 α cosh( ) m + t2 k + k − 2 t k)
α$m
Heaviside(t − 1) ((1 + α)2 k 2 )
√
%1 t
α m (−1 + cosh( ))
−2 α m /m, x1 (t) =
k (1 + α)
√
%1 (t − 1)
Heaviside(t − 1) cosh( )
− αm
k (1 + α)2
√
%1 t
α cosh( ) √ √
−2 α m + e(− α%1 m
t
) %1 t
+ e( α m ) + (
1+α
1
k Heaviside(t − 1) (1 + α) t2
2
− k Heaviside(t − 1) (1 + α) t + 2 α2 m k
1
+ Heaviside(t − 1) m + Heaviside(t − 1) α k
2
1 $
+ 2 α m k + Heaviside(t − 1) k) ((1 + α)2 k m)
2
%1 := −α m k (1 + α)
Évaluez-les en fixant des valeurs pour les constantes.
> eval( %, {alpha=1/10, m=1, k=1} );
6.2 Équations différentielles ordinaires • 245
50
{x2 (t) =
121
11 9 11 1 1 √ √
( t2 + − t + cosh( −11 100 (t − 1)))
10 10 5 5 10
2 2 1 √ √
Heaviside(t − 1) + − cosh( −11 100 t), x1 (t)
11 11 10
100 1 √ √
=− Heaviside(t − 1) cosh( −11 100 (t − 1))
121 10
2 1 √ √ √ √
− cosh( −11 100 t) + e(−1/10 −11 100 t)
11 10
√ √ 5
+ e(1/10 −11 100 t) + Heaviside(t − 1) t2
11
10 2 155
− Heaviside(t − 1) t + + Heaviside(t − 1)}
11 11 121
Comme on devait s’y attendre, on obtient la même solution que par
la méthode précédente.
d2 d
eq := 2 x ( 2
y(x)) + ( y(x)) + y(x) = 0
dx dx
√ 1 1 2 1 3 1
y(x) = _C1 x(1 − x+ x − x + x4 −
3 30 630 22680
1
x5 + O(x6 )) + _C2
1247400
1 1 3 1 1
(1 − x + x2 − x + x4 − x5 + O(x6 ))
6 90 2520 113400
Utilisez rhs pour extraire la solution ; convertissez-la ensuite en po-
lynôme.
> rhs(%);
√ 1 1 2 1 3 1 1
_C1 x(1 − x+ x − x + x4 −
3 30 630 22680 1247400
x5 + O(x6 )) + _C2
1 1 3 1 1
(1 − x + x2 − x + x4 − x5 + O(x6 ))
6 90 2520 113400
> poly := convert(%, polynom);
√
poly := _C1 x
1 1 2 1 3 1 1
(1 − x + x − x + x4 − x5 )
3 30 630 22680 1247400
1 1 3 1 1
+ _C2 (1 − x + x2 − x + x4 − x5 )
6 90 2520 113400
Vous pouvez maintenant tracer le graphique de la solution pour
différentes valeurs des constantes arbitraires _C1 et _C2.
> [ seq( _C1=i, i=0..5 ) ];
1 2 1 3 1 1
[1 − x + x − x + x4 − x5 ,
6 90 2520 113400
1 1 3 1 1
%1 + 1 − x + x2 − x + x4 − x5 ,
6 90 2520 113400
1 1 3 1 1
2 %1 + 1 − x + x2 − x + x4 − x5 ,
6 90 2520 113400
1 1 3 1 1
3 %1 + 1 − x + x2 − x + x4 − x5 ,
6 90 2520 113400
1 1 3 1 1
4 %1 + 1 − x + x2 − x + x4 − x5 ,
6 90 2520 113400
1 1 3 1 1
5 %1 + 1 − x + x2 − x + x4 − x5 ]
6 90 2520 113400
%1 :=
√ 1 1 2 1 3 1 1
x (1 − x + x − x + x4 − x5 )
3 30 630 22680 1247400
> plot( %, x=1..10 );
3
2
1 x 6
2 4 8 10
0
–1
–2
–3
–4
L’option type=numeric Bien que les méthodes des séries pour la ré-
solution des EDO soient bien comprises et adéquates pour trouver des
approximations justes de la variable dépendante, elles présentent cepen-
dant certaines limitations. Pour produire un résultat, la série résultante
doit converger ; de plus, Maple doit calculer plusieurs dérivées dans le pro-
cessus de recherche de la solution, ce qui peut s’avérer coûteux en temps
comme en mémoire. Pour ces raisons, des solveurs numériques alternatifs
ont été conçus.
Voici une équation différentielle et une condition initiale.
d
eq := x(t) ( x(t)) = t2
dt
248 • Chapitre 6: Exemples tirés du calcul différentiel
ini := x(1) = 2
[t = 1, x(t) = 2.]
> sol(0);
[t = 0, x(t) = 1.82574790049820024]
2.
[0, 1.82574790049820024]
2.8
2.6
2.4
x
2.2
2
1.8
∂
eq1 := x(t) = y(t)
∂t
∂
eq2 := y(t) = x(t) + y(t)
∂t
> sol1(0);
> sol1(1);
250 • Chapitre 6: Exemples tirés du calcul différentiel
[t = 1, x(t) = 5.58216755967155986,
y(t) = 7.82688931187210190]
La commande odeplot peut maintenant tracer y(t) en fonction de
x(t),
> odeplot( sol1, [x(t), y(t)], -3..1, labels=["x","y"] );
y 4
0 2 3 4 5 6
x
–2
–4
–4
2 –3
x t
6 1
1 (2) 1
f(0) + D(f )(0) t + (D )(f )(0) t2 + (D(3) )(f )(0) t3 +
2 6
1 1
(D(4) )(f )(0) t4 + (D(5) )(f )(0) t5 + O(t6 )
24 120
Comme exemple, considérez la loi du refroidissement de Newton :
dθ 1
= − (θ − 20), θ(0) = 100.
dt 10
En utilisant l’opérateur D, vous pouvez facilement introduire l’équa-
tion ci-dessus dans Maple.
> eq := D(theta) = -1/10*(theta-20);
1
eq := D(θ) = − θ+2
10
dev _order := 5
Vous pouvez maintenant utiliser seq pour générer une suite des déri-
vées d’ordre supérieur de theta(t).
> S := seq( (D@@(dev_order-n))(eq), n=1..dev_order );
1 1
S := (D(5) )(θ) = − (D(4) )(θ), (D(4) )(θ) = − (D(3) )(θ),
10 10
1 1
(D(3) )(θ) = − (D(2) )(θ), (D(2) )(θ) = − D(θ),
10 10
1
D(θ) = − θ + 2
10
La dérivée cinquième est une fonction de la dérivée quatrième, la
dérivée quatrième est une fonction de la dérivée troisième, et ainsi de
suite. Ainsi, si vous effectuez des substitutions par rapport à S, vous
pouvez exprimer toutes les dérivées comme des fonctions de theta. Par
exemple, le troisième élément de S est le suivant :
> S[3];
1
(D(3) )(θ) = − (D(2) )(θ)
10
1 1
(D(3) )(θ) = − θ+
1000 50
Pour effectuer cette substitution sur toutes les dérivées à la fois, uti-
lisez la commande map.
> L := map( z -> lhs(z) = eval(rhs(z), {S}), [S] );
6.2 Équations différentielles ordinaires • 253
1 1
L := [(D(5) )(θ) = (D(3) )(θ), (D(4) )(θ) = (D(2) )(θ),
100 100
1 1 1
(D(3) )(θ) = D(θ), (D(2) )(θ) = θ− ,
100 100 5
1
D(θ) = − θ + 2]
10
Vous devez évaluer les dérivées en t = 0.
> L(0);
1
[(D(5) )(θ)(0) = (D(3) )(θ)(0),
100
1
(D(4) )(θ)(0) = (D(2) )(θ)(0),
100
1 1 1
(D(3) )(θ)(0) = D(θ)(0), (D(2) )(θ)(0) = θ(0) − ,
100 100 5
1
D(θ)(0) = − θ(0) + 2]
10
Générez maintenant la série de Taylor.
> T := taylor(theta(t), t);
1 (2) 1
T := θ(0) + D(θ)(0) t + (D )(θ)(0) t2 + (D(3) )(θ)(0)
2 6
3 1 (4) 4 1
t + (D )(θ)(0) t + (D )(θ)(0) t + O(t6 )
(5) 5
24 120
Remplacez les dérivées dans la série.
> subs( op(L(0)), T );
1 1 1
θ(0) + (− θ(0) + 2) t + ( θ(0) − ) t2 +
10 200 10
1 1 1 1
(− θ(0) + 3
)t + ( θ(0) − ) t4 +
6000 300 240000 12000
1 1
(− θ(0) + ) t5 + O(t6 )
12000000 600000
Évaluez maintenant les séries aux conditions initiales et convertissez-
les en polynôme.
> eval( %, ini );
254 • Chapitre 6: Exemples tirés du calcul différentiel
2 2 1 3 1 4 1
100 − 8 t + t − t + t − t5 + O(t6 )
5 75 3000 150000
2 2 1 3 1 4 1
p := 100 − 8 t + t − t + t − t5
5 75 3000 150000
100
80
60
40
20
0 5 10 15 20 25 30
t
–20
θ(t) = 20 + 80 e(−1/10 t)
> q := rhs(%);
q := 20 + 80 e(−1/10 t)
100
80
60
40
20
0 5 10 15 20 25 30
t
–20
θ(t) =
2 2 1 3 1 4 1
100 − 8 t + t − t + t − t5 + O(t6 )
5 75 3000 150000
de :=
d2
(x7 + x3 − 3) ( dx 2 y(x)) + x ( dx y(x)) + (23 x − 17) y(x)
4 d
y(x) = DESol
d
d2 x4 ( dx _Y(x)) (23 x − 17) _Y(x)
( dx2
_Y(x)) + 7 + ,
x + x3 − 3 x7 + x3 − 3
{_Y(x)}
Vous pouvez maintenant essayer une autre méthode sur l’élément DESol
lui-même. Par exemple, trouvez une approximation sous forme de série.
> series(rhs(%), x);
17
_Y(0) + D(_Y )(0) x − _Y(0) x2 +
6
17 23
(−
D(_Y )(0) + _Y(0)) x3 +
18 18
289 23
( _Y(0) + D(_Y )(0)) x4 +
216 36
289 833
( D(_Y )(0) − _Y(0)) x5 + O(x6 )
1080 540
diff et int fonctionnent également avec DESol.
d2 d
ode1 := ( 2
y(t)) + sin(t)2 ( y(t)) + y(t) = cos(t)2
dt dt
Ici, ode est l’équation différentielle que vous souhaitez tracer, dep-var est
la variable dépendante, intervalle est le domaine de la variable indépen-
dante et ini-conds représente la liste des conditions initiales.
Voici un graphique de la fonction satisfaisant à la fois à l’équation
différentielle ode1 et aux conditions initiales ic1 ci-dessus.
> DEplot( ode1, y(t), 0..20, [ [ ic1 ] ] );
0.8
y(t) 0.6
0.4
0.2
0 5 10 15 20
t
0.8
y(t) 0.6
0.4
0.2
0 5 10 15 20
t
1.4
1.2
1
0.8
y(t)
0.6
0.4
0.2
5 10 15 20
t
d
eq1 := ( y(t)) + y(t) + x(t) = 0
dt
d
eq2 := y(t) = x(t)
dt
6.2 Équations différentielles ordinaires • 259
60
40
y
20
–40
–60
40
20
y(t) 0
–20
–40
–60 –4
–40 –2
–20
0 0
x(t) 20 2 t
40 4
60
d
eq1 := x(t) = y(t) + z(t)
dt
d
eq2 := y(t) = −y(t) − x(t)
dt
d
eq3 := z(t) = x(t) + y(t) − z(t)
dt
z 2
x
–1 –1
2
y –1
∂
eq := y(t) = −y(t) Heaviside(t − 1)
∂t
ini := y(0) = 3
3 e((−t+1) Heaviside(t−1))
f := t → 3 e((−t+1) Heaviside(t−1))
2.5
1.5
0.5
0 1 2 3 4
2.5
2
y1.5
0.5
0 1 2 3 4
t
6.2 Équations différentielles ordinaires • 263
d
eq := y(t) = −y(t) Dirac(t − 1)
dt
ini := y(0) = 3
y(t) = 3 e(−Heaviside(t−1))
f := t → 3 e(−Heaviside(t−1))
3
2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
0 1 2 3 4
[odeplot ]
3.5
y 3
2.5
2
0 1 2 3 4
t
> f(x);
1, if , 1 − x ≤ 0 and x − 2 < 0 ;
0, otherwise.
0.8
0.6
0.4
0.2
Ainsi, vous pouvez utiliser cette fonction définie par morceaux comme
coefficient.
> eq := diff(y(t),t) = 1-y(t)*f(t);
! "
∂ 1, if 1 − t ≤ 0 and t − 2 < 0 ;
eq := y(t) = 1 − y(t)
∂t 0, otherwise.
ini := y(0) = 3
y5
3
0 1 2 3 4
t
266 • Chapitre 6: Exemples tirés du calcul différentiel
La commande pdsolve
La commande pdsolve permet de résoudre plusieurs équations aux
dérivées partielles. La syntaxe de base de la commande pdsolve est la
suivante :
Ici, pde est l’équation aux dérivées partielles et var est la variable pour
laquelle on souhaite résoudre.
Voici une équation ondulatoire unidimensionnelle.
> wave := diff(u(x,t), t,t) - c^2 * diff(u(x,t), x,x);
∂2 2 ∂
2
wave := ( u(x, t)) − c ( u(x, t))
∂t2 ∂x2
−1 1
f2 := ξ → piecewise( < ξ and ξ < , 1, 0)
2 2
f := (x, t) →
2 1 1
e(−(t+x) ) + piecewise(−t + x < and t − x < , 1, 0)
2 2
Vous pouvez maintenant tracer la solution.
> plot3d( f, -8..8, 0..5, grid=[40,40] );
268 • Chapitre 6: Exemples tirés du calcul différentiel
d d2
heat := ( u(x, t)) − k ( 2 u(x, t)) = 0
dt dx
et
S := ex et +
ex
0=0
Ici, pde est l’EDP, var est la variable indépendante, ini est une courbe
paramétrique de l’espace tridimensionnel de paramètre s et intervalle est
le domaine de s.
270 • Chapitre 6: Exemples tirés du calcul différentiel
∂ ∂
pde := ( u(x, y)) + cos(2 x) ( u(x, y)) = −sin(y)
∂x ∂y
ini := [0, s, 1 + s2 ]
u(x,y)
1
–2 –2
y x
2 2
u(x,y)
1
–2 –2
y x
2 2
6.4 Conclusion • 271
u(x,y)
1
–2 –2
y x
2 2
u(x,y)
1
–2 2
x y
2 –2
6.4 Conclusion
Ce chapitre vous a démontré l’utilité de Maple lorsque vient le temps
d’étudier et de résoudre des problèmes faisant usage du calcul différentiel.
Vous avez vu comment Maple peut illustrer des concepts comme la dérivée
et les intégrales de Riemann, comment Maple vous aide à analyser le
272 • Chapitre 6: Exemples tirés du calcul différentiel
273
274 • Chapitre 7: Entrées et sorties
0 1 0
1 .5403023059 .8414709848
2 -.4161468365 .9092974268
3 -.9899924966 .1411200081
4 -.6536436209 -.7568024953
5 .2836621855 -.9589242747
6 .9601702867 -.2794154982
La commande ImportMatrix permet de lire de telles colonnes de nombres.
Utilisez ImportMatrix de la manière suivante.
Ici, nomfichier est le nom du fichier que vous souhaitez lire au moyen
d’ImportMatrix, et chaı̂ne est le caractère qui délimite les entrées. La
valeur par défaut de chaı̂ne est un caractère de tabulation représenté par
"\t". Dans le fichier data.txt, les entrées sont séparées par des espaces.
La valeur de chaı̂ne est donc " ".
> L := ImportMatrix( "data.txt", delimiter=" " );
7.1 Lire des fichiers • 275
0 1 0
1 0.5403023059 0.8414709848
2 −0.4161468365 0.9092974268
L :=
3 −0.9899924966 0.1411200081
4 −0.6536436209 −0.7568024953
5 0.2836621855 −0.9589242747
6 0.9601702867 −0.2794154982
0.8
0.6
0.4
0.2
1 2 3 4 5 6
0
–0.2
–0.4
–0.6
–0.8
−0.6536436209
> L[ 1..-1, 2 ];
1
0.5403023059
−0.4161468365
−0.9899924966
−0.6536436209
0.2836621855
0.9601702867
0.1034788321
n
(2 β)!
S := n → binomial(n, β) ( − β! β)
2β
β=1
1024937361666644598071114328769317982974
n
(2 β)!
S := n → binomial(n, β) ( − β! β)
2β
β=1
> S( 19 );
1024937361666644598071114328769317982974
Si les données sont placées dans un vecteur ou dans tout autre ob-
jet qui peut être converti au type Vector, il est possible d’utiliser la
commande ExportVector. Pour plus d’information, reportez-vous à la
rubrique ?Vector.
> L := [ 3, 3.1415, -65, 0 ];
> V := Vector(L);
7.2 Écrire des données dans un fichier • 279
3
3.1415
V :=
−65
Ici, seqnoms est une suite de noms. Remarquez que vous ne pouvez
enregistrer que des objets qui ont au préalable été nommés. La commande
save enregistre les objets dans nomfichier.m. Le .m indique que save
écrit le fichier en utilisant le format interne de Maple.
Voici quelques expressions.
> qbinomial := (n,k) -> product(1-q^i, i=n-k+1..n) /
> product(1-q^i, i=1..k );
%
n
(1 − q i )
i=n−k+1
qbinomial := (n, k) →
%k
(1 − q i )
i=1
(1 − q 7 ) (1 − q 8 ) (1 − q 9 ) (1 − q 10 )
expr :=
(1 − q) (1 − q 2 ) (1 − q 3 ) (1 − q 4 )
nexpr := (q 6 + q 5 + q 4 + q 3 + q 2 + q + 1) (q 4 + 1) (q 6 + q 3 + 1)
(q 8 + q 6 + q 4 + q 2 + 1)
Vous pouvez maintenant enregistrer ces expressions dans le fichier
qbinom.m.
> save qbinomial, expr, nexpr, "qbinom.m";
La commande efface les trois expressions de la mémoire. Ainsi, expr
s’évalue à son propre nom.
> restart:
> expr;
expr
(1 − q 7 ) (1 − q 8 ) (1 − q 9 ) (1 − q 10 )
(1 − q) (1 − q 2 ) (1 − q 3 ) (1 − q 4 )
{\frac {a}{b}}
√
1 1√ x2 + x 2 + 1 1√ √
dx = 2 ln( √ )+ 2 arctan(x 2 + 1)
4
x +1 8 x −x 2+1
2 4
1 √ √
+ 2 arctan(x 2 − 1)
4
> latex(%);
Texte
Vous pouvez enregistrer une feuille de calcul en texte en choisissant l’op-
tion Export As du menu File et Plain Text du sous-menu qui apparaı̂t.
Dans ce cas, Maple fait précéder chaque entrée du signe > et d’un espace.
Maple reproduit les symboles spéciaux comme les intégrales et les expo-
sants au moyen de caractères ; cependant, vous ne pouvez exporter les
graphiques sous forme de texte. L’exemple suivant est une portion de
feuille Maple exportée en format texte.
An Indefinite Integral
by Jane Maplefan
Calculation
Look at the integral Int(x^2*sin(x-a),x);. Notice that its
7.3 Exporter des feuilles complètes • 283
/
| 2
expr := | x sin(x - a) dx
|
/
Texte Maple
Le texte Maple n’est que du texte spécialement marqué qui conserve la
distinction entre le texte, les entrées de Maple et ses sorties. Ainsi, vous
pouvez exporter une feuille de calcul en texte Maple, envoyer le texte par
courriel et votre destinataire peut importer ce texte dans son programme
et régénérer une grande part de la structure originale de votre feuille.
En lisant ou en collant du texte, Maple traite chacune des lignes qui
commencent par un prompt Maple suivi d’un espace (> ) comme une
entrée Maple, chaque ligne qui commence avec un dièse (#) comme du
texte, et ignore toutes les autres lignes.
Vous pouvez exporter une feuille entière en texte Maple en choisissant
Export As du menu File et Maple Text dans le sous-menu qui apparaı̂t
alors. Le texte suivant est une portion d’une feuille exportée en texte
Maple.
# An Indefinite Integral
# by Jane Maplefan
# Calculation
# Look at the integral Int(x^2*sin(x-a),x);. Notice that its
# integrand, x^2*sin(x-a);, depends on the parameter a;.
# Give the integral a name so that you can refer to it later.
> expr := Int(x^2 * sin(x-a), x);
/
| 2
expr := | x sin(x - a) dx
|
/
284 • Chapitre 7: Entrées et sorties
LATEX
Vous pouvez exporter une feuille Maple en format LATEX en choisissant
Export As du menu File et LaTeX du sous-menu qui apparaı̂t. Le
fichier .tex que Maple génère est prêt à être compilé par LATEX. Toutes
les distributions de Maple incluent les fichiers de style nécessaires.
Si votre feuille contient des graphiques incorporés, Maple génère les
fichiers PostScript correspondant aux graphiques de même que le code
LATEX permettant d’inclure ces fichiers PostScript dans votre document
LATEX.
L’exemple suivant est une portion d’une feuille Maple exportée en
format LATEX.
%% Created by Maple 8.00 (IBM INTEL NT)
%% Source Worksheet: tut1.mws
%% Generated: Thu Apr 18 9:47:33 2002
\documentclass{article}
\usepackage{maple2e}
\DefineParaStyle{Author}
\DefineParaStyle{Heading 1}
\DefineParaStyle{Maple Output}
\DefineParaStyle{Maple Plot}
\DefineParaStyle{Title}
7.3 Exporter des feuilles complètes • 285
\DefineCharStyle{2D Comment}
\DefineCharStyle{2D Math}
\DefineCharStyle{2D Output}
\DefineCharStyle{Hyperlink}
\begin{document}
\begin{maplegroup}
\begin{Title}
An Indefinite Integral
\end{Title}
\begin{Author}
by Jane Maplefan
\end{Author}
\end{maplegroup}
\section{Calculation}
RTF
Vous pouvez exporter une feuille Maple en format RTF (Rich Text For-
mat ) en choisissant Export As du menu File et RTF du sous-menu
qui apparaı̂t. Le fichier .rtf généré par Maple peut être chargé dans
n’importe quel traitement de texte qui supporte le format RTF. Maple
incorpore les graphiques et les éléments mathématiques formatés sous la
forme de bitmaps inclus dans des métafichiers Windows. Les feuilles de
calcul (spreadsheets ) ne sont pas pleinement exportées, mais les cellules
visibles de même que les en-têtes de colonnes et de lignes sont exportés.
L’exemple suivant est le début d’une feuille Maple exportée en format
RTF.
{\rtf1\ansi\ansicpg1252\deff0\deflang1033
{\fonttbl
{\f0 Times New Roman}
{\f1 Symbol}
288 • Chapitre 7: Entrées et sorties
XML
Pour exporter une feuille Maple en format XML (Extensible Markup
Language), choisissez Export As du menu File, puis XML. Le fichier
.xml généré par Maple peut être chargé comme une feuille Maple tradi-
tionnelle. Les documents XML sont chargés en choisissant Open du menu
File.
Le texte suivant est un extrait d’une feuille Maple exportée en XML.
<section><exchange><para pstyle=’Normal’ prompt=’> ’><mapletext
maple-input=’true’ cstyle=’Maple Input’>a;</mapletext></para>
</exchange></section>
Lorsque votre graphique s’affiche dans une fenêtre séparée, vous pou-
vez l’imprimer par le menu File comme toute autre feuille Maple.
7.4 Imprimer des graphiques • 289
Ici, TypePilote est le pilote graphique que Maple doit utiliser, nomfichier
est le nom du fichier de sortie et options est une chaı̂ne d’options reconnues
par le pilote spécifié.
La commande suivante indique à Maple d’envoyer le graphique en
format PostScript dans le fichier myplot.ps.
> plotsetup( postscript, plotoutput="myplot.ps" );
Une fois les graphiques exportés, vous devez spécifier à Maple que les
graphiques doivent de nouveau être insérés à travers les feuilles.
> plotsetup( inline );
7.5 Conclusion
Dans ce chapitre, nous avons vu un grand nombre de possibilités d’entrées
et de sorties de Maple : comment imprimer des graphiques, comment
enregistrer et récupérer des expressions Maple individuellement, comment
lire et écrire des données numériques et comment exporter une feuille
Maple en document LATEX ou HTML.
De plus, Maple possède plusieurs commandes d’entrées et de sorties
de bas niveau comme fprintf, fscanf, writeline, readbytes, fopen et
fclose. Consultez les pages d’aide pour plus de détails.
Les pages d’aide sont en quelque sorte un manuel de référence inter-
actif. Elles sont toujours au bout des doigts lorsque vous utilisez Maple.
Tout comme un manuel de référence traditionnel, utilisez-les en étudiant
l’index ou en les cherchant une à une. En particulier, l’option de recherche
d’un texte entier est une méthode de recherche de l’information supérieure
à un index traditionnel. Les hyperliens rendent aisée la recherche de sujets
connexes.
Le but de ce livre est de donner au lecteur une bonne base de connais-
sances à partir de laquelle il pourra explorer Maple. Il se concentre donc
sur l’usage interactif du logiciel. Bien entendu, Maple est un langage com-
plet et fournit plusieurs outils de programmation. En fait, la majorité des
commandes de Maple sont enregistrées dans le langage Maple, puisque
ce langage de haut niveau est de loin supérieur aux langages de pro-
grammation traditionnels pour des tâches mathématiques. Le Guide de
programmation de Maple 8 vous introduit à la programmation sous
Maple.
8 Les maplets
En utilisant le package Maplets, vous pouvez créer des fenêtres, des boı̂tes
de dialogue et d’autres interfaces visuelles qui interagissent avec l’utilisa-
teur.
Les utilisateurs peuvent effectuer des calculs ou tracer des graphiques
de fonctions sans utiliser l’interface de la feuille de travail.
Le présent chapitre est destiné en priorité aux utilisateurs des maplets.
Son contenu peut également s’avérer utile aux programmeurs de maplets.
291
292 • Chapitre 8: Les maplets
8.2 Terminologie
maplet Une maplet est une collection d’éléments incluant, sans s’y limi-
ter, des fenêtres et leur disposition, des boı̂tes de dialogue et des actions.
Une mapplet diffère des autres fenêtres et boı̂tes de dialogue en ce qu’elle
contient elle-même des fenêtres et des boı̂tes de dialogue.
fenetre Une fenêtre est un élément d’une maplet. Une fenêtre ne doit pas
être vue comme une maplet, mais plutôt comme un élément de maplet.
Une maplet peut contenir plus d’une fenêtre, et chaque fenêtre, à son tour,
peut contenir plusieurs éléments régissant la disposition et la fonction de
cette fenêtre.
8.3 Comment démarrer le package Maplets • 293
> with(maplets[Elements]):
> my2maplet := Maplet ([
> ["Hello World #2", Button("OK", Shutdown())]
> ]):
> maplets[Display](my2maplet);
8.10 Conclusion
Pour obtenir plus d’information sur les maplets, reportez-vous à la ru-
brique ?maplets ou au Guide d’introduction à la programmation (Maple
Introductory Programming Guide), au chapitre 9.
Index
297
298 • Index
en un point, 47 factorielle, 8
et les guillemets, 201 factorisation, 157
et substitution, 193 modulo p, 157
evaln, 200 factoriser, 34, 154
forcer l’évaluation complète, feuilles
198 sauvegarder, 282
niveaux, 197 fichiers
numérique, 10, 12, 13 écrire des colonnes dans, 278
retardée, 201 lecture de colonnes depuis,
évaluer 274
des variables locales, 200 lecture de commandes de-
matrices, 197 puis, 276
procédures, 197 lecture de données depuis,
tableaux, 30, 197 274
tables, 197 fieldplot, 138
exp, 11 fonction de Heaviside, 261
Expand, 152 fonction delta de Dirac, 263
expand, 34, 150 fonctions
exporter à partir d’expressions, 51
en HTML, 285 affectation, 19
en HTML avec MathML, 286 arguments, 20
en LATEX, 284 définies par morceaux, 264
en RTF, 287 de coloriage, 124
en texte, 282 discontinues
en texte Maple, 283 tracer le graphique, 108
XML, 288 mathématiques, 15–16
ExportMatrix, 278 prolongement par continuité,
ExportVector, 278 231
expressions rationnelles
convertir en fonctions, 51 factoriser, 154
identification de, 184 forme normale factorisée, 159
indéterminées des, 188 frac, 169
non évaluées, 15, 201 fractions
opérandes des, 184 dénominateurs de, 39, 183
requête sur le contenu des, numérateurs de, 39, 183
187 partielles, 167
types des, 188 sur le même dénominateur,
37, 159
Factor, 157 fsolve, 56, 221
factor, 34
vs. solve, 65 graphiques, 101–148
Index • 301