Você está na página 1de 21

..

117
..
.
Un cours dont l'objectif est de donner au lecteur les moyens de rsoudre
.
des problmes de l'algbre linaire en s'aidant du logiciel de calcul formel
.
Maple. Il ne s'arrte pas la description de quelques commandes calcu-
.
latoires pour avoir telle ou telle information sur une matrice, mais adopte
.
une approche plus constructive et commence par dfinir les bases d'une
.
utilisation relativement avance du logiciel.
I. Les listes et les ensembles :
I.1 Squences :
Une squence maple est une suite d'objets maple quelconques, spars par des
virgules. Une squence en elle mme est un objet maple et peut donc recevoir un
nom (aectation).
> S :=1,2,x^2+1,exp(a),diff(x*ln(x),x) ;
S = I, 2, x
2
+ I, e
a
, ln(x) + I
..
Maple
..
..
..
niaxcui xarus - i xio
.
axia
..
c Cours Maple d
Algbre linaire avec Maple
par Sadik BOUJAIDA
Lyce Moulay Youssef Rabat
Quest ce que Maple?
Maple, est dit un logiciel de calcul formel, en opposition avec calcul
numrique (ou scientique) qui a aussi ses reprsentants tel Matlab ou
Scilab. Il est dit par la socit canadienne MapleSoft qui vient den sortir
la version 14. Maple est capable de faire des calculs de faon symbolique
sans se soucier de la valeur numrique des variables utilises, de la mme
manire quun mathmaticien manipule des quations sans au pralable
imposer des valeurs donnes ses variables.
Maple dispose, depuis la version 7, de deux interfaces graphiques : linter-
face historique renomme Maple Classic, et une plus rcente totalement
rcrite en Java. Ce qui a permis Maple dtre port avec un moindre
effort vers les plateformes moins courantes (mais majoritaires dans les mi-
lieux universitaires) de type Unix, mais aussi MacOS X. Linterface Classic
est disponible pour MS Windows et continue tre propose, mais sans
vraiment voluer, dans les versions rcentes, et pour Linux travers lx-
cutable wcmaple. Elle nest par contre pas fournie pour MacOS X. Pour
la nouvelle interface le programme dinstallation intgre une machine vir-
tuelle Java et en gnral lutilisateur na pas besoin den installer une (qui
de toute faon ne sera pas utilise, moins dintervenir dans ce sens). Le
logiciel intgre un systme daide en ligne qui peut savrer une source dap-
prentissage instimable et une rfrence complte pour tout ce qui touche
son utilisation. Il propose en outre depuis la version 7, une technologie ap-
pele Maplet, qui permet dexporter de faon transparente un programme
Maple en une applet Java, qui de cette manire peut tre par exemple
diffuse sur une page web. Il a aussi depuis un certain temps acquis des
capacits de logiciel tableur et peut grer en import/export des chiers MS
Excel. Les Maplets et les fonctionnalits tableur ne sont actives que dans
linterface Java.
Les lves des classes prparatoires peuvent lutiliser comme une simple
(super)calculatrice pour le calcul, disons de limites, de sommes de sries,
de dveloppement limits, dintgrales et de primitives, de dterminant, va-
leurs et vecteurs propres de matrices... Il permet de rsoudre de faon simple
diverses sortes dquations (systme dquations algbriques, quations de
rcurrence, quations diffrentielles). Et il a des capacits graphiques, tel le
trac de graphes de fonctions ou de surfaces dans lespace.
En outre, Maple intgre son propre langage de programmation, ce qui
permet dtendre ses capacits en dnissant soit mme de nouvelles fonc-
tions. Dans ce sens il peut trs bien tre utilis comme un environnement
dinitiation la programmation sans les contraintes lies aux dclarations
de types de variables (et donc de la gestion de la mmoire) et aux problmes
de compilation inhrents aux langages de programmation classiques.
On peut accder un lment d'une squence en utilisant les crochets [ ] et sa
position dans la squence.
> S[1] ;S[3] ;
I
x
2
+ I
..
Maple
Pour construire des squences on dispose de l'operateur $ et de la procdure seq.
> k $k=1..5 ; #construction de la sequence 1,2,3,4,5 ;
I, 2, 3, 4, 3
> x^k $k=0..5 ;
I, x, x
2
, x
3
, x
4
, x
3
> x$3 ; #construction de la squence x,x,x
x, x, x
..
Maple
Exemples d'utilisation du constructeur $ :
> diff(x^5,x,x,x) ;diff(x^5,x$3) ;
60 x
2
60 x
2
..
Maple
et pour seq :
> seq(x^k,k=0..5) ;
I, x, x
2
, x
3
, x
4
, x
3
..
Maple
La squence vide est NULL.
> L :=NULL;
L =
> L :=L,a;
L = a
..
Maple
I.2 Listes :
Une liste est une squence mise entre crochets [ ], elle correspond la notion
mathmatique de famille nie d'lments. La liste vide est [ ].Si L est une liste
maple :
L[k]
op(k,L)
dsigne le k
me
lment de L
op(L) retourne la squence des lments de la liste L
nops(L) retourne le nombre d'lments dans L
iixaiquis
1. op et nops ne fonctionnent pas avec les squences
2. $ et la procdure seq peuvent tre utiliss pour construire des listes.
Liste des polynmes de LegendreP
n
=
d
n
[(x
2
I)
n
]
dx
n
de 1 4 :
> L :=[seq(diff((x^2-1)^k,x$k),k=1..4)] ;
L = [2 x, I2 x
2
4, 48 x
3
+ 72 (x
2
I) x, 384 x
4
+ II32 (x
2
I) x
2
+ I44 (x
2
I)
2
]
> op(3,L) ;
48 x
3
+ 72 (x
2
I) x
> L[3] ;
48 x
3
+ 72 (x
2
I) x
> nops(L) ;
4
..
Maple
On peut directement changer la valeur d'un lment de la liste par aectation ( ne
marche pas avec une squence)
..
.. ..
118
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
> L[4] :=0 ;
> L; #pour voir si L[4] a effectivement chang.
[2 x, I2 x
2
4, 48 x
3
+ 72 (x
2
I) x, 0]
..
Maple
Et pour rcuprer la squence des lments de la liste L :
> S :=op(L) ;
S = 2 x, I2 x
2
4, 48 x
3
+ 72 (x
2
I) x, 0
..
Maple
I.3 Ensembles :
Un ensemble est une squence place entre accolades { }, ceci correspond la notion
eective d'ensemble ni. L'ensemble vide est { }.
La dirence avec une liste est que dans un ensemble l'ordre d'entre des lments
n'est pas respect, les lments en doubles sont aussi lmins.
> K :={1,2,E,Pi,1} ;
K = {I, 2, E, }
..
Maple
Noter que le double de 1 t lmin et que l'ordre des lments chang.
Ce qui a t dit pour les listes reste valable pour les ensembles avec quelques
dirences de comportements.
> K[3] ;op(3,K) ;

