4. 1 Introduction
1.1 D nition
maple7 est un logiciel de calcul formel ou symbolique comme Mathematica,
Axiom tandis que des langages tels que Pascal, C, C++, Java, Matlab, sont
destin s manipuler des nombres.
1.2 Acc s sur le campus
L'acquisition a t faite pour utiliser 6 licences simultan es au maximum.
C'est le gestionnaire de licence qui emp che le 7e appel au programme. A
termes, l'installation sous la forme de licences ottantes devrait permettre
aux utilisateurs de lancer l'application depuis n'importe quelle plateforme (pc
ou tx, depuis windows ou unix).
Sur les pc avec un syst me d'exploitation windows*, ce type d'acc s n cessite
d'installer l'application cliente sur les postes de travail. Ensuite l'acc s se fait
par D marrer > Programmes > Maple7 > Maple7
Dans le cas d'utilisation sous unix, l'acc s pourrait se faire depuis une session
telnet soit depuis un pc soit depuis un terminal.
L'interface graphique se pr sente sous la forme d'une fen tre avec un menu,
des barres d'outils et un espace de travail. La fen tre principale est l'espace
de travail o le signe ">" repr sente le prompt c'est dire que maple est
pr t travailler et attend qu'une instruction soit entr e ce niveau a n de
l'ex cuter. L'interface laisse la possibilit d'avoir plusieurs feuilles de travail
ouvertes dans la m me application. La navigation se fait alors de page en page.
1.3 Acc s l'aide
Documentation: Les livres p dagogiques sont sans doute nombreux. Des sup-
ports de cours existent sur le net (Mourrain & Papegay inria, Salvy).
Aide en ligne: Le menu help introduction assure une navigation de rubrique
en rubrique. L'acc s direct peut se faire partir de la ligne de commande:
>? solve acc s la fen tre d'aide relative la commande solve
>? sol acc s la liste des commandes dont le nom commence par sol
> ?solve
3
5. 2 Prise en main
2.1 Notation
Une instruction est saisie au clavier derri re le prompt ">". Le point virgule
repr sente la n de l'instruction.
> f: = x^2 + x + 1 # commentaire
L'expression x^2 + x + 1 est une formule avec le symbole x , un symbole non
valu , une variable libre.
: = symbolise l'a ectation.
f repr sente le nom de la variable qui devient ici une fonction de x.
# est un commentaire.
Le point virgule la n d'une instruction demande son ex cution et l'a chage
du r sultat
> f: = x^2 + x + 1:
tandis que les deux points la place du point virgule n'a chent pas le r sultat.
Ce qui peut tre utile en cas de r sultat interm diaire, bien qu'il y ait une
a ectation par derri re.
Une formule longue ou une indentation est appliqu e gr ce shift return qui
permet de poursuivre une ligne sans demander la n de l'instruction par une
validation avec return. Il n'y a donc pas de message d'invitation donner une
suite l'instruction. On peut ainsi mettre plusieurs instructions sur une m me
ligne.
> a: = 2: b: = 3 n'a che que la variable b et son a ectation.
> a: = 'a' b: = unassign('b') ces deux commandes permettent de remettre
z ro l'initialisation.
2.2 La feuille de calcul
Nous avons vu qu'une feuille est une interface entre l'utilisateur et le moteur de
Maple (d nomm server 1 sur le nom de la feuille), qui re oit des instructions et
les ex cute s quentiellement. Attention toutefois, car l'ordre d'ex cution n'est
pas forc ment l'ordre visuel. De plus, cela signi e qu'il n'y a rien en m moire
dans une feuille Maple: charger la feuille ne su t pas refaire les instructions.
Pour r ex cuter les instructions: Menu Edit > Execute > Worksheet
2.3 Conventions
Pour les noms de variables, toutes les lettres sont autoris es. La casse a de
l'importance.
4
6. Les chi res sont autoris s condition que le nom ne commence pas par un
chi re. De m me, le caract res surlign "_" est utilisable.
2.4 Op rateurs
Les op rateurs arithm tiques: + * - / ^
Les op rateurs logiques: < <= > >= <> and or not
> f := x^2 + x + 1
f := x2 + x+ 1
> xx=2 yy:=3 # galit et affectation
xx := 2
yy := 3
Notons au passage la notation des deux lignes d'instructions suivantes.
> u:=1/(x-1)*(x+2)
u := x+ 2
x;1
> u:=1/(x-1)/(x+2)
u := 1
(x; 1)(x+ 2)
3 Ce que peut faire Maple
Maple sait faire des manipulations alg briques sur les formules compos es
de variables, de symboles.
> f: = x + 2 Maple n'a pas besoin de savoir ce qu'est x, on suppose
que x supporte l'addition, etc.
Il sait faire des d riv es, int grales, factorisations ou r soudre des sys-
t mes d' quations.
Il sait faire des manipulations num riques, calculer des nombres, faire
des graphiques.
Il fait du calcul arbitraire sur les nombres entiers, rationnels, les poly-
n mes. Maple essaie de faire du calcul exact autant que possible.
> f:= a*x+b : solve(f,x)
;b
a
> (3/2)^100
515377520732011331036461129765621272702107522001
1267650600228229401496703205376
5
7. > 1.5^100
:40656117751018
> r:=(3/2)^100 : evalf(r)
:40656117751018
4 Ce que Maple ne peut pas faire
Pour des raisons th oriques, on ne peut pas tester l' galit z ro. Si
une expression est trop compliqu e (sin, lg) alors il n'est pas possible
d'a rmer si elle vaut 0 ou non. Par contre si cette expression est un
polyn me, alors c'est possible le polyn me nul vaut 0 tout le temps.
Notons que si la formule utilise des sin, log, etc., on peut aboutir des
formules qui ne se simpli eront jamais. Maple ne simpli e pas sponta-
n ment les expressions. On le lui demande par l'appel de la fonction
simplify().
> f := (x+1)^2 - 2*x - x^2 - 1
f := (x+ 1)2 ;2x; x2 ;1
> f:= simplify(f)
f := 0
Maple fait de son mieux pour r soudre des quations ou factoriser des
formules. S'il ne trouve pas de solution (pour solve par exemple), il ren-
voie un r sultat vide. Dans le cas d'un polyn me de degr sup rieur ou
gal 5, il n'existe pas de formule de calcul des racines. L'expression
retourn e de type RootOf(...) est toutefois exploitable par Maple.
> solve(f)
Si la taille du symbole est trop grande ou si l'algoritme est troplong, alors
c'est un chec. Il existe un bouton stop permettant d'interrompre un cal-
cul trop long. Parfois ce bouton ne su t pas et il faut tuer l'application.
Penser sauvegarder son travail!!
Il peut y avoir un probl me de pr cision num rique classique. La valeur
par d faut du nombre de chi res signi catifs est Digits: =10. Il faut
donc faire attention aux manipulations de formules et autres inversions
de matrices!
> v:=(log(640320^3+744)/Pi)^2
v := ln(262537412640768744)2
2
> Digits := 20 evalf(v)
6
8. Digits := 20
162:99999999999999999
> Digits := 40 evalf(v)
Digits := 40
163:0000000000000000000000000000232167780
5 Probl me de l' valuation des symboles
Maple value les formules le plus loin possible, c'est dire tant qu'il peut
remplacer les symboles qui ont une valeur.
> f:=x^2
f := x2
> x:=y
x := y
> f
y2
> g:=x^2
g := y2
> x:=12
x := 12
> f # f n'a pas chang
144
> g # g non plus !
y2
Il faut donc faire attention l'ordre d'a ectation des symboles: le r sultat
semble le m me, bien qu'en m moire ce soit di rent!
> a:=val b:=a c:=b a b c
a := val
b := val
c := val
val
val
val
> val:=10 a b c
val := 10
10
10
7
9. 10
> val:=c
val := 10
> b:='b' a b c val
b := b
10
b
10
10
> val:=20 a b c val
val := 20
20
b
20
20
> z:=t t:=z^2 # r cursif !
z := t
Error, recursive assignment
> t:=10 z:=t t:=z^2
l'initialisation est une solution!
t := 10
z := 10
t := 100
Pour viter ces probl mes d' valuation, il vaut mieux ne jamais donner de
valeurs num riques aux variables et utiliser la fonction de substitution.
> f:=x^2+x+1
f := x2 + x+ 1
> subs(x=3,f)
13
> f
f n'a pas chang de nature!
x2 + x+ 1
Il est possible d'e ectuer plusieurs substitutions avec de nombreuses variables
en m me temps.
8
10. > f:=x^2 + 3*a*x +1
f := x2 + 3ax+ 1
> subs({x=3,a=2},f)
28
Attention aux substitutions r cursives...
> subs({x=a^2,a=2},f)
a4 + 6a2 + 1
Il faut proc der en deux temps:
> subs(a=2,subs(x=a^2,f))
41
Information utile:
> anames() permet de savoir quelles sont les variables utilis es, y compris
celles du syst me parfois nombreuses!
> anames() :
6 Structures de donn es
6.1 Les ensembles
Un ensemble de symboles est toujours valu si les valeurs sont assign es. Un
ensemble n'est pas ordonn Maple peut donc tout moment changer l'ordre
des l ments.
> A:={a,b,x^2+1}
A := fa b x2 + 1g
> B:={A,C}
B := fC fa b x2 + 1gg
On peut appliquer les op rations classiques sur les ensembles.
> A union B
fa b C x2 + 1 fa b x2 + 1gg
> A intersect B
fg
6.2 Les listes
Une liste est un ensemble ordonn dont les l ments sont num rot s partir
de 1.
> l:= a,b,d]
l := a b d]
9
11. > l 1] # 1er l ment de la liste
a
> a:= 10,11] # un l ment peut tre une liste galement
a := 10 11]
> l
10 11] b d]
> l 1] 2] #le 2nd membre du 1er l ment de l
11
> l 4] # le 4 me l ment n'existe pas
Error, invalid subscript selector
Ajout d'un l ment une liste
> l:= op(l),e5]
l := 10 11] b d e5]
Concat nation de deux listes, par exemple une liste avec elle-m me: dans une
liste on peut avoir 2 fois le m me l ment, contrairement aux ensembles.
> l:= op(l),op(l)]
l := 10 11] b d e5 10 11] b d e5]
Une fa on de fabriquer une "liste" est d'utiliser la fonction seq (s quence) qui
produit une suite que l'on peut mettre dans une liste.
> st:=seq(n*n,n=1..10) # cr ation de la s quence d' l ments
st := 1 4 9 16 25 36 49 64 81 100
La s quence est constitu e des carr s des nombres allant de 1 10.
> l:= st] # affectation une liste
l := 1 4 9 16 25 36 49 64 81 100]
6.3 Les tables
Les tables sont des objets g n raux qui assurent la correspondance entre deux
valeurs (tableau indic ).
> t 1]:=3
t1 := 3
L'instruction pr c dente vient de cr er implicitement le tableau t et d'assigner
la valeur 3 dans le 3e l ment de ce tableau.
> t 12]:=8
t12 := 8
> op(t)
table( 1 = 3 12 = 8])
10
12. > t 6]
t6
> t 1/2]:=7
t1=2 := 7
> t (a,b,c)]:=x # table d'une suite
t10 11] b c := x
Une table repr sente un espace de stockage ou encore une mani re d'associer
une valeur une famille d'objets. C'est un tableau associatif o un indice
correspond une valeur.
La fonction op() permet d'obtenir une repr sentation de ce qu'il y a l'int rieur
d'un tableau, mais elle n'est pas tr s pratique. La fonction indices retourne la
liste des valeurs des indices et non pas le contenu.
> tbl a,b,c]]:=x tbl 1/2]:=7 indices(tbl)
tbl a b c] := x
tbl1=2 := 7
a b c]] 1
2]
La fonction entries permet d'obtenir la liste des valeurs contenues dans le
tableau.
> entries(tbl)
x] 7]
Les deux instructions suivantes sont di rentes. La premi re fait r f rence
un l ment d'un tableau 2 dimensions. Tandis que la seconde repr sente le
3 me l ment de l'objet tab 1] qui est un tableau une dimension.
> tab 1,3]:=y
tab1 3 := y
> tab 1] 3]:=y
tab13 := y
Le tableau est une structure puissante mais elle n'est pas forc ment la plus
e cace.
6.4 Les "table-array"
Il s'agit d'une table avec des indices num riques dans un certain intervalle,
que l'on appelle "array" sous Maple. L'instruction suivante d nit un array
dont les indices vont de 1 10.
> a:=array(1..10)
a := array(1::10 ])
11
13. > a 3]
a3
> a 13] # en dehors de l'intervalle
Error, 1st index, 13, larger than upper array bound 10
> a 0] # l'intervalle commence 1
Error, 1st index, 0, smaller than lower array bound 1
> b:=array(0..2, x,y,z])
b := array(0::2
(0) = x
(1) = y
(2) = z
])
Si la liste est trop courte, tous les l ments ne sont pas initialis s.
Si la liste est trop longue, Maple refuse de le faire.
> b:=array(0..2, x,y])
b := array(0::2
(0) = x
(1) = y
(2) = b2
])
> b:=array(0..2, x,y,z,t])
Error, (in index/fill) a list with 4 entries cannot be used to
initialize the range 0 .. 2
Par exemple nous proposons de d clarer un tableau puis de le remplir de z ros.
> n:= 10 # taille du tableau
n := 10
> b:=array(1..n, 0$n]) # $ est l'op rateur de r p tition
b := 0 0 0 0 0 0 0 0 0 0]
Dans l'exemple suivant, la boucle qui remplit le tableau est cach e l'int rieur
de la fonction de cr ation du tableau. On obtient la liste des valeurs i r p t es
pour la valeur d'une variable allant de 1 n (n=10).
> c:=array(1..n, i$i=1..n])
c := 1 2 3 4 5 6 7 8 9 10]
Tableaux plusieurs dimensions:
> d2:=array(1..3,1..4)
12
14. d2 := array(1::3 1::4 ])
> d2 0,0] # en dehors des bornes
Error, 1st index, 0, smaller than lower array bound 1
> d2 1,3]:=3
d21 3 := 3
> d2 2] # le tableau est deux dimensions
Error, array defined with 2 indices, used with 1 indices
> b2:=array(1..3,1..4, 0$12]) # non autoris
Error, (in index/fill) a list with 12 entries cannot be used to
initialize the range 1 .. 3
Cet exemple n cessite une liste de 3 l ments, chacun tant une liste de 4
autres l ments.
> b2:=array(1..3,1..4, 0$4]$3])
b2 :=
2
64
0 0 0 0
0 0 0 0
0 0 0 0
3
75
> b2:=array(1..4,1..3, 0$3]$4])
b2 :=
2
6664
0 0 0
0 0 0
0 0 0
0 0 0
3
7775
6.5 Les matrices
Il existe peu de di rence entre les structures array et matrice. Dans une
matrice les indices sont toujours d nis partir de 1.
La matrice est un objet alg brique ce qui n cessite de charger la biblioth que
sp ci que aux traitements d'alg bre lin aire.
> with(linalg) : # ":" est moins bavard que " "
> M := matrix(4,4, 0$16])
M :=
2
6664
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
3
7775
> p:=charpoly(M,Z) # renvoie le d terminant (M-ZI)
p := Z4
13
15. 6.6 Passage entre les structures de donn es
Lorsqu'il est possible, le passage d'une structure de donn es une autre se fait
gr ce l'instruction convert.
> convert(M,array)
2
6664
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
3
7775
> whattype(M)
symbol
> whattype(op(M)) # renvoie le type de M
array
> type(M,matrix)
true
> type(M,array) # une matrice est un array
true
Convert calcule un objet de type array partir de la matrice M. L'objet M
ne change pas de type. M peut recevoir le r sultat de la conversion (ce qui est
rare), mais cela d truira le contenu ant rieur de M.
> matrix(m,n, ])
est quivalent :
> array(1..m,1..n, ])
On peut fabriquer une array monodimensionnelle ou bidimensionnelle. Ces
objets ne sont pas des matrices.
> array(1..3, a,aa,aaa])
a aa aaa]
> b:=array(1..2,1..3, 0$3] $2])
b :=
"
0 0 0
0 0 0
#
> convert(b,matrix)
"
0 0 0
0 0 0
#
> convert(b,list) # impossible
Error, (in convert/list) can't convert array of dimension > 1
14
16. > b:=matrix(3,3, i$i=1..9])
b :=
2
64
1 2 3
4 5 6
7 8 9
3
75
> convert(b,listlist) # liste de listes
1 2 3] 4 5 6] 7 8 9]]
> convert(tbl,list)
x 7]
> convert(tbl,array) # impossible
Error, (in index/FillInitVals) unevaluated array index in assignment
Il faut veiller ne pas perdre le contenu d'un tableau ou les autres donn es
telles que les symboles importants!
> c:=x # le contenu de c est perdu !
c := x
7 Manipulations sur les fonctions
7.1 Manipulations simples
f est une fonction de x.
> f:=x^2 + a*x +1
f := x2 + ax+ 1
> df:= diff(f,x)
df := 2x+ a
> dfa:=diff(f,a)
dfa := x
> dfg:=diff(f,g) # f ne d pend pas de
> g
dfg := 0
> df2:=diff(f,x,x)
df2 := 2
> df2:=diff(f,x$2) # x$2 vaut x,x
df2 := 2
> res:=diff(f,x,a)-diff(f,a,x)
res := 0
> f4:=f**4
f4 := (x2 + ax+ 1)4
15
19. 1
3
2x+ a
(4 ;a2)(x2 + xa+ 1)3
+
10
3
0
BBBBBBBBBBB@
1
2
2x+ a
(4; a2)(x2 + xa+ 1)2 +
3
0
BB@
2x+ a
(4 ;a2)(x2 + xa+ 1) ;
4arctanh( 2x+ ap
;4 + a2)
(4 ;a2)
p
;4 + a2
1
CCA
4 ;a2
1
CCCCCCCCCCCA
4 ;a2
> int(sqrt(1/f4),x) # Maple r ussit souvent !
(;2
p
;4 + a2 x;
p
;4 + a2 a+ 4arctanh( 2x+ ap
;4 + a2)x2 + 4arctanh( 2x+ ap
;4 + a2)xa
+ 4arctanh( 2x+ ap
;4 + a2))(x2 + xa+ 1)(1
.
(x8 + 4x7 a+ 6x6 a2 + 4x6 + 4x5a3
+ 12x5a+ x4 a4 + 12x4a2 + 6x4 + 4x3 a3 + 12x3a+ 6x2 a2 + 4x2 + 4xa+ 1))
(1=2)
.
(;4 + a2)(3=2)
> int(1/f^(1/3),x) # Maple essaie quand m me !
Z 1
(x2 + xa+ 1)(1=3) dx
Il existe une di rence entre valuation num rique et valuation formelle
> int(1/f4,x=1..2)
Z 2
1
1
.
(x8 + 4x7a+ 6x6a2 + 4x6 + 4x5 a3 + 12x5a+ x4 a4 + 12x4 a2 + 6x4 + 4x3a3
+ 12x3a+ 6x2 a2 + 4x2 + 4xa+ 1)dx
> int(1/f4,x)
1
3
2x+ a
(4 ;a2)(x2 + xa+ 1)3
+
10
3
0
BBBBBBBBBBB@
1
2
2x+ a
(4; a2)(x2 + xa+ 1)2 +
3
0
BB@
2x+ a
(4 ;a2)(x2 + xa+ 1) ;
4arctanh( 2x+ ap
;4 + a2)
(4 ;a2)
p
;4 + a2
1
CCA
4 ;a2
1
CCCCCCCCCCCA
4 ;a2
18
20. > fa:=subs(a=3,f4) # vacue le pb du param tre a
fa := x8 + 12x7 + 58x6 + 144x5 + 195x4 + 144x3 + 58x2 + 12x+ 1
> v:=int(1/fa,x=1..2) # r sultat avec partie r elle
v := 10946
499125 + 8
125
p
5<(arctanh(7
5
p
5)); 8
125
p
5<(arctanh(
p
5))
> evalc(v) # valuation/simplification d'un nombre complexe
10946
499125 + 2
125
p
5ln
0
BB@
(7
5
p
5 + 1)2
(7
5
p
5 ; 1)2
1
CCA ; 2
125
p
5ln((
p
5 + 1)2
(
p
5 ;1)2)
> evalf(v)
:00043687913
Seconde solution: Maple fait de l'int gration num rique et passe par un al-
gorithme pour trouver une approximation de l'int gration.
> evalf(Int(1/fa,x=1..2))
:0004368791081
L'int gration symbolique est exacte mais il arrive parfois qu'elle soit longue et
qu'elle ne marche pas toujours.
L'int gration num rique est approch e, en g n ral plus rapide, et marche tou-
jours en principe.
Sur l'exemple pr c dent, les deux r sultats sont di rents donc il y en a au
moins un qui est faux.
Si on demande Maple > evalf(int(...,x=1..2)), on s'attend un r sultat nu-
m rique. Maple essaie de trouver une primitive: s'il choue alors il utilise la
m thode num rique. Si on demande evalf(Int(...)) alors la m thode num rique
est appliqu e directement.
En conclusion, il faut donc trouver un bon compromis entre le temps et ce que
l'on attend.
7.4 Factorisation et d composition de fractions
> factor(f4)
(x2 + xa+ 1)4
> h:=diff(1/f4,x)
19
21. h := ;(8x7 + 28x6a+ 36x5a2 + 24x5 + 20x4a3 + 60x4a + 4x3 a4 + 48x3a2 + 24x3
+ 12x2 a3 + 36x2a+ 12xa2 + 8x+ 4a)
.
(x8 + 4x7 a+ 6x6 a2 + 4x6 + 4x5a3
+ 12x5 a+ x4 a4 + 12x4a2 + 6x4 + 4x3 a3 + 12x3a+ 6x2a2 + 4x2 + 4xa+ 1)2
> h:=factor(h)
h := ;4 2x+ a
(x2 + xa+ 1)5
> numer(h)
;8x; 4a
> denom(h)
(x2 + xa+ 1)5
Il n'y a pas de r gles quant l' criture: Maple limite l'expression ne pas
toujours faire con ance Maple, ne pas s'attendre ce que le d nominateur
soit toujours positif par exemple.
7.5 D veloppements
> ty:=taylor(h,x=1,8) : # tester sur son poste...
renvoie le d veloppement de Taylor de h au voisinage de 1 l'ordre 8.
> simplify(ty)
;4 1
(2 + a)4 + 4 8 + 5a
(2 + a)5 (x; 1); 60 1 + a
(2+ a)5 (x; 1)2 + 20 6 + 16a+ 7a2
(2 + a)6 (x;1)3;
20 1+ 21a+ 14a2
(2+ a)6 (x;1)4 + 12 ;24 + 49a+ 112a2 + 42a3
(2 + a)7 (x;1)5;
28 ;19 ;4a+ 54a2 + 30a3
(2+ a)7 (x; 1)6 + 40 ;25 ; 64a+ 96a3 + 33a4 + 36a2
(2+ a)8
(x; 1)7 + O((x; 1)8)
> convert(ty,polynom) : id sans "O" tester
Parfois Maple donne un d veloppement un ordre inf rieur cause de ses
calculs interm diaires. La solution est de demander un d veloppement un
ordre sup rieur.
> qw:= subs(a=-2,h)
qw := ;4 2x;2
(x2 ;2x+ 1)5
> simplify(qw)
;8 1
(x;1)(x2 ;2x+ 1)4
> factor(qw)
20
22. ;8 1
(x; 1)9
> taylor(qw,x=1) # par d faut ordre 6
on obtient une erreur mais Maple propose la fonction series
Error, does not have a taylor expansion, try series()
> series(qw,x=1)
;8(x; 1);9
> series(u,x=1)
1
3 (x;1);1 ; 1
9 + 1
27 (x; 1); 1
81 (x;1)2 + 1
243 (x; 1)3 ; 1
729 (x;1)4 + 1
2187 (x; 1)5+
O((x;1)6)
Quelques compl ments sur les d veloppements de Taylor, limit , de Laurent
(extensions de d riv es limites).
> u2 := u*(exp(x-1)-1)
u2 := e(x;1) ;1
(x; 1)(x+ 2)
> subs(x=1,u2)
Error, numeric exception: division by zero
> limit(u2,x=1)
1
3
> limit(u2,x=1.0)
:3333333333
> subs(x=1.0,u2)
Float(1)e0:
;Float(1)
Remarquons que l' criture des param tres est invers e entre subs et limit.
Maple fait le d veloppement limit pour calculer la singularit .
Par ailleurs, il existe un paradoxe. En e et on demande le d veloppement
limit . Puis on remplace le param tre a. Le retour ne se fait pas forc ment car
les calculs interm diaires le bloquent peut- tre.
> pty:=convert(ty,polynom) : # tester
> ptz:=subs(x-1=z,pty) :
> st:=seq(coeff(ptz,z,1),i=0..degree(ptz,z))
21
23. st := %1 %1 %1 %1 %1 %1 %1 %1
%1 := ;8 1
(2+ a)5 + 20
(2+ a)4
> map(factor,st)
Error, (in factor) wrong number of arguments
On observe que les coe cients ne sont pas d nis si a=0. Maple trouve les
formules g n riques sans hypoth ses particuli res.
8 Alg bre lin aire
8.1 Matrices
Initialisation d'une matrice avec une fonction o le coe i,j est i^j:
> M:=matrix(3,3,(i,j)->x i]^j)
M :=
2
64
x1 x12 x13
x2 x22 x23
x3 x32 x33
3
75
Il faut songer charger le package linalg!
> with(linalg) :
> det(M)
x1 x22 x33 ; x1 x23 x32 ; x2 x12 x33 + x2 x13 x32 + x3 x12 x23 ; x3 x13 x22
> factor(det(M))
;x3 x2 x1 (;x2 + x1)(;x1 + x3)(x3 ; x2)
> multiply(M,M)
2
64
x12 + x12 x2 + x13 x3 x13 + x12 x22 + x13 x32 x14 + x12 x23 + x13 x33
x2 x1 + x23 + x23 x3 x12 x2 + x24 + x23 x32 x2 x13 + x25 + x23 x33
x3 x1 + x32 x2 + x34 x3 x12 + x32 x22 + x35 x13 x3 + x23 x32 + x36
3
75
> evalm(M &* M) # quivalent multiply(M,M)
2
64
x12 + x12 x2 + x13 x3 x13 + x12 x22 + x13 x32 x14 + x12 x23 + x13 x33
x2 x1 + x23 + x23 x3 x12 x2 + x24 + x23 x32 x2 x13 + x25 + x23 x33
x3 x1 + x32 x2 + x34 x3 x12 + x32 x22 + x35 x13 x3 + x23 x32 + x36
3
75
> evalm permet d' valuer la matrice avec des op rations sur les matrices.
L'op rateur &* est la multiplication de matrices.
> evalm(M**2)
22
25. > b:=matrix(3,1, 1,2,0])
b :=
2
64
1
2
0
3
75
> evalm(M &* b)
2
64
x1 + 2x12
x2 + 2x22
x3 + 2x32
3
75
> transpose(b)
h
1 2 0
i
> val:=evalm(transpose(b) &* M &* b)
val :=
h
x1 + 2x2 + 2x12 + 4x22
i
> val 1,1] # scalaire
x1 + 2x2 + 2x12 + 4x22
> val 1]
Error, array defined with 2 indices, used with 1 indices
8.2 R solution de syst mes lin aires
> xs:=linsolve(M,b)
xs :=
2
666666664
;x3 (;2x3x12 + x22 x3 + 2x13 ; x23)
x2 x1 %1
;2x1 x32 + x2 x32 + 2x13 ;x23
x2 x1 %1
;2x12 ;2x1 x3 ;x22 + x2 x3
x1 %1x2
3
777777775
%1 := ;x3 x12 + x2 x12 ; x2 x32 + x1 x32 + x22 x3 ;x22 x1
Ce sont les solutions de Mx=b en x: la m me chose que x=M(-1)b, ce qui
n'est pas faux!
> xs2:=evalm(M^(-1) &* b)
24
26. xs2 :=
2
66666664
x2 x3
%2x1
; 2x1 x3
%1x2
;x2 + x3
%2x1
+ 2(x1 + x3)
%1x2
1
%2x1
; 2
%1x2
3
77777775
%1 := ;x1 x3 + x2 x1 ;x22 + x2 x3
%2 := x2 x3 ; x2 x1 ;x1 x3 + x12
> map(simplify,evalm(xs-xs2)) # pour voir que c'est identique
2
64
0
0
0
3
75
Calcule aussi x mais c'est plus long, d'autant plus long que les symboles restent
dans la matrice!
Le calcul symbolique a ses limites: il est exact mais prend du temps.
8.3 Vecteurs propres
> z:='z' : cp:=charpoly(M,z)
cp := z3 ;z2 x33 ;x22 z2 + zx22 x33 ; zx23 x32 ;x1 z2 + x1 zx33 + x1 x22 z ; x1 x22 x33
+ x1 x23 x32 ;x2 x12 z + x2 x12 x33 ;x2 x13 x32 ; x3 x12 x23 ; x3 x13 z + x3 x13 x22
> factor(cp)
z3 ;z2 x33 ; x22 z2 + zx22 x33 ; zx23 x32 ;x1 z2 + x1 zx33 + x1 x22 z ;x1 x22 x33 + x1 x23 x32
;x2 x12 z + x2 x12 x33 ; x2 x13 x32 ; x3 x12 x23 ;x3 x13 z + x3 x13 x22
> M2:=subs({x 1]=0,x 2]=1,x 3]=t},op(M))
M2 :=
2
64
0 0 0
1 1 1
t t2 t3
3
75
> eigenvals(M2) # valeurs propres
0 1
2
+ 1
2
t3 + 1
2
p
1 ;2t3 + t6 + 4t2 1
2
+ 1
2
t3 ; 1
2
p
1 ;2t3 + t6 + 4t2
> eigenvects(M2) # vecteurs propres
1
2 + 1
2 t3 + 1
2 %1 1 f 0 1 ;1
2 + 1
2 t3 + 1
2 %1 g]
1
2 + 1
2 t3 ; 1
2 %1 1 f 0 1 ;1
2 + 1
2 t3 ; 1
2 %1 g] 0 1 f ; t
t + 1 1 ; 1
t + 1 g]
%1 :=
p
1 ; 2t3 + t6 + 4t2
Renvoie une s quence avec la valeur propre, la dimension de l'espace et l'ensemble
des vecteurs propre, soit autant de descripteurs qu'il y a de valeurs propres.
25
27. > eigenvects(diag(1,1,2))
1 2 f 1 0 0] 0 1 0]g] 2 1 f 0 0 1]g]
Par exemple, pour chercher si le syst me est stable, on cherche si les valeurs
propres sont inf rieures 1 en valeur absolue.
> linsolve(M2,b) # pas de message = pas de solution
> evalm(inverse(M2) &* b)
Error, (in inverse) singular matrix
Renvoie une erreur car il n'y a pas de solution ce syst me: il n'existe pas
de x tel que M2x=b, mais M2 est singuli re.
> zoro:=matrix(3,1, 0,0,0])
zoro :=
2
64
0
0
0
3
75
> linsolve(M2,zoro)
2
64
t11 t
; t11 (t + 1)
t11
3
75
Ce r sultat peut para tre trange mais il est correct! Il existe une in nit
de solutions proportionnelles un vecteur que Maple a choisi de noter d'une
certaine fa on.
Le probl me est de trouver x tel que M2x=0 et la somme des xi
= 1 pour i
dimensions du vecteur.
> res:=linsolve(M2,zoro)
res :=
2
64
t11 t
; t11 (t+ 1)
t11
3
75
> total:=sum(res i,1],i=1..3)
total := ; t11 t
t + 1 + t11 ; t11
t + 1
> simplify(total)
0
On ne peut pas trouver de solution telle que x1 + 2x2 + 3x3 = 1 car toute
solution est telle que x1 + 2x2 + 3x3 = 0. On essaie donc de trouver x avec
M2x=0 et x1 + 2x2 + 3x3 = 1.
> total:=res 1,1]+2*res 2,1]+3*res 3,1]
total := ; t11 t
t + 1 + 2 t11 ; 3 t11
t + 1
26
28. > solu:=evalm(res/total)
solu :=
2
66666664
; t11 t
%1(t+ 1)
t11
%1
; t11
%1(t+ 1)
3
77777775
%1 := ; t11 t
t + 1 + 2 t11 ; 3 t11
t + 1
avec x tel que x1 + 2x2 + 3x3 = 1 soit x
1 tel que x1
s
+ 2x2
s
+ 3x3
s
= 1.
> map(simplify,solu)
2
66666664
; t
t ; 1
t+ 1
t; 1
; 1
t ; 1
3
77777775
> map(factor,solu)
2
66666664
; t
t ; 1
t+ 1
t; 1
; 1
t ; 1
3
77777775
Quelques manipulations sur les matrices:
> coldim(b)
1
> rowdim(b)
3
8.4 Syst mes d' quations g n raux
> p:=product(z-i,i=1..4)
p := (z ; 1)(z ;2)(z ; 3)(z; 4)
seq et sum sont des fonctions permettant d'obtenir en une seule ligne des
r sultats parfois compliqu s.
> solve(p,z) # sous entendu p=0
1 2 3 4
> solve(p=1,z)
27
29. 5
2
; 1
2
q
5 + 4
p
2 5
2
+ 1
2
q
5 + 4
p
2 5
2
; 1
2
q
5 ;4
p
2 5
2
+ 1
2
q
5 ;4
p
2
> solve(p=-10,z)
1 + I 1; I 4 + I 4 ;I
Renvoie des nombres imaginaires.
> sol:= solve(p=-10,z)]
sol := 1+ I 1 ; I 4 + I 4 ; I]
> sol 2]
1 ; I
> p:=product(z-i,i=1..5)
p := (z ; 1)(z ;2)(z ;3)(z ; 4)(z ;5)
> sol:= solve(p=-10,z)]
sol := RootOf(%1 index = 1) RootOf(%1 index = 2) RootOf(%1 index = 3)
RootOf(%1 index = 4) RootOf(%1 index = 5)]
%1 := Z5 ;15 Z4 + 85 Z3 ;225 Z2 + 274 Z ;110
Maple n'ayant pas r ussi, on peut lui demander de faire la r solution avec des
ottants.
> fsolve(p=-10,z)
:7449115882443210833027883655874290900097
Maple a trouv une racine qui est r elle. On lui demande alors de savoir o
sont toutes les racines.
> Digits:=10 : fsolve(p=-10,z,complex)
:7449115882 2:349739682;:9370699874I 2:349739682+ :9370699874I
4:777804524;:4980352577I 4:777804524+ :4980352577I
Il renvoie des valeurs complexes mais num riques que l'ont peut v ri er gra-
phiquement.
> plot(p+10,z=0..2) # cf. Figure 1
> fsolve(p=sin(z))
1:038994656
On trouve une solution mais la question est de savoir s'il existe une autre
racine, soit par la r alisation de graphes, soit en s'aidant de l'analyse math -
matique, soit en trouvant (ou excluant) des intervalles contenant les racines.
Soit une fonction d'utilit que l'on cherche maximiser.
> ut:=-(x+2*y+2)^4-(3*x+y-2)^2
ut := ;(x+ 2y + 2)4 ;(3x+ y ;2)2
> maximize(ut,x,y)
28
30. Figure 1: Plot z
–100
–80
–60
–40
–20
0
0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
z
0
> maximize(ut,location)
0 f fy = ;8
5 x = 6
5g 0]g
Maple crit les quations du 1er ordre et les r soud. Faisons le tape par tape.
> gr:=grad(ut, x,y]) # calcul du gradient
gr := ;4(x+ 2y + 2)3 ;18x;6y + 12 ;8(x+ 2y + 2)3 ;6x;2y + 4
> sys:={gr 1]=0,gr 2]=0}
sys := f;8(x+ 2y + 2)3 ;6x; 2y + 4 = 0 ;4(x+ 2y + 2)3 ; 18x;6y + 12 = 0g
Il s'agit d'un syst me d' quations de deux l ments: on prend le 1er l ment
de gradient=0 et le second de gradient=0.
> so:=solve(sys)
29
31. so := fy = ;8
5
x = 6
5
g
> so 1]
y = ;8
5
> subs(so 1],ut)
;(x; 6
5)4 ;(3x; 18
5 )2
On peut r cup rer la valeur du 2nd l ment de la premi re solution, mais selon
les cas ce n'est pas toujours dans le m me ordre.
> a:=op(2,so 1])
a := ;8
5
Pour illustrer le propos de la con ance limit e accorder Maple quant aux
r sultats, il su t de faire l'exercice avec la fonction d'utilit suivante:
> ut:=-(x^2+2*y+2)^4-(3*x+y-2)^2
ut := ;(x2 + 2y + 2)4 ;(3x+ y ;2)2
8.5 Equations di rentielles
dsolve concerne quations di rentielles ordinaires.
pdesolve (ou pdsolve) est utilis pour les d riv es partielles.
> ode1:=diff(y(x),x)
ode1 := @
@x
y(x)
ode1 re oit ensuite toute l' quation.
> ode1:=diff(y(x),x)=k*y(x)*(1-y(x))
ode1 := @
@x
y(x) = ky(x)(1;y(x))
> dsolve(ode1,{y(x)})
y(x) = 1
1+ e(;k x) C1
Cette solution est g n rique, C1 tant la constante d'int gration.
Pour avoir une solution particuli re, il faut mentionner que y(0) a une certaine
valeur et extraire la constante de l' quation. Le premier membre de la fonction
dsolve repr sente le syst me d' quations r soudre et le second concerne les
fonctions recherch es.
> dsolve({ode1,y(0)=y0},{y(x)})
y(x) = 1
1 ; e(;k x) (;1 + C1)
C1
30
33. toto := 1
2
+ x+ 1
8
kx2 ; 1
12
kx4 ; 1
80
k2 x5 ; 1
1920
k3 x6 + 1
252
k2 x7 + 11
13440
k3 x8 + 1
17280
k4
x9 + O(x10)
> toto:=convert(toto,polynom)
toto := 1
2
+ x+ 1
8
kx2 ; 1
12
kx4 ; 1
80
k2 x5 ; 1
1920
k3 x6 + 1
252
k2 x7 + 11
13440
k3 x8
+ 1
17280 k4 x9
> subs(x=4,toto)
9
2 ; 58
3 k + 16448
315 k2 + 5408
105 k3 + 2048
135 k4
Ces deux m thodes -solution g n rique et d veloppement limit - sont des m -
thodes formelles.
Passons maintenant la m thode num rique:
> k:=0.1
> lo:=dsolve({ode1,y(0)=1/2},{y(x)},type=numeric)
k := :1
lo := proc(rkf45 x) ::: end proc
Le r sultat de cet appel est une proc dure.
> lo(1)
x = 1: y(x) = :524979187477936592]
> lo(2)
x = 2: y(x) = :549833997184993926]
> lo(0)
x = 0: y(x) = :50000000000000]
> Digits:=20
Digits := 20
> lo(1.0)
x = 1:0 y(x) = :524979195325058768]
> lo1:=subs(k=2,lo) # ne marche pas
lo1 := lo
> k:=0.1 lo(1.0) # marche... mais...
k := :1
x = 1:0 y(x) = :524979195325058768]
> logode:=subs(k=0.1,ode1)
logode := @
@x
y(x) = :1y(x)(1;y(x))
32
34. > lo:=dsolve({subs(k=0.1,ode1),y(0)=1/2},{y(x)},type=numeric)
lo := proc(rkf45 x) ::: end proc
> with(plots) : # biblioth que des fonctions graphiques volu es
> curvs:=seq(dsolve({logode,y(0)=i/10},
> {y(x)},type=numeric),i=1..9)
curvs := proc(rkf45 x) ::: end proc proc(rkf45 x) ::: end proc
proc(rkf45 x) ::: end proc proc(rkf45 x) ::: end proc
proc(rkf45 x) ::: end proc proc(rkf45 x) ::: end proc
proc(rkf45 x) ::: end proc proc(rkf45 x) ::: end proc
proc(rkf45 x) ::: end proc
> odeplot n'accepte pas une liste de courbes, il faut extraire la 1i re :
> odeplot(curvs 1],x=0..100) # cf. Figure 2
Figure 2: Plot 1 seule courbe
0.2
0.4
0.6
0.8
1
y
0 20 40 60 80 100
x
33
37. > dsolve({eq3,eq4},{x(t),y(t)})
fx(t) = ;2 t+ C2
; C1 + t2 + 2t C2 + C22g fy(t) = 1
2 ( @
@t
x(t)); 1
2 x(t)2g]
> eq5:=diff(y(t),t)=x(t)*y(t)^2
eq5 := @
@t
y(t) = x(t)y(t)2
> dsolve({eq3,eq5},{x(t),y(t)})
2
4
(
x(t) = RootOf ;
Z Z RootOf(;e Z a2 ;4 C1 + 4Ei(1 ; Z))
4 + RootOf(;e Z a2 ;4 C1 + 4Ei(1 ; Z)) a2 d a + t + C2
!)
fy(t) = 1
2 ( @
@t
x(t)) ; 1
2 x(t)2g
3
5
En rajoutant des conditions initiales et la liste des proc dures, on obtient:
> ff:=dsolve({eq3,eq5,x(0)=1,y(0)=1},{x(t),y(t)},
> type=numeric,output=listprocedure)
:= t = (proc(t) ::: end proc) x(t) = (proc(t) ::: end proc )
y(t) = (proc(t) ::: end proc)]
> fx:=subs(ff,x(t))
fx := proc(t) ::: end proc
> fy:=subs(ff,y(t))
fy := proc(t) ::: end proc
> fx(0.0) fy(0.0)
> fx(1.0) fy(1.0)
1:
1:
Error, (in fx) cannot evaluate the solution further right of
.43053336, probably a singularity
Error, (in fy) cannot evaluate the solution further right of .43053336
> odeplot(ff,t=0..0.5) # cf. Figure 4
Warning, cannot compute solution further right of
.43053336275796050028
Le graphique appara t dans la feuille de calcul, pour le faire appara tre dans
une fen tre, il faut passer par la commande interface (sur unix mettre plot-
device=X11). Tous les graphiques sont mis dans une fen tre part, chaque
graphique tant dans sa propre fen tre.
9 Graphiques
> f:=-(x+2*y+1)^4-(x+3*y-3)^2
36
38. Figure 4: Plot t
2
4
6
8
10
12
x
0 0.1 0.2 0.3 0.4
t
f := ;(x+ 2y + 1)4 ; (x+ 3y ; 3)2
> plot3d(f,x=-2..2,y=-2..2,axes=boxed) # cf. Figure 5
Dans une fen tre graphique le menu contextuel du bouton droit de la sou-
ris est utilisable. Par exemple, une option des styles patches et contours fait
appara tre les lignes de niveaux.
> ?plot options] : # acc s aux options
La commande suivante permet de dessiner le gradient de la fonction.
> animate propose de superposer les graphiques sous la forme d'une animation.
> gradplot(f,x=-2..2,y=-2..2,grid= 10,10],arrows=SLIM)
gradplot(;(x+ 2y + 1)4 ;(x+ 3y ;3)2 x = ;2::2 y = ;2::2 grid = 10 10]
arrows = SLIM)
> implicitplot(f=-10,x=-2..2,y=-2..2,grid= 50,50])
37
39. Figure 5: Plot 3d
–2
–1
0
1
2
x
–2
–1
0
1
2
y
–2000
–1500
–1000
–500
0
implicitplot(;(x+ 2y + 1)4 ;(x+ 3y ;3)2 = ;10 x = ;2::2 y = ;2::2 grid = 50 50])
Par d faut la pr cision de lissage est donn e par le param tre grid= 25,25].
Il faut veiller choisir les bonnes dimensions du graphique.
> f:=x*x+cos(x)-x*y^3
f := x2 + cos(x);xy3
> plot(f,x=-1..1,y=-10..10) # utiliser plot3d
Plotting error, empty plot
38
40. 10 Programmation
10.1 Tests et conditions
> if a=1 then
> a*a
> else
> a-1
> fi
a; 1
> if a=1 then
> b:=a*a
> elif a=2 then
> b:=a
> else
> b:= a-1
> fi
b := a;1
> if a=1 then
> a*a
> else
> if b=1 then
> b:=0
> fi
> fi
10.2 Boucles
> s:='s' : n:=10 s:=0
> for i from 1 to n
> do s:= s+ i*i
> od:
n := 10
s := 0
> s
385
> s:='s' : # r cursif
> for i from 1 to n
> do s:= s+ i*i
> od
s := s+ 4
Error, too many levels of recursion
Construction d'une r currence:
> for i from 1 to n
> do v i]:=v i-1]+ i*i
> od
v1 := v0 + 1
39
41. v2 := v0 + 5
v3 := v0 + 14
v4 := v0 + 30
v5 := v0 + 55
v6 := v0 + 91
v7 := v0 + 140
v8 := v0 + 204
v9 := v0 + 285
v10 := v0 + 385
> op(v)
table( 1 = v0 + 1 2 = v0 + 5 3 = v0 + 14 4 = v0 + 30 5 = v0 + 55 6 = v0 + 91 7 = v0 + 140
8 = v0 + 204 9 = v0 + 285
10 = v0 + 385
])
> sum(j*j,j=1..N)
1
3 (N + 1)3 ; 1
2 (N + 1)2 + 1
6 N + 1
6
> factor(sum(j*j,j=1..N))
1
6 N (N + 1)(2N + 1)
La boucle descendante pr sentera un incr ment n gatif. Une boucle s'incr mente
tant que c'est inf rieur la borne (ou sup rieur si c'est une boucle descen-
dante).
> for i from 1 to 9 by 2
> do v i]:=v i-1]+i^3
> od
v1 := v0 + 1
v3 := v0 + 32
v5 := v0 + 155
v7 := v0 + 434
v9 := v0 + 933
> for i in 4, 7, 12] do toto i]:=i*i od
toto4 := 16
toto7 := 49
toto12 := 144
> a:='a' : b:='b' : # r initialisation
> l:= a,b,c] # quelle que soit la liste, ensemble, etc.
> for i in l do l2:= op(l2),i*i] od # initialisation d'une liste
vide
l := a b c]
40
42. l2 := ]
l2 := a2]
l2 := a2 b2]
l2 := a2 b2 c2]
> seq(l i]^2,i=1..nops(l))]
a2 b2 c2]
La fonction nops correspond au nombre d' l ments de la liste.
> for i in l
> do l2:= op(l2),i^2] # concat nation par ajout l'existant
> od
l2 := a2 b2 c2 a2]
l2 := a2 b2 c2 a2 b2]
l2 := a2 b2 c2 a2 b2 c2]
Boucle tant que:
> s:=1
> while s<2000
> do s:=2*s
> od
s := 1
s := 2
s := 4
s := 8
s := 16
s := 32
s := 64
s := 128
s := 256
s := 512
s := 1024
s := 2048
10.3 Proc dures
Une proc dure est une suite d'instructions partag es que l'on peut appeler
ensuite.
41
43. > # la fonction carre calcule le carre d'un nb
> carre:=proc(x)
> local x2 # variable locale
> x2:=x*x
> RETURN(x2) # par d faut retourne le dernier r sultat
> end
carre := proc(x)localx2 x2 := x2 RETURN(x2)end proc
> carre(3)
9
> carre(3,4) # prend le 1er argument
9
> carre(truc)
truc2
> racine:=proc(x)
> if (x>=0) then
> RETURN(sqrt(x))
> else
> RETURN(Impossible !)
> fi
> end
racine := proc(x)
if0 xthenRETURN(sqrt(x))elseRETURN(Impossible!)end if
end proc
> racine(4)
2
> racine(-3)
Impossible!
> racine(sophie) # ne sait pas valuer sophie
Error, (in racine) cannot evaluate boolean: -sophie <= 0
> sqrt(-3)
I
p
3
> racine:=proc(x::numeric) # param tre
> de type connu par maple
> if (x>=0) then
> RETURN(sqrt(x))
> else
> RETURN("Impossible!")
> fi
> end
42
44. racine := proc(x:: numeric)
if0 xthenRETURN(sqrt(x))elseRETURN( Impossible! )end if
end proc
> racine(ab)
Error, invalid input: racine expects its 1st argument, x, to be of
type numeric, but received ab
> racine(carre(4,6)) # prend le 1er argument
4
11 Fichiers, entr es/sorties, sauvegardes
11.1 Sauvegarde des instructions
La sauvegarde d'une session correspond la sauvegarde des instructions. La
feuille de calcul Maple est sauvegard e avec les instructions et leurs r sultats.
La fonction save permet de sauvegarder des instructions telles on les taperait
en tant qu'instructions Maple. Le chier est ditable dans un diteur (Notepad,
Emacs) et chargeable dans Maple par le menu File> Open.
> M:=matrix(2,2, 0$4]) :
> save M,"C:toto.dat"
> read "c:toto.dat" # rapelle et ex cute les instructions
M :=
"
0 0
0 0
#
toto.dat contient les informations suivantes:
M: = array(1.. 2, 1 .. 2, (1, 1)=0,(1, 2)=0,(2, 1)=0,(2, 2)=0])
11.2 Utilisation des proc dures dans un chier externe
Le chier ascii peut contenir la proc dure maxvp qui recherche le maximum
des valeurs propres d'une matrice.
43
45. maxvp: =proc(M:: matrix)
local ev, mx
ev: = eigenvals(M)
mx: = max(ev)
RETURN(ev,mx)
end
> read "C:toto.dat" :
> debug(maxvp) #mode debugage d'une proc dure
Le principe est de mettre les proc dures dans un chier. Le restart r initialise
et se d barasse du contexte pr c dent.
> restart # remise z ro
On peut sauvegarder une proc dure comme tout autre objet dans un chier,
sans mise en forme.
> save carre, "carre.txt"
carre: = proc (x, y) local x2, y2 x2: =x^2 y2: = y^3 RETURN(x2,"et",y2)
end proc
Un chier de commandes peut contenir de nombreuses instructions:
44
46. # mon chier de commandes progmp.txt with(linalg)
# proc carre
carre: =proc(x,y)
local x2,y2
x2: =x*x
y2: =y*y*y
RETURN(x2,"et",y2)
end
# proc calcul...
maxvp: =proc(M:: matrix)
local ev, mx, vabs
ev: = eigenvals(M)
vabs: = seq(abs(vabs i]),i=1..nops(vabs))
mx: = max(ev)
RETURN(mx)
end
11.3 Communication
11.3.1 Fichier texte
Menu File>Save as Text
Ensuite on peut copier depuis un diteur puis coller dans Maple as Maple Text
11.3.2 S lection
Menu Exporter pose le probl me de tout exporter: il faut faire le m nage
ensuite.
11.3.3 Feuille de calcul
L'exportation au format TeX de la feuille de calcul produit un chier TeX
autonome tr s utile pour retravailler le texte. Il est n cessaire d'avoir r cup r
le package maple2e.
11.3.4 Format HTML
Il est possible de fabriquer du HTML standard avec des chiers GIF int gr s.
A l'avenir, mathML permettra de repr senter des formules.
45
47. 11.3.5 Graphiques
Il est pr f rable de passer par le menu contextuel car le menu Export ne
s'applique pas toujours l'ensemble souhait .
> interface(plotdevice=inline) # retour la feuille
Les exportations de graphiques peuvent se faire aux di rents formatsreconnus
(GIF, JPG, EPS, WMF).
11.3.6 Postscript
Pour exporter la feuille en postscript, Maple ne le fait pas tout seul, il faut
passer par l'impression dans un chier l'aide d'un driver d'imprimante Post-
script (rappelons que lorsqu'on imprime, on peut imprimer sur une feuille ou
dans un chier! ), puis diter avec un diteur de chiers postscript, tel que
GhostView et s lectionner les pages int ressantes.
Entre collaborateurs, la communication peut se faire l'aide de chiers post-
script.
11.4 Fonctions d' dition de la feuille de calcul
Nous mentionnons ici les principales fonctionnalit s.
Menu > Insert > Execution Group > Before ou After
permet de cr er un groupe de commandes. Le syst me pr sente une barre de
modi cation avec validation par exemple.
Les fen tres d'aide ont t faites avec des instructions et des commentaires.
Menu > Insert > Section ou Subsection.
Le bloc peut tre indent ou outdent par Menu > Format.
Les blocs d'ex cution peuvent tre fusionn s ou cass s par Menu > Edit >
Split ou Join.
46