Notes de cours maple
Alain JEAN-MARIE Annie HOFSTETTERy
Juin 2002
LIRMM Montpellier
yINRA LAMETA Montpellier
Table des mati res
1 Introduction 3
1.1 D nition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Acc s s...
9 Graphiques 36
10 Programmation 39
10.1 Tests et conditions . . . . . . . . . . . . . . . . . . . . . . . . . 39
10.2 Bou...
1 Introduction
1.1 D nition
maple7 est un logiciel de calcul formel ou symbolique comme Mathematica,
Axiom tandis que des ...
2 Prise en main
2.1 Notation
Une instruction est saisie au clavier derri re le prompt ">". Le point virgule
repr sente la ...
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 util...
> 1.5^100
:40656117751018
> r:=(3/2)^100 : evalf(r)
:40656117751018
4 Ce que Maple ne peut pas faire
Pour des raisons th o...
Digits := 20
162:99999999999999999
> Digits := 40 evalf(v)
Digits := 40
163:0000000000000000000000000000232167780
5 Probl ...
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 curs...
> 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...
> 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] ...
> 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 sto...
> a 3]
a3
> a 13] # en dehors de l'intervalle
Error, 1st index, 13, larger than upper array bound 10
> a 0] # l'intervalle...
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]:...
6.6 Passage entre les structures de donn es
Lorsqu'il est possible, le passage d'une structure de donn es une autre se fai...
> 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]]...
> f4:=expand(f4) # pas de hi rarchisation des puissances
f4 := 1 + 4a3x3 + 4x6 + 12x5a + 12x4a2 + x8 + 6x4 + 12x3 a+ 6a2 x...
7.3 Int gration
> int(f4,x) # polyn me r sultant de l'int gration
1
9 x9 + 1
2 x8 a+ 6
7 x7 a2 + 4
7 x7 + 2
3 x6 a3 + 2x6a...
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) ;
...
> 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/...
h := ;(8x7 + 28x6a+ 36x5a2 + 24x5 + 20x4a3 + 60x4a + 4x3 a4 + 48x3a2 + 24x3
+ 12x2 a3 + 36x2a+ 12xa2 + 8x+ 4a)
.
(x8 + 4x7...
;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...
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 argument...
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 ...
> 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...
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...
> 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 che...
> 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 ...
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 ...
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 = ...
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 ...
> dsolve({ode1,y(0)=0},{y(x)})
y(x) = 0
8.6 D veloppements en s rie
Si l'on veut obtenir la s rie de y(x) l'ordre 6:
> dso...
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)
> ...
> lo:=dsolve({subs(k=0.1,ode1),y(0)=1/2},{y(x)},type=numeric)
lo := proc(rkf45 x) ::: end proc
> with(plots) : # biblioth ...
> listgr:= seq(odeplot(curvs i],x=0..100),i=1..9)]:
> display (listgr) # cf. Figure 3
Figure 3: Plot plusieurs courbes
0.2...
fy(t) = ;1
2
C1 %3a; C1 %3d; C1 %3%1 + C2 %2a; C2 %2d+ C2 %2%1
b
x(t) = C1 %3 + C2 %2g
%1 :=
p
a2 ;2ad+ d2 + 4cb
%2 := e(1...
> 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:=dif...
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=box...
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 = ;...
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 the...
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 := v...
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...
> # la fonction carre calcule le carre d'un nb
> carre:=proc(x)
> local x2 # variable locale
> x2:=x*x
> RETURN(x2) # par ...
racine := proc(x:: numeric)
if0 xthenRETURN(sqrt(x))elseRETURN( Impossible! )end if
end proc
> racine(ab)
Error, invalid i...
maxvp: =proc(M:: matrix)
local ev, mx
ev: = eigenvals(M)
mx: = max(ev)
RETURN(ev,mx)
end
> read "C:toto.dat" :
> debug(max...
# 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,...
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'ensem...
Index
: , 4
: =, 4
, 4
>, 3
? , 3
#, 4
$, 12
&*, 22
aide, 3
anames, 9
array, 11
boucle, 39, 41
charpoly, 13, 25
coe , 16
c...
Order, 31
pdesolve, 30
pdsolve, 30
plot, 28
plot3d, 37
plots, 33
postscript, 46
procedure, 41
product, 27
prompt, 3
read, ...
Liste des gures
1 Plot z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2 Plot 1 seule courbe . . . . ...
Prochain SlideShare
Chargement dans…5
×

Coursmp

250 vues

Publié le

cour

Publié dans : Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
250
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
5
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Coursmp

  1. 1. Notes de cours maple Alain JEAN-MARIE Annie HOFSTETTERy Juin 2002 LIRMM Montpellier yINRA LAMETA Montpellier
  2. 2. Table des mati res 1 Introduction 3 1.1 D nition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Acc s sur le campus . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Acc s l'aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Prise en main 4 2.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 La feuille de calcul . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.4 Op rateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Ce que peut faire Maple 5 4 Ce que Maple ne peut pas faire 6 5 Probl me de l' valuation des symboles 7 6 Structures de donn es 9 6.1 Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 6.2 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 6.3 Les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 6.4 Les "table-array" . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.5 Les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.6 Passage entre les structures de donn es . . . . . . . . . . . . . . 14 7 Manipulations sur les fonctions 15 7.1 Manipulations simples . . . . . . . . . . . . . . . . . . . . . . . 15 7.2 Coe cients des polyn mes . . . . . . . . . . . . . . . . . . . . . 16 7.3 Int gration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 7.4 Factorisation et d composition de fractions . . . . . . . . . . . 19 7.5 D veloppements . . . . . . . . . . . . . . . . . . . . . . . . . . 20 8 Alg bre lin aire 22 8.1 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 8.2 R solution de syst mes lin aires . . . . . . . . . . . . . . . . . . 24 8.3 Vecteurs propres . . . . . . . . . . . . . . . . . . . . . . . . . . 25 8.4 Syst mes d' quations g n raux . . . . . . . . . . . . . . . . . . 27 8.5 Equations di rentielles . . . . . . . . . . . . . . . . . . . . . . 30 8.6 D veloppements en s rie . . . . . . . . . . . . . . . . . . . . . . 31 8.7 Syst me d' quations . . . . . . . . . . . . . . . . . . . . . . . . 34 1
  3. 3. 9 Graphiques 36 10 Programmation 39 10.1 Tests et conditions . . . . . . . . . . . . . . . . . . . . . . . . . 39 10.2 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 10.3 Proc dures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 11 Fichiers, entr es/sorties, sauvegardes 43 11.1 Sauvegarde des instructions . . . . . . . . . . . . . . . . . . . . 43 11.2 Utilisation des proc dures dans un chier externe . . . . . . . . 43 11.3 Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 11.3.1 Fichier texte . . . . . . . . . . . . . . . . . . . . . . . . 45 11.3.2 S lection . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 11.3.3 Feuille de calcul . . . . . . . . . . . . . . . . . . . . . . 45 11.3.4 Format HTML . . . . . . . . . . . . . . . . . . . . . . . 45 11.3.5 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . 46 11.3.6 Postscript . . . . . . . . . . . . . . . . . . . . . . . . . . 46 11.4 Fonctions d' dition de la feuille de calcul . . . . . . . . . . . . . 46 2
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  17. 17. > f4:=expand(f4) # pas de hi rarchisation des puissances f4 := 1 + 4a3x3 + 4x6 + 12x5a + 12x4a2 + x8 + 6x4 + 12x3 a+ 6a2 x2 + 4ax+ 6x6a2 + 4x5 a3 + a4 x4 + 4x7a + 4x2 > sort(f4,x) # puissances d croissantes par d faut x8 + 4ax7 + 4x6 + 6a2 x6 + 12ax5 + 4a3 x5 + 12a2x4 + a4 x4 + 6x4 + 4a3x3 + 12ax3 + 6a2x2 + 4x2 + 4ax+ 1 > sort(f4, x,a],plex) # tri en x et a, puiss. lexicographiques x8 + 4x7 a+ 6x6a2 + 4x6 + 4x5 a3 + 12x5a+ x4 a4 + 12x4 a2 + 6x4 + 4x3a3 + 12x3 a + 6x2a2 + 4x2 + 4xa+ 1 > collect(f4,x) # rassemble les coeff par puissances de x x8 + 4x7a + (6a2 + 4)x6 + (12a+ 4a3)x5 + (a4 + 12a2 + 6)x4 + (12a+ 4a3)x3 + (6a2 + 4)x2 + 4xa+ 1 > collect(f4,x,sort) x8 + 4x7a + (6a2 + 4)x6 + (4a3 + 12a)x5 + (a4 + 12a2 + 6)x4 + (4a3 + 12a)x3 + (6a2 + 4)x2 + 4xa+ 1 > collect(f4, x,a]) x8 + 4x7a + (6a2 + 4)x6 + (4a3 + 12a)x5 + (a4 + 12a2 + 6)x4 + (4a3 + 12a)x3 + (6a2 + 4)x2 + 4xa+ 1 7.2 Coe cients des polyn mes > coeff(f4,x,6) 6a2 + 4 > coeffs(f4,x) # liste de tous les coeffs 1 4a 6a2 + 4 a4 + 12a2 + 6 6a2 + 4 1 12a+ 4a3 12a+ 4a3 4a > coeffs(expand((x^2+1)^3),x) # non ordonn incomplet 1 1 3 3 > degree(expand((x^2+1)^3),x) 6 > seq(coeff(x^6+3*x^4+3*x^2+1,x,i),i=0..degree(x^6+3*x^4+3*x^2+1,x)) > # ordonn et complet 1 0 3 0 3 0 1 > seq(coeff(x^6+3*x^4+3*x^2+1,x,i),i=0..degree(x^6+3*x^4+3*x^2+1,x))] > # liste 1 0 3 0 3 0 1] 16
  18. 18. 7.3 Int gration > int(f4,x) # polyn me r sultant de l'int gration 1 9 x9 + 1 2 x8 a+ 6 7 x7 a2 + 4 7 x7 + 2 3 x6 a3 + 2x6a+ 1 5 x5 a4 + 12 5 x5 a2 + 6 5 x5 + x4 a3 + 3x4 a + 2x3 a2 + 4 3 x3 + 2x2a + x > int(f4,x=1..y) 1 9 y9 ; 10 9 + 1 2 a(y8 ;1) + 1 7 (6a2 + 4)(y7 ; 1)+ 1 6 (4a3 + 12a)(y6 ; 1) + 1 5 (a4 + 12a2 + 6)(y5 ;1) + 1 4 (4a3 + 12a)(y4 ;1)+ 1 3 (6a2 + 4)(y3 ;1) + 2a(y2 ; 1)+ y > ig:=int(f4,x=1..y) ig := 1 9 y9 ; 10 9 + 1 2 a(y8 ; 1)+ 1 7 (6a2 + 4)(y7 ;1) + 1 6 (4a3 + 12a)(y6 ;1) + 1 5 (a4 + 12a2 + 6)(y5 ; 1)+ 1 4 (4a3 + 12a)(y4 ;1) + 1 3 (6a2 + 4)(y3 ; 1) + 2a(y2 ;1) + y > simplify(ig) # formule magique ;15 2 a+ y + 1 5 a4 y5 + 12 5 a2 y5 + a3 y4 + 3ay4 + 2a2y3 + 2ay2 ; 5 3 a3 ; 1 5 a4 + 2ay6 + 2 3 a3 y6 + 1 9 y9 + 6 5 y5 + 4 3 y3 + 4 7 y7 ; 184 35 a2 ; 1328 315 + 1 2 ay8 + 6 7 a2 y7 > expand(ig) # expand pr f r e > simplify pour les produits (id dans ce cas) ;15 2 a+ y + 1 5 a4 y5 + 12 5 a2 y5 + a3 y4 + 3ay4 + 2a2y3 + 2ay2 ; 5 3 a3 ; 1 5 a4 + 2ay6 + 2 3 a3 y6 + 1 9 y9 + 6 5 y5 + 4 3 y3 + 4 7 y7 ; 184 35 a2 ; 1328 315 + 1 2 ay8 + 6 7 a2 y7 > int(1/f4,x) 17
  19. 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. 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. 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. 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. 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
  24. 24. 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 > Minv:=evalm(M^(-1)) Minv := 2 6666664 ; x3 x2 %3x1 x1 x3 %2x2 x1 x2 %1x3 x3 + x2 %3x1 ;x3 + x1 %2x2 ;x1 + x2 %1x3 ; 1 %3x1 1 %2x2 1 %1x3 3 7777775 %1 := ;x3 x1 + x2 x1 + x32 ;x2 x3 %2 := ;x2 x3 + x3 x1 + x22 ;x2 x1 %3 := ;x2 x3 + x3 x1 + x2 x1 ; x12 > simplify(%) # % dernier r sultat %% avant dernier 2 6666664 ; x3 x2 %3x1 x1 x3 %2x2 x1 x2 %1x3 x3 + x2 %3x1 ;x3 + x1 %2x2 ;x1 + x2 %1x3 ; 1 %3x1 1 %2x2 1 %1x3 3 7777775 %1 := ;x3 x1 + x2 x1 + x32 ;x2 x3 %2 := ;x2 x3 + x3 x1 + x22 ;x2 x1 %3 := ;x2 x3 + x3 x1 + x2 x1 ; x12 Dans l'exemple qui suit, la fonction map applique la fonction factor tous les l ments de la matrice. > map(factor,Minv) 2 66666664 ; x2 x3 (;x2 + x1)(;x1 + x3)x1 x3 x1 (;x2 + x1)(x3 ; x2)x2 x2 x1 (;x1 + x3)(x3 ;x2)x3 x3 + x2 (;x2 + x1)(;x1 + x3)x1 ; x3 + x1 (;x2 + x1)(x3 ;x2)x2 ; x1 + x2 (;x1 + x3)(x3 ;x2)x3 ; 1 (;x2 + x1)(;x1 + x3)x1 1 (;x2 + x1)(x3 ; x2)x2 1 (;x1 + x3)(x3 ;x2)x3 3 77777775 > evalm(M &* Minv) : # tester > map(factor,evalm(M &* Minv)) 2 64 1 0 0 0 1 0 0 0 1 3 75 Les vecteurs sont des matrices! 23
  25. 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. 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. 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. 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. 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. 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. 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
  32. 32. > dsolve({ode1,y(0)=0},{y(x)}) y(x) = 0 8.6 D veloppements en s rie Si l'on veut obtenir la s rie de y(x) l'ordre 6: > dsolve(ode1,{y(x)},type=series) y(x) = y(0)+ ky(0)(1; y(0))x+ (;3 2 k2 y(0)2 + k2 y(0)3 + 1 2 k2 y(0))x2 + ( 1 3 ky(0)(3 2 k2 y(0)2 ; k2 y(0)3 ; 1 2 k2 y(0)); 1 3 k3 y(0)2 (1; y(0))2 + 1 3 k(;3 2 k2 y(0)2 + k2 y(0)3 + 1 2 k2 y(0))(1; y(0)))x3+ (25 12 k4 y(0)3 ; 5 2 k4 y(0)4 ; 5 8 k4 y(0)2 + k4 y(0)5 + 1 24 k4 y(0))x4+ (3 2 k5 y(0)3 ; 13 4 k5 y(0)4 ; 31 120 k5 y(0)2 + 3k5y(0)5 + 1 120 k5 y(0);k5 y(0)6)x5+ O(x6) > Order:=10 # l'odre 10 ! avec majuscule Order := 10 > dsolve(ode1,{y(x)},type=series) :# tester > dsolve({ode1,y(0)=1/2},{y(x)},type=series) y(x) = 1 2 + 1 4 kx; 1 48 k3 x3 + 1 480 k5 x5 ; 17 80640 k7 x7 + 31 1451520 k9 x9 + O(x10) > ode2:=diff(y(x),x,x)-k*y(x)*(1-y(x)): > dsolve({ode2,y(0)=1/2},{y(x)},type=series) y(x) = 1 2 + D(y)(0)x+ 1 8 kx2 ; 1 12 kD(y)(0)2x4 ; 1 80 k2 D(y)(0)x5 ; 1 1920 k3 x6+ 1 252 k2 D(y)(0)3x7 + 11 13440 k3 D(y)(0)2x8 + 1 17280 k4 D(y)(0)x9 + O(x10) > D(y)(0) # d riv e de y valu e en 0 D(y)(0) R cup ration de la partie polynomiale du d veloppement limit : > solu:=dsolve({ode2,y(0)=1/2,D(y)(0)=1},{y(x)},type=series) solu := y(x) = 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:=subs(solu,y(x)) 31
  33. 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. 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
  35. 35. > listgr:= seq(odeplot(curvs i],x=0..100),i=1..9)]: > display (listgr) # cf. Figure 3 Figure 3: Plot plusieurs courbes 0.2 0.4 0.6 0.8 1 y 0 20 40 60 80 100 x 8.7 Syst me d' quations M thode formelle: > t:='t' : a:='a' : b:='b' : c:='c' : > eq1:=diff(x(t),t)=a*x(t)+b*y(t) eq1 := @ @t x(t) = ax(t) + by(t) > eq2:=diff(y(t),t)=c*x(t)+d*y(t) eq2 := @ @t y(t) = cx(t)+ dy(t) > dsolve({eq1,eq2},{x(t),y(t)}) 34
  36. 36. fy(t) = ;1 2 C1 %3a; C1 %3d; C1 %3%1 + C2 %2a; C2 %2d+ C2 %2%1 b x(t) = C1 %3 + C2 %2g %1 := p a2 ;2ad+ d2 + 4cb %2 := e(1=2(a+d;%1)t) %3 := e((1=2a+1=2d+1=2%1)t) > dsolve({eq1,eq2,x(0)=1,y(0)=0},{x(t),y(t)}) 8 < :y(t) = ;1 2 0 @1 2 (a; d+ p %1)%3ap %1 ; 1 2 (a; d+ p %1)%3dp %1 ; 1 2 (a; d+ p %1)%3 ; 1 2 (a;d; p %1)%2ap %1 + 1 2 (a;d; p %1)%2d p %1 ; 1 2 (a;d; p %1)%2 1 A . b x(t) = 1 2 (a;d+ p %1)%3p %1 ; 1 2 (a; d; p %1)%2p %1 9 = %1 := a2 ;2ad+ d2 + 4cb %2 := e(1=2(a+d; p %1)t) %3 := e((1=2a+1=2d+1=2p %1)t) M thode s rie: > Order:=4 dsolve({eq1,eq2},{x(t),y(t)}, type=series) Order := 4 fx(t) = x(0)+ (ax(0)+ by(0))t+ (1 2 a2 x(0)+ 1 2 aby(0)+ 1 2 bcx(0)+ 1 2 bdy(0))t2 + ( 1 6 a3 x(0)+ 1 6 a2 by(0)+ 1 3 abcx(0)+ 1 6 abdy(0)+ 1 6 cb2y(0)+ 1 6 bdcx(0) + 1 6 bd2y(0))t3 + O(t4) y(t) = y(0) + (cx(0)+ dy(0))t+ (1 2 cax(0)+ 1 2 cby(0)+ 1 2 dcx(0)+ 1 2 d2 y(0))t2 + (1 6 ca2x(0) + 1 6 caby(0) + 1 6 bc2x(0)+ 1 3 cbdy(0)+ 1 6 dcax(0)+ 1 6 d2 cx(0)+ 1 6 d3 y(0))t3 + O(t4)g Equations non lin aires: > eq3:=diff(x(t),t)=x(t)^2+2*y(t) eq3 := @ @t x(t) = x(t)2 + 2y(t) > eq4:=diff(y(t),t)=x(t)*y(t) eq4 := @ @t y(t) = x(t)y(t) 35
  37. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  48. 48. Index : , 4 : =, 4 , 4 >, 3 ? , 3 #, 4 $, 12 &*, 22 aide, 3 anames, 9 array, 11 boucle, 39, 41 charpoly, 13, 25 coe , 16 coe s, 16 coldim, 27 collect, 16 convert, 14 debug, 44 degree, 16 denom, 20 det, 22 diag, 26 di , 15 Digits, 6 display, 34 dsolve, 30 dition, 46 eigenvals, 25 eigenvects, 25 ensemble, 9 entries, 11 evalc, 19 evalf, 6 evalm, 22 exp, 21 expand, 16 exporter, 45 factor, 19 chiers, 43 for, 39 formats, 46 fsolve, 28 gif, 45 html, 45 if, 39 implicitplot, 37 indices, 11 int, 17 intersect, 9 limit, 21 linalg, 13, 22 linsolve, 24 liste, 9, 41 listlist, 15 listprocedure, 36 map, 23 maple2e, 45 matrice, 13 maximize, 28 multiply, 22 nops, 41 numer, 20 odeplot, 36 op, 10, 11 op rateurs arithm tiques, 5 op rateurs logiques, 5 order, 35 47
  49. 49. Order, 31 pdesolve, 30 pdsolve, 30 plot, 28 plot3d, 37 plots, 33 postscript, 46 procedure, 41 product, 27 prompt, 3 read, 43 restart, 44 return, 42 rowdim, 27 sauvegarde, 43, 45 save, 43 seq, 10 series, 21 simplify, 6 solve, 6 sort, 16 sqrt, 18 subs, 8 sum, 26, 40 table, 10 tableau indic , 10 taylor, 20 test, 39 transpose, 24 type, 14 type numeric, 42 unassign, 4 union, 9 variable locale, 42 whattype, 14 while, 41 with, 13, 33 48
  50. 50. Liste des gures 1 Plot z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2 Plot 1 seule courbe . . . . . . . . . . . . . . . . . . . . . . . . . 33 3 Plot plusieurs courbes . . . . . . . . . . . . . . . . . . . . . . . 34 4 Plot t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5 Plot 3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 R f rences 1] C. Gomez. Notes de cours Maple. Institut National de la Recherche en Informatique et Automatique, 2001. 2] Y. Mourrain, B. Papegay. Notes de cours Maple. Institut National de la Recherche en Informatique et Automatique, 2001. 3] Waterloo. Maple 7. Waterloo Maple, 2002. 49

×