Part 2
Part 2
DEUXIEME PARTIE
DIFFERENTS OBJETS MANIPULES
EN MAPLE
1. Constantes
Pi π
I imaginaire pur
gamma constante d'Euler
E base des log népériens
± infinity concept traité comme une constante
2. Variables système
Les variables système sont des variables globales et sont toujours assignées (elles ont des
valeurs par défaut).
3. Variables
Contrairement aux autres langages, une variable Maple peut être utilisée de façon
formelle.
II - Nombres
Tous les langages de calcul codifient les nombres sur des champs de mémoire fixes
(généralement 32 ou 64 bits), les nombres sont donc nécessairement limités en précision et en
grandeur. Maple représente les objets comme des listes, la précision des nombres peut donc
être quasi infinie (il y a tout de même une limite physique qui est la taille de la mémoire
tampon disponible).
1. Les entiers
Les conversions de base d'entiers positifs peuvent être obtenues par la fonction convert.
> convert(247,binary);
11110111
> convert(1023,hex);
3FF
2. Rationnels
Maple peut effectuer des calculs exacts avec des rationnels, même avec des termes très
grands au numérateur et au dénominateur. La simplification est automatique.
Exemples
> a:=sqrt(3);
a := 3
> a*a;
3
> b:=2^(2/3);
b:= 22/3
> b^3;
4
> sin(Pi/12)
1 1
6 1 − 3
4 3
On peut évaluer tout nombre rationnel ou réel en virgule flottante avec une précision
définie à l'aide de l'instruction evalf.
Le nombre de chiffres significatifs est celui qui est donné par la dernière valeur de la
variable Digits (variable système par défaut initialisée à 10)
> evalf(a);
1.732050808
> Digits:=30;
Digits:= 30
> evalf(a);
1.73205080756887729352744634151
> sqrt(-1);
I
Les fonctions Re, Im, abs, argument fournissent respectivement la partie réelle, imaginaire,
le module et l'argument d'un nombre complexe.
evalc(z) entraîne l'évaluation sous la forme a + Ib, a et b étant des rationnels ou des réels
exacts.
> evalc(ln(1+I));
1 1
ln(2) + Iπ
2 4
evalf (z) entraîne l'évaluation par un couple de flottants à la précision donnée par Digits.
> evalf(ln(1+I),20);
0.34657359027997265471 + 0.78539816339744830962 I
III - Expressions
+ - * / ^ ou ** pour la puissance
() mêmes parenthèses quel que soit le niveau d'imbrication
[] utilisé pour les indices et les listes
{} utilisé pour les ensembles
x
x/y/z → pour programmer un trait de fraction principal, utiliser des parenthèses
yz
(x/y)/z entraîne x/(y*z) qui est différent de x/(y/z)
&* produit matriciel
Lesopérateurs logiques sont : and or ;xor , not implies et FAIL (non vrai et pas sûrement faux)
Lesopérateurs relationnels sont : <, <=, =, <>
Attention, il n’y a pas d’opérateur > et >= , il faut programmer not < ou not <= ou
modifier le sens des tests
c) Fonctions
ln, sqrt, exp, log[10] logarithme népérien, racine carrée, exponentielle,
logarithme décimal
sin, cos, tan, ... fonctions trigonométriques
sinh, cosh, tanh, ... fonctions hyperboliques
arcsin, arccos, arctan, ... fonctions trigonométriques inverse
(attention on n'utilise pas la syntaxe mathématique pour
les fonctions hyperboliques et leurs inverses)
arcsinh, arccosh, ... fonctions hyperboliques inverses
erf, erfc fonction d'erreur (intégrale de la fonction de Gauss)
bessel fonction de Bessel
GAMMA fonction d'Euler
etc...
Une liste complète des fonctions est donnée en annexe
> Sum(1/i^6,i=1..infinity);
∞
1
∑ i6
Le signe somme est simplement affiché.
> sum(1/i^6,i=1..infinity);
1 6
Π
945
ici la somme a été calculée (si possible)
> Product(k+n,k=0..n-1);
n −1
Π (k+n)
k=0
(Aucune ambiguïté avec le nombre Π)
> product(k+n),k=0..n-1);
Γ(2n )
Γ( n )
2. Manipulation d'expressions
La simplification utilise par défaut toutes les règles de trigonométrie, les règles sur les
exponentielles et effectue les factorisations élémentaires.
Il est possible de préciser un ensemble de règles et les variables par rapport auxquelles
on veut simplifier.
> convert(expr,parfrac,x);
1 1
1+ 2 − 2
( x + 1) 2 x +1
> expand(x*(x-1)**3+2);
x4 - 3 x3 + 3 x2 - x + 2
> expand(sin(3*x));
4 sin(x) cos(x)2 - sin(x)
> expand(log((x-1)*(x+1)));
ln (x - 1) + ln (x + 1)
par contre
> log(expand((x-1)(x+1)));
ln (x2 - 1)
Exemples
> expr:=x*y+z*t;
expr:=xy+zt
> op(expr);
xy,zt
> nops(expr);
2
> op(0,expr);
+
> op(2,expr);
zt
> op(0,op(2,expr));
*
nom:= expression
assign (nom, expression)
nom:= 'nom' désassigne l'expression nom
Les fonctions evalf et evalc s'appliquent aux expressions lorsque toutes les variables
ont reçu une valeur.
Lorsque certaines variables symboliques ont été valorisées, la fonction eval calcule et
simplifie l'expression compte tenu de toutes les variables connues.
> y:= 4 :
> eval(x+x+2*(y+1));
2x + 10
> y:='y' :
> eval(x+x+2*(y+1));
2x + 2y + 2
L'instruction y:= 'y' a pour effet de désassigner y, c'est à dire y redevient une variable
symbolique.
> subs(x=z+t,x+y*cos(x));
z + t + y * cos(z + t)
> subs(u=ln(z),exp(u));
eln(z)
> simplify('');
z
Ces trois objets sont des structures comprenant plusieurs expressions (ou variables). Il
ne faut pas confondre ces trois objets, ils ont chacun leurs propriétés et leur utilité dans
Maple. Les propriétés de ces objets ne sont souvent pas compatibles, mais sont
complémentaires d'où leur utilité.
1. Séquences
a) Définition et construction
C'est une suite ordonnée d'expressions (les nombres et les variables sont également
considérés comme des expressions).
♦ Ecriture des différentes expressions dans l'ordre et séparées par des virgules
> s:=x,x^2,x-y,z-1,2,3cos(x),cos(y);
s:= x, x^2, x - y, z - 1, 2, 3 cos(x), cos(y)
> s:=$4..10;
s:= 4, 5, 6, 7, 8, 9, 10
> u:=x^i,$i=1..4;
u:= x, x2, x3, x4
> v:=x[i],$i=1..4;
x1, x2, x3, x4
> u:=seq(x^i,i=1..4);
u:= x, x2, x3, x4
> s1:=seq(cos(2*Pi/i,i=1..4);
1
s1:= 1, -1, − ,0
2
> w:=u,v;
x, x2, x3, x4, x1, x2, x3, x4
> w[2];
x2
> w[4..6];
x4, x1, x2
2. Listes
a) Définition et construction
Une liste est une séquence entourée de crochets. Une liste se différencie d'une
séquence par ses propriétés.
> l:=[a,b,c,x,y,cos(x),cos(y)] ;
l:= [a, b, c, x, y, cos(x), cos(y)]
♦ Il n'y a pas de constructeurs de listes, mais on peut facilement convertir une séquence
en liste. Il suffit de mettre la séquence entre crochets.
> v:=[s];
[4, 5, 6, 7, 8, 9, 10]
Un élément isolé peut être référencié par son rang dans la liste.
l[3] c
liste[i..j] fournit la séquence des éléments depuis le rang i jusqu'au
rang j, i et j inclus
l[3..6] c, x, y, cos(x)
op(liste) fournit la séquence de tous les éléments de la liste
nops(liste) nombre d'éléments de la liste
op(o, liste) donne le type (liste)
op(j, liste) identique à liste [j]
member(élément, liste) teste si l'élément se trouve dans la liste. C'est une fonction à
résultat booléen
has(liste, élément) test identique mais beaucoup plus approfondi. Si on traite une
liste de listes, la fonction has cherche l'élément dans toute
l'arborescence de la liste
Elle n'est pas possible directement. Il faut d'abord transformer les deux listes en
séquences (op(liste)), effectuer la concaténation des séquences, puis retransformer en liste .
> l1:=[a,b,c,d];
l1:= [a, b, c, d]
> l2:=[x,y,z,t];
l2:= [x, y, z, t]
> l3:=l1,l2;
l3:= [a, b, c, d],[x, y, z, t]
On obtient la séquence formée par les deux listes et non pas la liste concaténée
> l4:=[op(l1),op(l2)];
l4:= [a, b, c, d, x, y, z, t]
De cette façon, on obtient une seule liste qui est la concaténation des listes l1 et l3.
> l5:=[op(l1),l2];
l5:= [a, b, c, d, [x, y, z, t]]
Exemple
> l:=[s];
1 1 1 1 1
l:= [π, π, π, π, π, π]
2 3 4 5 6
> map(sin,l);
3 2 1 1
[0, 1, , , 2 5- 5 , ]
2 2 4 2
π
Le résultat est une liste des valeurs de sin(π), sin( ), etc... Les trois instructions ci-dessus
2
peuvent être combinées :
3. Ensembles
a) Définition et construction
ens:= {a, b, c, d, x, y, z}
On peut également convertir une liste ou une séquence en un ensemble. Dans cette
conversion, les éléments multiples sont supprimés.
Exemple
> l:=[x,x^2,x,x^2-1,x];
l:= [x, x2, x, x2 - 1, x]
> ens:=convert(l,set);
ens:= {x, x2 - 1, x2}
Toutes les opérations possibles sur les éléments d'une liste sont également
possibles sur les éléments d'un ensemble, mais il faut remarquer que :
♦ l'extraction d'un élément ou d'une suite d'éléments à l'aide d'un indice ou d'un champ
d'indices n'a pas de sens puisque les éléments ne sont pas rangés,
♦ les instructions l[1] ou l[2..3] donneront des éléments suivant leur rangement en
mémoire, mais celui-ci peut être modifié à chaque manipulation de l'ensemble en question,
♦ la fonction map ne s'applique pas aux éléments d'un ensemble.
L'union union
L'intersection intersect
La différence minus
Sous-ensembles on peut déterminer des sous-ensembles à l'aide du paquetage
combinat.
Un ensemble n'est pas d'emblée doté d'une structure. On peut définir des opérateurs et
des structures particulières avec des bibliothèques spécialisées.
1. Tableaux
a) Définition et déclaration
Les tableaux sont des collections d'objets rangés sous un nom unique et accessible par
des indices. Tous les objets d'un tableau ne sont pas nécessairement du même type.
Les tableaux doivent être déclarés (l'ordinateur doit réserver de la place en mémoire et
créer des pointeurs pour gérer les tableaux).
inf et sup sont les bornes du tableau. Ces bornes doivent être des entiers et inf < sup. Les
bornes peuvent être négatives, positives ou nulles.
Il n'y a pas d'algèbre sur les tableaux sauf si ceux-ci sont déclarés comme des matrices.
Les seules opérations sont la copie d'un tableau et la conversion dans d'autres types.
2. Matrices
a) définition et déclaration
Dans le sens de Maple, une matrice est un tableau bidimensionnel auquel on a associé
les propriétés des matrices (structure d'espace vectoriel).
En Maple natif (sans l'appel d'aucun paquetage), l'objet matrice ne peut pas être
déclaré, mais on peut convertir les tableaux en matrices ou les évaluer comme des matrices.
> a:=array(1..2,1..2,[[1,3],[0,-1]]);
1 3
a :=
0 −1
> m:=convert(a,matrix);
1 3
m :=
0 −1
> evalm(a);
1 3
0 −1
Pour déclarer directement une matrice, il faut avoir chargé préalablement le paquetage
linalg. La déclaration des matrices diffère légèrement de celle des tableaux parce que les
indices débutent toujours par 1. Il suffit donc de déclarer la borne supérieure.
[init] est une liste simple (pas une liste de listes) contenant les éléments de la matrice rangés
par ligne.
> with(linalg):
> m:=matrix(2,2,[1,3,0,-1]);
1 3
m :=
0 −1
> Z:=matrix(3,3,(i,j)→x^(i+j-2));
1 x x2
Z:= x x2 x3
2
x x3 x 4
3. Vecteurs
a) Définition et déclaration
Pour déclarer directement un vecteur ou pour utiliser des possibilités de calcul plus
étendues, il faut avoir préalablement chargé le paquetage d'algèbre linéaire.
> with(linalg);
> v:=vector(3,[1,1,1]);
v:= [1 1 1]
> a:=array(1..3,[1,-1,1]);
a:= [1 -1 1]
> v:=convert(a,vector):
> u:=array(1..3,[a,b,c]);
u:= [a b c]
> v:=array(1..3,[x,y,z]);
v:= [x y z]
> m:=evalm(u+lambda*v);
m:= [a + λx b + λy c + λz]
Par contre, les opérations propres aux vecteurs se trouvent dans le paquetage linalg.
Combinaison linéaire
> add(u,v,λ,µ);
[λa + µx λb + µy λc + µz]
réalise la somme λu + µv (double emploi avec evalm, mais add conserve la dimension du
résultat, même si ce résultat est le vecteur nul)
Produit scalaire
> dotprod(u,v);
ax + by + cz
> crossprod(u,v);
[bz - cy cx - az ay - bx]
> angle(u,v);
ax + by + cz
arccos
2 2 2 2 2 2
a +b +c x + y + z
norm(u, n)
> norm(u,1);
|a| + |b| + |c|
> norm(u,2);
2 2 2
a +b +c (norme Euclidienne)
> norm(u,infinity);
max (|a|,|c|,|b|) (norme de Tchebychev)
VI - Fonctions
1. Déclaration
seqvar est une variable ou une séquence de variables. L'expression doit être valide et contenir
les variables données dans la séquence. Toutes les autres variables sont considérées comme
des paramètres.
Exemple :
> f:=(x,y)→a*x**2+b*y**2+2*c*x*y;
f:= (x, y) → ax2 + by2 + 2cxy
> g:=x→a*x**2+b*y**2+2*c*x*y;
g:= x → ax2 + by2 + 2cxy
Cette fois, g est une fonction de x tandis que y est considéré comme un paramètre.
b) Notation en crochet
> w:=<exp(x**2+y**2)|x,y>;
2 2
w:= <e(x + y ) | x, y>
Cette déclaration est intéressante lorsque l'expression qui définit la fonction existe
auparavant.
> z:=unapply((x**2+y**2),x,y);
z:= (x, y) → x2 + y2
Exemples
> Y:=tan(x)*sin(x);
Y:= tan(x) sin(x)
> diff(Y,x);
(1 + tan(x)2) sin(x) + tan(x) cos(x)
> Z:=tan(x)@sin(x);
Z:= tan(x)@sin(x)
> diff(Z,x);
D1(@)(tan(x), sin(x)) (1 + tan(x)2) + D2(@)(tan(x), sin(x)) cos(x)
a) Valeurs particulières
> f(0,1);
b
> f(1,1);
a + b + 2c
> f(u,v);
au2 + bv2 + 2cuv
On peut effectuer le tracé directement sur une expression (la conversion en fonction
n'est pas nécessaire). Le tracé n'est possible que si tous les paramètres ont reçu une valeur
numérique et si le résultat du calcul de la fonction conduit à une valeur réelle.
Une ou les deux bornes peuvent être infinies.
On peut également spécifier les bornes sur y ainsi que certaines options (voir l'aide en
ligne et le cours sur les graphiques).
Pour calculer les dérivées partielles par rapport à plusieurs variables, il faut faire
figurer ces variables et éventuellement les ordres de dérivation dans le sens correct.
Exemples :
> f:=(x,y)→a*x**2+b*y**2+2*c*x*y:
> diff(f(x,y),x);
2 ax + 2 cy
> diff(f(x,y),x$2):
2a
> diff(f(x,y),x,y);
2c
d) Intégration
int (fonction, variable)
Cette instruction fournit une primitive de la fonction. La fonction peut être une simple
expression.
fournit l'intégrale de la fonction entre les bornes deb et fin. Certaines bornes peuvent être
infinies.
> limit(f(x,y),x=0);
b y2
Le calcul peut être appliqué directement à une expression (la conversion en fonction
n'est pas nécessaire).
Si l'ordre est omis dans l'instruction, il est fixé par la variable système Order. Cette
variable vaut 6 par défaut, mais peut être modifiée par l'utilisateur.
Exemple :
> taylor(exp(x**2+y**2),x=0,3);
2 2
e(y ) + e(y ) x2 + O(x4)
L'instruction series est plus générale que Taylor (series choisit la meilleure série possible
(Taylor ou Laurent)).
Exemple
> Order:=9:
> taylor(tan(sin(x))-sin(tan(x)),x=0);
1 7
x + O(x 9 )
30
O(x9) indique que les termes sont omis à partir de l'ordre 9. Les termes omis sont appelés le
"reste" du développement en série.
Noter que l'on utilise le signe d'égalité. On peut affecter une équation à une variable
(utilisation du symbole d'affectation).
> eq:=x**2-6*x+3=0;
eq:= x2 - 6x + 3 = 0
Exemples :
> eq1:=x+y+z=0;
eq1:= x + y + z = 0
> eq2:=x-2*y=3;
eq2:= x - 2y = 3
> syst:={eq1,eq2, x**2-y**2=0};
syst:= {x + y + z = 0, x - 2y = 3, x2 - y2 = 0}
3. Inéquations
Même syntaxe que pour les équations.
4. Equations différentielles
Il faut préciser la variable par rapport à laquelle est effectuée la dérivation.
ou bien
Exemple
> ed:=diff(x(t),t)=-k*x(t)^2;
Comme dans le cas des systèmes algébriques, il faut les rassembler dans un ensemble.
Exemples :
> ed1:=diff(x(t),t)=k1*(a-x(t));
∂
ed 1:=
x (t ) = k1( a − x (t ))
∂t
> ed2:=diff(y(t),t)=k2*y(t)-k1*x(t);
∂
ed 2 := y (t ) = k 2 y (t ) − k1x (t )
∂t
∂ ∂
sysd := x (t ) = k1( a − x (t )), y (t ) = k 2 y (t ) − k1x (t ), x (0) = 0, y (0) = 0
∂t ∂t
1. Utilité
L'utilité des chaînes de caractères n'est pas évidente dans un langage de calcul formel.
Toutefois, le traitement des chaînes de caractères est indispensable dans les cas suivants :
♦ Manipulation de fichiers
♦ Lecture de données dans un fichier
Maple comporte toutes les opérations classiques sur les chaînes de caractères plus des
opérations de conversions de chaînes en instructions et inversement.
2. Syntaxe
Une chaîne de caractères s'écrit entre quotes inverses. Dans les versions récentes on
peut utiliser indifféremment les cotes inversées ou les doubles cotes
`ceci est un exemple` ou “ceci est un exemple”
Le caractère \ doit être doublé pour qu'il apparaisse comme caractère. Les blancs sont
significatifs. La chaîne nulle s'écrit ``.
chaîne . objet
Objet est une autre chaîne, un nombre, une expression ou une liste :
> i:=5:
> p.i
p5
> p.(2*i+3)
p13
La fonction cat est plus puissante que l'opérateur "." parce qu'elle peut agir sur des
noms d'objets.
Exemple
> a:=`tri-`:
> b:=`nitro`:
> c:=`benzène`:
> a.b.c
abc
> cat(a,b,c)
tri-nitrobenzène
parse(chaîne)
Cette instruction transforme la chaîne de caractères en instruction Maple si elle est valide.
parse(chaîne, statement)
substring(chaîne, début..fin)
length(objet)
L'objet peut être une chaîne, un nombre ou une expression. La fonction retourne le nombre de
caractères dans la chaîne.
5. La structure TEXT
A l'impression, chaque chaîne figure sur une ligne (intéressant pour insérer du texte
dans une image)