> nops(K) ;
4
> op(K) ;
I, 2, , E
..
Maple
I.4 Conversion de types
On peut convertir un objet de type donn , en un autre d'un autre type mais avec
les mmes oprandes, une liste en un ensemble par exemple. Pour cela Maple ore
la commande convert. Il sut de connaitre le nom du type cible : une liste est une
li est un ensemble est un set (par exemple).
> L :=[x,y,z] ;S :={0,0,1,a,b,c} ;
L = [x, y, z]
S = {0, I, a, b, c}
> convert(L,set) ;
{x, y, z}
> convert(S,list) ;
[0, I, a, b, c]
..
Maple
Noter que pour changer le type d'un objet en une squence, il n'est pas besoin
d'utiliser convert, la procdure op sut
> op(L) ;
x, y, z
..
Maple
Une utilisation utile de cette commande est la possibilit de rcuprer rapidement
l'ensemble des coecients d'une matrice.
> A :=matrix(2,2,[x,y,z,t]) ;
A =

x y
z t

..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
119
..
niaxcui xarus - i xio
.
axia
> convert(A,set) ;
{t, x, y, z}
..
Maple
d'autres exemples
> convert([x,y,z],`+`) ;
x + y + z
> convert([x,y,z],vector) ;
[ x y z ]
..
Maple
II. Expressions et procdures :
II.1 Expressions, expressions polynomiales :
Une expression maple correspond ce que on peut qualier d'expression mathma-
tique faisant intervenir des variables, des constantes, des oprateurs, ventuellement
des fonctions usuelles ...
> a :=x^2+1 ;
a = x
2
+ I
> b :=x*ln(x+1) ;
b = x ln(x + I)
> c :=diff(b,x$2)/a;
c = (2 (x + I)
I

x
(x + I)
2
)(x
2
+ I)
I
> d :=int(a^2+1,x) ;
d = 2 x + I/3 x
3
+ 2/3 x
3
..
Maple
a,b,c,d sont des exemples d'expressions. Dans une expression, on peut substituer une
variable une autre en utilisant subs
> subs(x=2,b) ;
2 ln(3)
> subs(x=y+1,b) ;
(y + I) ln(y + 2)
..
Maple
On notera que les indetermines d'une expression ne sont pas considres comme
des variables scalaires, mais des parametres formels au sens large du terme, et
donc dans une substitution par exemple vous pouvez donner une variable une
valeur matricielle tant qu'il n'y a pas d'incompatibilit aboutissant une erreur
l'xcution.
Un polynme et en particulier une expression faisant intervenir une ou plusieurs
indtermines et des constantes lies par les operateurs + et *
> P :=sum((n+1)*x^n,n=0..5) ;
P = I + 2 x + 3 x
2
+ 4 x
3
+ 3 x
4
+ 6 x
3
> Q :=product(x^k-y,k=1..4) ;
Q = (x y) (x
2
y) (x
3
y) (x
4
y)
..
Maple
Coecients d'un polynme, en utilisant coeff :
> coeff(P,x^2) ;
3
> coeff(Q,y^3) ;
x x
2
x
3
x
4
> coeff(Q,y,3) ; #la mme chose que l'instruction prcdente
x x
2
x
3
x
4
..
Maple
Pour rcuperer la squence des cocients (non nuls) d'un polynme, on dispose
de coeffs :
..
.. ..
120 Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
> coeffs(P,x) ;
I, 2, 3, 4, 3, 6
> coeffs(x^3+2,x) ;
2, I
..
Maple
coeffs retourne la squence des coecients non nuls (seulement) du polynme,
prsents dans l'ordre croissants des puissances de l'indtermine indique. Ce qui
dans un exercice d'algbre linaire par exemple peut s'avrer inadapt.
Dans ce cas on peut demander explicitement la construction de la squence des
coecients.
> R :=1+p*x+q*x^3 ;
R = I + px + qx
3
> C :=seq(coeff(R,x,k),k=0..4) ;
C = I, p, 0, q, 0
..
Maple
N.B : L'instruction coeff(P,x^0) retourne un message d'erreur (comprhensible),
prfrer pour cela toujours la syntaxe coeff(P,x,k).
On peut rordonner l'criture d'un polynme suivant les puissances dcroissantes
d'une indtermine en utilisant collect.
> collect(Q,x) ;
x
I0
yx
9
yx
8
+ (y
2
y) x
7
+ (y
2
y) x
6
+2 y
2
x
3
+ (y
3
+ y
2
) x
4
(y
2
y) yx
3
y
3
x
2
y
3
x + y
4
..
Maple
D'autres procdures utiles pour le traitement des expressions polynomiales :
degree(P,x) pour le degr de P selon l'indtermine x
expand(P) pour le developpement de P s'il est donn sous forme factorise
factor(P) factoriser P ( autant que possible, en fait la factorisation se fait dans
Q[X])
factor(P,a) factoriser P dans l'anneau Q[a][X]
roots(P) la liste des racines dans le corps Q de P avec leurs ordres de multipli-
cit
roots(P,a) la liste des racines de P se trouvant dans le corps Q[a] avec leurs ordres
de multiplicit
> P :=(x^2+1)^2*(x-1)^3 ;
P = (x
2
+ I)
2
(x I)
3
> Q :=expand(P) ;
Q = x
7
3 x
6
+ 3 x
3
7 x
4
+ 7 x
3
3 x
2
+ 3 x I
> factor(Q) ;
(x
2
+ I)
2
(x I)
3
> roots(P) ;
[[I, 3]]
> roots(P,I) ; # I est le nombre complexe not usuellement i.
[[I, 2], [I, 2], [I, 3]]
> roots(x^2-2) ;
[]
> roots(x^2-2,sqrt(2)) ;
[[

2, I], [

2, I]]
..
Maple
II.2 Procdures :
Une procdure maple est ce qui correspondrait la notion mathmatique de fonc-
tion.
Pour la construction de fonctions on dispose de l'oprateur ->(les symboles "moins"
et "superieur"), ou de la procdure unapply.
Pour la dnition de procdures plus avances, le constructeur de procdure proc
est le choix ultime.
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
121
..
niaxcui xarus - i xio
.
axia
> f :=x->x^2 ;
f = x x
2
> g :=(x,y)->x*ln(y) ;
g = (x, y) x ln(y)
> f(2) ;f(a^2) ;
4
a
4
> g(3,2) ;g(a,b) ;
3 ln(2)
a ln(b)
..
Maple
Encore une fois le domaine de dnition d'une procdure est strictement formel,
et on peut demander la valeur d'une fonction en n'importe quel objet, pourvu que
cela ne provoque pas d'erreurs.
> A :=matrix(2,2,[1,1,0,2]) ;
A =

I I
0 2

> f(A) ;
A
2
> evalm(f(A)) ;

I 3
0 4

..
Maple
On expliquera le fait qu'il ait falu passer par evalm pour acher le rsultat dans les
prochains paragraphes.
La procdure unapply permet de la mme faon de construire une fonction partir
d'une expression.
> h :=unapply(a*ln(x+1),x) ;
h = x a ln(x + I)
> h(b) ;
a ln(b + I)
..
Maple
Et pour une fonction de plusieurs variables :
> k :=unapply(a*ln(x+1),x,a) ;
k = (x, a) a ln(x + I)
> k(1,3) ;
3 ln(2)
..
Maple
Noter qu'un nom suivi d'un symbole parenthse fait automatiquement que celui ci
est considr comme le nom d'une procdure, mme si ce nom est une constante (il
s'agit alors de la fonction constatnte prenant cette valeur).
> 1(x) ;1(3) ;
I
I
> g :=h+1 ;
g = h + I
> g(b) ;
a ln(b + I) + I
..
Maple
Une utilisation intressante des fonctions, pour le sujet que traite cet article, se fait
en association avec map :
map(func, expr) applique la fonction func aux oprandes de expr, que expr soit une
liste, un ensemble ou une expression quelconque.
> L :=[k $k=0..5] ;
..
.. ..
122
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
L = [0, I, 2, 3, 4, 3]
> map(k->x^k,L) ;
[I, x, x
2
, x
3
, x
4
, x
3
]
> map(k->diff(x^5,x$k),[k $k=1..5]) ;
[3 x
4
, 20 x
3
, 60 x
2
, I20 x, I20]
> A :=a+b+c ;
A = a + b + c
> map(x->x^2,A) ;
a
2
+ b
2
+ c
2
> f :=x->x^2 ;
f = x x
2
> map(f+1,A) ;
a
2
+ 3 + b
2
+ c
2
..
Maple
map ne fonctionne pas avec les squences, si vous devez "mapper" la fonction f
une squence S, faites le plutt avec la liste [S] : map(f,[S])
II.3 Rsolution de systmes dquations algbriques
La procdure solve permet de rsoudre des quations (ou des systmes d'quations)
algbriques (entre autre), la syntaxe est de la forme
solve(eqs,incs) ;
o eqs est une quation ou un ensemble (au sens Maple) d'quations avec une ou
plusieurs indtermines et incs un nom ou un ensemble de noms d' inconnues
intervenant dans eqs. De cette faon on peut dcider que certaine indtermines
jouent le rle d'inconnues alors que d'autres celui de paramtres. On peut ngliger
de prciser l'argument incs, dans ce cas toutes les indtermines sont considres
comme des inconnues.
> solve(a*x+b=0,x) ;solve(a*x+b=0) ;

b
a
{a = a, b = ax, x = x}
> solve({a*x+b*y=alpha,c*x+d*y=beta},{x,y}) ;
{x =
d b
ad cb
, y =
c + a
ad cb
}
..
Maple
Maple ne se soucie gure de la validit du rsultat dans le cas o des paramtres
entent en jeu. Dans le dernier exemple, il a donne une solution unique du systme
linaire que le dterminant ad bc soit nul ou pas.
Dans le cas o une quation se termine par une galit avec 0, on peut ngliger de
prciser =0. Ce dtail peut s'avrer trs pratique.
> solve(a*x+b,x) ;

b
a
..
Maple
La rponse de Maple est un terme qui reprsente la solution dans le cas o il y'a une
seule inconnue, un ensemble d'galits dans le cas o il y'en a plusieurs. Bien que
dans ce deuxime cas les galits semblent donner des valeurs aux inconnues, il n'en
est rien. Les noms des inconnues restent libres (sans valeurs).
Utilisation de subs pour rcuprer les rsultats
La syntaxe gnrale de la procdure subs est de la forme
subs(eqs,expr) ;
o eqs est une galit , une squence, une liste ou un ensemble d'galits et expr une
expression Maple quelconque. Maple va alors remplacer chaque terme de gauche
dans le(s) galit(s) de eqs par le terme de droite de la mme galit dans l'expression
expr. Aucun calcul ne sera eectu, Maple se contentant d'une substitution pure et
simple. Noter que la priorit des substitutions sera dirente selon est-ce que eqs est
une liste ou un ensemble.
On peut alors utilser subs pour eectivement aecter les valeurs des solutions d'une
quation des noms donns.
Exemple :
On voudrait dterminer les matrices carres d'ordre 2 qui commutent avec la matrice
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
123
..
niaxcui xarus - i xio
.
axia
> A :=matrix(2,2,[1,1,0,-1]) ;
A =

I I
0 I

..
Maple
Pour cela on dnit une matrice inconnue X
> X :=matrix(2,2,[x,y,z,t]) ;
X =

x y
z t

..
Maple
On value la dirence AX XA (voir paragraphe suivant pour les dtails de la
syntaxe)
> M :=evalm(A&*X-X&*A) ;
M =

z 2 y + t x
2 z z

..
Maple
On rcupre l' ensemble des quations et celui des inconnues en utilisant convert
> eqs :=convert(M,set) ;incs :=convert(X,set) ;
eqs = {z, 2 z, z, 2 y + t x}
incs = {t, x, y, z}
..
Maple
On rsout
> sol :=solve(eqs,incs) ;
sol = {t = 2 y + x, x = x, y = y, z = 0}
..
Maple
Maintenant pour voir eectivement la forme des matrices qui commutent avec A
> subs(sol,evalm(X)) ;

x y
0 2 y + x

..
Maple
III. Initiatin aux boucles et aux instructions condi-
tionnelles.
III.1 Instructions conditionelles avec if
Une instruction conditionnelle sert excuter une instruction si une certaine condi-
tion est ralise.
if cond1 then
task1
elif cond2 then
task2
... ...
elif condN then
taskN
else
task(N+1)
fi ;
va vrier si cond1 est ralise, auquel cas task1 sera excut et l'instruction se
termine, sinon cond2 sera teste, et ainsi de suite, si aucune des condition condK
n'est ralise alors l'instruction task(N+1) du bloc else sera excute et l'instruction
se termine. Une instruction conditionnelle n'a d'intrt que dans le corps d'une
procdure.
> f :=x->if x<0 then 0 elif x<1 then 1 else 2 fi ;
f = x if x < 0 then0 elif x < I thenI else 2 endif
> map(f,[-1,1/2,2]) ;
[0, I, 2]
..
.. ..
124
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
> g :=n->if isprime(n) then n^2 else 0 fi ; # isprime(n) est vraie si n
est premier.
g = n if isprime (n) then n
2
else 0 endif
> isprime(5) ;isprime(10) ;
true
false
> map(g,[2,4,5,6,9,11]) ;
[4, 0, 23, 0, 0, I2I]
..
Maple
Pour faire des tests dans une instruction conditionnelle on utilise les oprateurs de
comparaisons <,>,<=,>= ,= et <> (pour dirent) ; ou des procdures (tel isprime)
pdnies en maple et qui en gnral donnent une rponse boolenne : true (vrai) ou
false (faux). On peut aussi construire ses propres procdures de test. Dans l'exemple
suivant on construit la procdure isodd qui vrie si son argument est impaire ou
non.
> isodd :=x-> if x mod 2 = 1 then true else false fi ;
isodd = x if x mod2 = I thentrue else false endif
> isodd(16) ;isodd(5) ;
false
true
..
Maple
III.2 Boucles for et boucles while :
Une boucle est une instruction adapte l'excution de taches rptitives. On
distingue deux types de boucles (et ce dans tous les langages de programmation) :
Les boucles for :
for k from a to b by p do task od ;
va excuter la tche task pour k allant de a b en avanant d'un pas p, si le bloc by p
n'est pas prsent le pas par dfaut est 1, le bloc from a peut tre aussi absent, auquel
cas la boucle commence partir de 1. Mieux, si le corps task ne dpend pas de la
valeur de k, notre instruction pourrait se limiter to b do task od;, ce qui fera que
la tache task sera excute b fois.
Les boucles while :
while cond do task od;
va excuter la tche task tant que le test de la condition cond sera russi.
Exemples :
> a :=2 ;
a = 2
> to 5 do a :=2*a od;
a = 4
a = 8
a = I6
a = 32
a = 64
..
Maple
Ici on initie la variable a avec la valeur 2, et on excute une boucle for qui va chaque
fois multiplier la valeur de a par 2. Ainsi a va recevoir successivement comme valeur
les puissances de 2.
> L :=[] ;
L = []
> for k from 1 to 100 do
> if isprime(k) then L :=[op(L),k] fi
> od;
> L;
[2, 3, 3, 7, II, I3, I7, I9, 23, 29, 3I, 37, 4I, 43, 47, 33, 39, 6I, 67, 7I, 73, 79, 83, 89, 97]
..
Maple
Ici la boucle parcourt les entiers de 1 100, ds qu'elle tombe sur un nombre premier
elle l'ajoute la liste L qui tait au dpart vide.
A noter que l'instruction suivante fait la mme chose.
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
125
..
niaxcui xarus - i xio
.
axia
> select(isprime,[n $n=1..100]) ;
[2, 3, 3, 7, II, I3, I7, I9, 23, 29, 3I, 37, 4I, 43, 47, 33, 39, 6I, 67, 7I, 73, 79, 83, 89, 97]
..
Maple
La procdure select fonctionne selon le mme principe que map, son premier
argument doit tre une fonction de test, ce test sera eectu sur les oprandes du
deuxime argument. L'instruction ne conservera alors que les oprandes qui vrient
le test.
Un autre exemple (qui parle de lui mme) :
> select(x->if x>0 then true else false fi , [1,-1,0,2,-5]) ;
[I, 2]
..
Maple
Un exemple d'utilisation d'une boucle while
> a :=160 ;k :=0 ;
a = I60
k = 0
> while a<>0 mod 2 do k :=k+1 ; a :=iquo(a,2) od;
k = I
a = 80
k = 2
a = 40
k = 3
a = 20
k = 4
a = I0
k = 3
a = 3
k = 6
a = 2
k = 7
a = I
k = 8
a = 0
..
Maple
La boucle vrie chaque fois si a ne vaut pas 0 modulo 2, sinon elle remplace a par
son quotient par 2 et incrmente k d'une unit. Ce qui permet au nal de rcuprer
dans k l'exposant de 2 dans la dcomposition en produit de nombres premiers de la
valeur initiale de a :160.
IV. Matrices et vecteurs
IV.1 Diffrentes mthodes de construction.
Un vecteur est le couple form de sa taille et de la liste de ses coordonnes, ce qui permet
ventuellement de ne pas prciser toutes les coordonnes depuis le dpart.
La procdure vector permet de construire des vecteurs avec plusieurs variantes dans
la syntaxe.
La forme la plus basique, la taille plus la liste des coordonnes :
> vector(4,[1,0,0,0]) ;
[ I 0 0 0 ]
..
Maple
Au lieu de prciser la liste des coecients, on peut donner une procdure qui
servira construire les coecients, Maple appliquera alors cette procdure aux indice
1,2,..,taille_vecteur.
> vector(10,k->x^(k-1)) ;
[ I x x
2
x
3
x
4
x
3
x
6
x
7
x
8
x
9
]
..
Maple
ou encore
..
.. ..
126
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
> vector(10,1) ;
[ I I I I I I I I I I ]
..
Maple
ce deuxime exemple est un cas particulier de la forme prcdente : le deuxime
argument, ici 1, est trait comme tant la fonction constante de valeur 1. Ceci est
pratique pour la construction du vecteur nul.
> vector(10,0) ;
[ 0 0 0 0 0 0 0 0 0 0 ]
..
Maple
Une matrice est la donne de trois arguments, le nombre de ligne, celui des colonnes et la
liste des coefcients lus ligne par ligne.
La procdure matrix permet de construire des matrices, et comme pour vector avec
plusieurs variantes syntaxiques.
> matrix(3,3,[1,0,0,0,1,0,0,0,1]) ;

I 0 0
0 I 0
0 0 I

..
Maple
Construit la matrice de taille 3,3 la liste des coecients est, comme vous pouvez le
constater, lue ligne par ligne.
> matrix(3,3,(i,j)->1/(i+j-1)) ;

I I/2 I/3
I/2 I/3 I/4
I/3 I/4 I/3

..
Maple
Matrice de Cauchy d'ordre 3, la syntaxe ici ressemble celle vue pour vector.
Pour dnir la matrice 3,3 dont les coecients diagonaux valent a les autres valant
b :
> A :=matrix(3,3,(i,j)->if i=j then a else b fi) ;
A =

a b b
b a b
b b a

..
Maple
L' addition de deux matrices (ou de deux vecteurs) se fait en utilisant l'oprateur +,
leurs multiplication, l'oprateur &*, si A est une matrice carre inversible son inverse
est simplement A^(-1). On doit toutefois demander explicitement l'valuation de ces
oprations en utilisant evalm :
> evalm(A&*A) ;evalm(A^(-1)) ;

a
2
+ 2 b
2
2 ab + b
2
2 ab + b
2
2 ab + b
2
a
2
+ 2 b
2
2 ab + b
2
2 ab + b
2
2 ab + b
2
a
2
+ 2 b
2

a + b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2
a + b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2

b
a
2
+ ab 2 b
2
a + b
a
2
+ ab 2 b
2

..
Maple
Remarquer ici que pour l'valuation de l'inverse Maple, ne se soucie pas de
l'inversibilt de la matrice si elle contient des paramtres formels et laisse ceci aux
soins de l'utilisateur, sauf bien sur si la matrice ne contient que des coecients
numriques et qu'elle n'est pas inversible, dans ce cas Maple renverra une erreur.
Un comportement intressant :
> evalm(A+1) ;
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
127
..
niaxcui xarus - i xio
.
axia

a + I b b
b a + I b
b b a + I

..
Maple
Le 1 dans cette instruction est compris comme tant la matrice scalaire avec 1 sur
la diagonale. Il en sera ainsi si on utilise un nom qui n'a pas t dni comme une
matrice.
> evalm(A-x) ;

a x b b
b a x b
b b a x

..
Maple
Evaluation matricielle
L'valuation d'une expression contenant des noms de matrices ou de vecteurs,
s'arrtera aux simplications ventuelles sur les noms de ses derniers, il ne seront pas
remplacs par leurs valeurs. Par exemple si Aest une matrice contenant un coecient
formel a l'instruction subs(a=0,A) n'aura aucun eet, car Maple se contentera de
remplacer a par 0 dans le nom "A" de la matrice et non dans son contenu. Pour
arriver au rsultat escompt ici, il faut demander une substitution explicite dans la
valeur de A par subs(a=1,evalm(A)).
> B :=subs(a=0,A) ;
B = A
> evalm(B) ;

a b b
b a b
b b a

> B :=subs(a=0,evalm(A)) ;
B =

0 b b
b 0 b
b b 0

..
Maple
Signalons la prsence d'autres procdures de construction de matrices de formes
particulires (diagonale,symtrique,...), mais qui ne sont pas directement accessible.
Il faut auparavant charger le package linalg :
> with(linalg) :
Warning, the protected names norm and trace have been redefined and
unprotected
> diag(1,2,3) ;

I 0 0
0 2 0
0 0 3

> diag(A,diag(1,1)) ;

a b b 0 0
b a b 0 0
b b a 0 0
0 0 0 I 0
0 0 0 0 I

..
Maple
On peut aussi concatner plusieurs matrices (ou vecteurs ) en utilisant concat.
> M :=k->diag(k,k,k) ;V :=x->vector(4,[1,x,x^2,x^3]) ;
M = k

k 0 0
0 k 0
0 0 k

V = x [I, x, x
2
, x
3
]
..
.. ..
128
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
> concat(M(1),M(2),M(3)) ;

I 0 0 2 0 0 3 0 0
0 I 0 0 2 0 0 3 0
0 0 I 0 0 2 0 0 3

> concat(V(a),V(b),V(c),V(d)) ;

I I I I
a b c d
a
2
b
2
c
2
d
2
a
3
b
3
c
3
d
3

..
Maple
concat s'avre particulirement interessante pour la construction de matrices de
passage.
IV.2 Enfin de lalgebre linaire :
> restart ;
..
Maple
Commenons par charger le package linalg.
> with(linalg) ;
[BlockDiagonal , GramSchmidt , JordanBlock , LUdecomp , QRdecomp ,
Wronskian , addcol , addrow , adj , adjoint , angle , augment , backsub , band ,
basis , bezout , blockmatrix , charmat , charpoly , cholesky , col , coldim , colspace ,
colspan , companion , concat , cond , copyinto , crossprod , curl , denite , delcols ,
delrows , det , diag , dierge , dotprod , eigenals , eigenalues , eigeneors ,
eigenes , entermatrix , equal , exponential , extend , gausselim , bonacci ,
forwardsub , frobenius , gausselim , gaussjord , geneqns , genmatrix , grad ,
hadamard , hermite , hessian , hilbert , htranspose , ihermite , indexfunc ,
innerprod , intbasis , inerse , ismith , issimilar , iszero , jacobian , jordan ,
kernel , laplacian , leasqrs , linsole , matadd , matrix , minor , minpoly ,
mulcol , mulrow , multiply , norm , normalize , nullspace , orthog , permanent ,
piot , potential , randmatrix , randeor , rank , ratform , row , rowdim ,
rowspace , rowspan , rref , scalarmul , singularals , smith , ackmatrix ,
submatrix , subeor , sumbasis , swapcol , swaprow , syleer , toeplitz , trace ,
transpose , andermonde , ecpotent , edim , eor , wronskian] ..
Maple
Remarquer la liste des procdures maintenant disponibles, et dont certaines portent
des noms vocateurs. Voici dans leur ordre d'apparition, une courte description de
celle qui sont les plus utiles pour nous. A tant une matrice donne (une matrice
carre si ncessaire) et U et V deux lies de vecteurs qui ont la mme taille.
basis(V) retourne une famille libre maximale extraite de la famille de
vecteurs V : une base de Vect(V).
charpoly(A,x) retourne le polynme caractristique de A, x tant le nom de
l'indtermine que l'on veut utiliser.
cholesky(A) si A est une matrice symtrique positive, retourne une matrice
triangulaire suprieure T telle que A =
t
TT
col(A,k) retourne la k
me
colonne de A.
coldim(A) retourne le nombre de colonne de A. Utile si on veut crire une
procdure avance faisant intervenir des matrices. rowdim(A)
donne le nombre de lignes de A.
colspace(A) retourne une base du sev engendr par les vecteurs colonnes de
A.
concat dj t dcrite.
delcols(A,k..h) permet d'liminer les colonnes d'indices de k h de A.
delrows(A,k..h) la mme chose pour les lignes.
det(A) n'a pas besoin de description !
eigenvals(A) retourne la squence des valeurs propres de A, chacune tant
rpte autant de fois que sa multiplicit.
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
129
..
niaxcui xarus - i xio
.
axia
eigenvects(A) retourne un rsultat composite comprenant les valeurs propres
de A, leurs multiplicits et une base de chaque sous espace
propre. Susant pour voir si une matrice est diagonalisable ou
pas.
equal(A,B) retourne true (vrai) si les matrices Aet Bsont gales , false (faux)
sinon. Utile dans une instruction conditionnelles ou dans une
boucle while.
gausselim(A) retourne la rduite de la matrice A par la mthode de Gauss.
intbasis(U,V) retourne une base de l'intersection des sevs engendrs par les
familles de vecteurs U et V.
inverse(A) retourne l'inverse de A si c'est possible, un message d'erreur
sinon. on peut obtenir la mme chose avec evalm(A^(-1)).
jordan(A) retourne la rduite de Jordan de la matrice A, en fait une ma-
trice diagonale ou triangulaire suprieure (quand c'est possible)
semblable A.
jordan(A,'P') retourne la rduite de Jordan de A et stocke la matrice de
passage dans le nom P, ainsi on peut rduire une matrice et
rcuprer la matrice de passage par une seule instruction.
kernel(A) retourne une base du noyau de A. nullspace(A) fait la mme
chose.
linsolve(A,B) donne les solutions de l'quation AX=B, A et B tant des
matrices qui ont le mme nombre de lignes. les solutions sont
exprimes l'aide de paramtres internes de la forme _t[1],
_t[2],.. on peut leur donner des valeurs particulires en utilisant
subs.
minpoly(A,x) retourne le polynme minimal de A.
QRdecomp(A,Q='P') retourne une matrice triangulaire suprieure Ret stocke dans
le nom P une matrice orthogonale telles que A = PR.
randmatrix(n,m) construit une matrice de taille n,m avec des coecients ala-
toires.
rank(A) le rang de A.
rowspace(A) une base du sev engendr par les vecteurs lignes de A.
sumbasis(U,V) retourne une base de la somme des sevs engendrs par les
familles de vecteurs U et V.
trace(A) la trace de A.
transpose(A) la transpose de A.
Exemple 1 : Rduction de matrices
> A :=randmatrix(4,4) ;
A =

7 22 33 94
87 36 0 62
97 73 4 83
I0 62 82 80

> B :=matrix(4,4,1) ;
B =

I I I I
I I I I
I I I I
I I I I

..
Maple
> charpoly(A,x) ;
II343378 662223 x 3I97 x
2
I3 x
3
+ x
4
> factor(charpoly(A,x)) ; #problmes en vue.
..
.. ..
130 Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
II343378 662223 x 3I97 x
2
I3 x
3
+ x
4
> eigenvals(A) ;
RootOf (II343378 662223 _Z 3I97 _Z
2
I3 _Z
3
+ _Z
4
, index = I),
RootOf (II343378 662223 _Z 3I97 _Z
2
I3 _Z
3
+ _Z
4
, index = 2),
RootOf (II343378 662223 _Z 3I97 _Z
2
I3 _Z
3
+ _Z
4
, index = 3),
RootOf (II343378 662223 _Z 3I97 _Z
2
I3 _Z
3
+ _Z
4
, index = 4)
..
Maple
RootOf (P(_Z), index = k) signie racine de P, indexe par k pour direncier
entre les racines. Malin Maple ! On peut quand mme forcer l'valuation en utilisant
allvalues.
> map(allvalues,[eigenvals(A)]) : #trs couteux en photocopies donc
pass sous silence.
..
Maple
Changeons pour une matrice plus gentille.
> eigenvals(B) ;
0, 0, 0, 4
> epropre :=eigenvects(B) ;
epropre = [0, 3, {[ I 0 0 I ] , [ I 0 I 0 ] , [ I I 0 0 ]}],
[4, I, {[ I I I I ]}]
..
Maple
4 est une va.p de multiplicit 1 et un vecteur dans la base du sous espace propre, 0
est une valeur propre de multiplicit 3 et 3 vecteurs dans la base du sep. La matrice
B est diagonalisable. On peut rcuprer la base de vecteurs propres par :
> vpropre :=map(L->op(L[3]),[epropre]) ;
vpropre = [[ I I 0 0 ] , [ I 0 I 0 ] , [ I 0 0 I ] ,
[ I I I I ]]
..
Maple
epropre est une squence dont les oprandes sont des lies de la forme
[val propre, mul t, {base du sep}], on 'mappe' alors la liste [epropre], la fonction
qui une liste L associe la squence des oprandes de son troisime lment, ici la
squence des vecteurs de la base du sous espace propre. Rappelez-vous que 'map-
per' la squence epropre ne marchera pas. Le rsultat est une liste constitue des
vecteurs d'une base de vecteur propre.
Former ensuite la matrice de passage par :
> P :=concat(op(vpropre)) ;
P =

I I I I
I 0 0 I
0 I 0 I
0 0 I I

..
Maple
et vrier la formule de passage :
> equal(B,P&*diag(0,0,0,4)&*P^(-1)) ;
true
..
Maple
On peut aussi dterminer les vecteurs propres la main :
> vec1 :=linsolve(B-4,vector(4,0)) ;
vec = [ _t
I
_t
I
_t
I
_t
I
]
..
Maple
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
131
..
niaxcui xarus - i xio
.
axia
On rcupre une base pour chaque sous espace propre par :
> e1 :=subs(_t[1]=1,evalm(vec1)) ;
e = [ I I I I ]
> vec2 :=linsolve(B,vector(4,0)) ;
vec = [ _t
I
_t
2
_t
3
_t
I
_t
2
_t
3
]
> e2 :=subs(_t[1]=1,_t[2]=0,_t[3]=0,evalm(vec2)) ;
e = [ I I 0 0 ]
> e3 :=subs(_t[1]=0,_t[2]=1,_t[3]=0,evalm(vec2)) ;
e = [ I 0 I 0 ]
> e4 :=subs(_t[1]=0,_t[2]=0,_t[3]=1,evalm(vec2)) ;
e = [ I 0 0 I ]
..
Maple
La matrice de passage maintenant :
> concat(e1,e2,e3,e4) ;

I I I I
I I 0 0
I 0 I 0
I 0 0 I

..
Maple
Exemple 2 : Un endomorphisme de R
4
[X]
On considre l'endomorphisme T de R
4
[X] dni par
T (P) = 2XP

+ (I X
2
)P

criture de la matrice de T dans la base canonique :


On construit d'abords une procdure qui un lment de R
4
[X] retourne le vecteur
colonne de ses coordonnes dans la base canonique de R
4
[X] .
> coord :=P->vector(5,[seq(coeff(P,X,k),k=0..4)]) ;
coord = P vector (, [seq(coef (P, X, k), k = ..)])
..
Maple
On dnit la procdure Tet on rcupre les vecteurs des coordonnes des polynmes
T(X
k
).
> T :=P->expand(2*X*diff(P,X)+(1-X^2)*diff(P,X,X)) ;
T = P expand( X (dif (P, X)) + ( X

) (dif (P, X, X)))


> T(X^4) ;
4 X
4
+ I2 X
2
> coord(T(X^4)) ;
[ 0 0 I2 0 4 ]
> vects :=map(coord,[T(X^k) $k=0..4]) ;
vects = [[ 0 0 0 0 0 ], [ 0 2 0 0 0 ], [ 2 0 2 0 0 ],
[ 0 6 0 0 0 ], [ 0 0 I2 0 4 ]]
..
Maple
La matrice de T dans la base canonique maintenant :
> M :=concat(op(vects)) ;
M =

0 0 2 0 0
0 2 0 6 0
0 0 2 0 I2
0 0 0 0 0
0 0 0 0 4

> eigenvects(M) ;
..
.. ..
132
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
[0, 2, {[ I 0 0 0 0 ] , [ 0 3 0 I 0 ]}],
[4, I, {[ I 0 2 0 I ]}],
[2, 2, {[ 0 I 0 0 0 ] , [ I 0 I 0 0 ]}]
..
Maple
O on voit que T est diagonalisable de valeurs propres (0, 2) , (2, 2) et (4, I) .
Pour rcuprer les vecteurs propres on pourrait crire la procdure inverse de coord :
> icoord :=V->sum(V[k]*X^(k-1),k=1..5) ;
icoord = V V
I
+ V
2
X + V
3
X
2
+ V
4
X
3
+ V
3
X
4
> v :=vector(5,[0,1,1,0,1]) ;
v = [ 0 I I 0 I ]
> icoord(v) ;
X + X
2
+ X
4
> VECTpropre :=map(L->op(L[3]),[eigenvects(M)]) ;
VECTpropre = [[ 0 3 0 I 0 ] , [ I 0 0 0 0 ] ,
[ I 0 2 0 I ] , [ I 0 I 0 0 ] , [ 0 I 0 0 0 ]]
> POLpropre :=map(icoord,VECTpropre) ;
POLpropre = [3 X + X
3
, I, I 2 X
2
+ X
4
, I + X
2
, X]
..
Maple
Exemple 3 : Recherche dune matrice coefcients entiers et de dterminant 1.
On dnit d'abords une procdure qui aura pour rle de donner au hasard un entier
compris entre -2 et 2 :
> haz :=rand(-2..2) ;
haz = proc () proc () optionbuiltin; 39I endproc (6, 3, 3) 2 endproc
..
Maple
haz est maintenant une procdure qui ne prend aucun argument et qui gnre
chaque appel un entier entre -2 et 2.
> haz() ;
I
> haz() ;
2
..
Maple
Une matrice au hazard coecients entiers entre -2 et 2 :
> M :=matrix(4,4,haz) ;
M =

2 0 I 2
I I 2 0
I 2 2 2
I I 0 I

..
Maple
Maintenant une boucle while qui ne s'arrtera que lorsque elle trouve une matrice
de det 1 :
> while det(M) <> 1 do M :=matrix(4,4,haz) od :
> evalm(M) ;det(M) ;

0 I I 2
2 0 I I
2 I I I
I 0 0 I

I
..
Maple
Une telle matrice peut servir pour construire une matrice diagonalisable (ou trigona-
lisable) qui conserve des coecients entiers et qui aura des valeurs propres dcides
l'avance (truc de profs de prpas) :
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
133
..
niaxcui xarus - i xio
.
axia
> A :=evalm(M&*diag(0,1,1,-1)&*M^(-1)) ;
A =

3 8 4 8
0 I 0 2
0 0 I 2
I 2 I 2

..
Maple
Exemple 4 : Dcomposition de Dunford en utilisant (en trichant) Jordan
On considre la matrice suivante (fabrique par le procd de l'exemple 3)
> A :=matrix([[-1,2,2,4,0],[-4,20,15,16,2],[7,-35,-26,-27,-4],[-
3,14,10,10,2],[5,-25,-17,-16,-3]]) ;
A =

I 2 2 4 0
4 20 I3 I6 2
7 33 26 27 4
3 I4 I0 I0 2
3 23 I7 I6 3

..
Maple
Jordanisation
> T :=jordan(A,'P') ;
T =

0 0 0 0 0
0 I I 0 0
0 0 I 0 0
0 0 0 I I
0 0 0 0 I

> evalm(P) ;

6 2
68
9
0 3/2
3 I
I6
9
3/2 I/4
6 I
7
9
3/2 7/4
3 0 0 0 3/2
3 I
23
9
3 3/2

..
Maple
Une petite vrication :
> equal(P&*T&*P^(-1),A) ;
true
..
Maple
Le petit malin remarquera que le travail de diagonalisation fait dans l'exemple 1 est
de ce fait obsolte !
On rcupre la matrice diagonaleL forme des lments diagonaux de T et la matrice
nilpotente N = T L.
> L :=diag(T[k,k] $k=1..5) ; N :=evalm(T-L) ;
L =

0 0 0 0 0
0 I 0 0 0
0 0 I 0 0
0 0 0 I 0
0 0 0 0 I

N =

0 0 0 0 0
0 0 I 0 0
0 0 0 0 0
0 0 0 0 I
0 0 0 0 0

..
.. ..
134
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio
..
Maple
Retour la base canonique :
> K :=evalm(P&*L&*P^(-1)) ;M :=evalm(P&*N&*P^(-1)) ;
K =

I 0 0 2 0
I 3 4 3 0
4 20 I3 I6 2
3 I4 I0 I0 2
I 2 2 3 I

M =

0 2 2 2 0
3 I3 II II 2
3 I3 II II 2
0 0 0 0 0
6 27 I9 I9 4

..
Maple
Les vrications maintenant
> equal(A,K+M) ;equal(K&*M,M&*K) ;equal(M^5,matrix(5,5,0)) ;
true
true
true
..
Maple
Exemple 5
Il s'agit ici de voir quelle condition la matrice suivante, A, est-elle diaginalisable ?
> A :=matrix(5,5,[a,0,0,0,b,0,a,0,b,0,0,1,2,1,0,0,b,0,a,0,b,0,0,0,a]) ;
A =

a 0 0 0 b
0 a 0 b 0
0 I 2 I 0
0 b 0 a 0
b 0 0 0 a

..
Maple
Les lments propres de A.
> EP :=eigenvects(A) ;
EP = [2, I, {[ 0 0 I 0 0 ]}],
[b+a, 2, {[ I 0 0 0 I ] , [ 0 I/2 b + I/2 a I I I/2 b + I/2 a I 0 ]}],
[b + a, 2, {[ 0 I 0 I 0 ] , [ I 0 0 0 I ]}]
..
Maple
En apparence donc A est diagonalisable. Mais voil, les valeurs propres 2, a b,
a + b ne sont pas forcment deux deux distinctes pour ceraines valeurs de a et b
(Maple s'en soucie peu) , et dans ce cas la famille de vecteurs propres calcule va-t-
elle toujours constituer une base ? Pour en tre sr nous allons constituer la matrice
de passage dans cette famille (de vecteurs propres) et vrier la main dans quel cas
elle va tre non inversible. On cre ensuite une matrice B qui correspond A dans
ce cas l.
La squence des vecteurs propres de A :
> VP :=seq(op(EP[k][3]),k=1..3) ;
VP = [ 0 0 I 0 0 ] , [ I 0 0 0 I ] ,
[ 0 I/2 b + I/2 a I I I/2 b + I/2 a I 0 ] ,
[ 0 I 0 I 0 ] , [ I 0 0 0 I ]
..
Maple
La matrice de passage :
..
.. Les cahiers de prpas N

1
Algbre linaire avec Maple
..
135
..
niaxcui xarus - i xio
.
axia
> P :=concat(VP) ;
P =

0 I 0 0 I
0 0 I/2 b + I/2 a I I 0
I 0 I 0 0
0 0 I/2 b + I/2 a I I 0
0 I 0 0 I

..
Maple
Dterminant de P pour voir dans quels cas elle est non inversible : a+b=2
> det(P) ;
2 b + 2 a 4
> CAS :=solve(det(P)) ;
CAS = {a = b + 2, b = b}
..
Maple
On construit la matrice B qui correspond A dans le cas o a+b=2.
> B :=subs(CAS,evalm(A)) ;
B =

b + 2 0 0 0 b
0 b + 2 0 b 0
0 I 2 I 0
0 b 0 b + 2 0
b 0 0 0 b + 2

> eigenvects(B) ;
[2, 3, {[ I 0 0 0 I ] , [ 0 0 I 0 0 ]}],
[2 b + 2, 2, {[ 0 I 0 I 0 ] , [ I 0 0 0 I ]}]
..
Maple
On voit alors que dans le cas o a+b=2, la matrice A est non diagonalisable.
J
..
.. ..
136
Algbre linaire avec Maple
Les cahiers de prpas N

1
..
axia
.
niaxcui xarus - i xio

Você também pode gostar