TD 9 Matrices et Vecteurs

Maple dispose de nombreuses fonctions pour manipuler des matrices et obtenir un grand nombre de résultats. Pour les versions antérieures à la version VI,, ces fonctions étaient regroupées dans la bibliothèque linalg . Dans la version VI, une nouvelle bibliothèque a été mise en place, elle s'appelle LinearAlgebra . Pour charger cette bibliothèque, on tapera l'instruction with( LinearAlgebra ): La syntaxe est très différente avec l'ancienne bibliothèque linalg Nous travaillerons au début avec la nouvelle, et aussi avec l'ancienne par la suite..

Définitions et opérations simples

Il y a au moins deux méthodes pour construire un vecteur (colonne).

V1:=Vector(x,y,z);

V2:=<x,y,z>;

Pour un vecteur (ligne);

V3:=Vector[row]([x,y,z]);

V4:=<x|y|z>;

Tester ces différentes définitions.

> with(LinearAlgebra):

> V1:=Vector([x,y,z]);

V1 := _rtable[138164676]

> V2:=<x,y,z>;

V2 := _rtable[138103128]

> V3:=Vector[row]([x,y,z]);

V3 := _rtable[138211304]

> V4:=<x|y|z>;

V4 := _rtable[138192460]

Il y a plusieurs méthodes pour définir une matrice, à partir de l'instruction Matrix.

1) Méthode ligne à ligne, à partir de listes.

AA:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);

2) Méthode colonne par colonne à partir de vecteur

BB:=Matrix([<1,2,3>,<4,5,6>,<7,8,9>]);

Il existe surtout des raccourcis très utiles

Pour construire en ligne

AA2:=<<1|2|3>,<4|5|6>,<7|8|9>>;

BB2:=<<1,2,3>|<4,5,6>|<7,8,9>>;

Tester à nouveau ces différentes méthodes.

Pour avoir l'élément de la deuxième ligne et troisième colonne

AA[2,3];

> AA:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);

AA := _rtable[135933496]

> BB:=Matrix([<1,2,3>,<4,5,6>,<7,8,9>]);

BB := _rtable[136311000]

> AA2:=<<1|2|3>,<4|5|6>,<7|8|9>>;

AA2 := _rtable[138273104]

> BB2:=<<1,2,3>|<4,5,6>|<7,8,9>>;

BB2 := _rtable[145512952]

> AA[2,3];

6

Initialisation des matrices

Que font les instructions

Matrix(3);

Matrix(3,2);

Matrix(1..3,1..3,5);

Soit la fonctions de deux variables

ff:=(m,n)->cos(m*x)*cos(n*x);

Que donne Matrix(5,ff);
Pour définir une matrice identité

Matrix(3,3,shape=identity);

Pour définir une matrice diagonal

Matrix(3,3,4,shape=diagonal);

> Matrix(3);

_rtable[146023496]

> Matrix(3,2);

_rtable[146707732]

> Matrix(1..3,1..3,5);

_rtable[134626088]

> ff:=(m,n)->cos(m*x)*cos(n*x);

ff := proc (m, n) options operator, arrow; cos(m*x)...

> FF:=Matrix(5,ff);

FF := _rtable[134572816]

> Matrix(3,3,shape=identity);

_rtable[134738588]

> Matrix(3,3,4,shape=diagonal);

_rtable[134882124]

Opérations

Addition de deux matrices (de même dimension)
Exécuter

AA+BB;

Multiplication de deux matrices

AA2.BB2;

BB2.AA2;
Inverse de matrice

Calculer <<1,2>|<3,0>>^(-1);

Augmentation de lignes

AA3:=<V3,AA>;

Augmentation de colonnes

BB3:=<BB|V1>;

A partir de la matrice BB2, construire une matrice 4x4 dont la ligne superieure est consituée de zeros ainsi que la dernière colonne, et dont la sous-matrice 3x3 en bas à gauche est donnée par BB2;

> AA+BB;

_rtable[135793940]

> AA2.BB2;

_rtable[137938712]

> BB2.AA2;

_rtable[145349384]

> <<1,2>|<3,0>>^(-1);

_rtable[134771144]

> AA3:=<V3,AA>;

AA3 := _rtable[135154316]

> <BB|V1>;

_rtable[135853272]

> V4:=Vector(3);

V4 := _rtable[135821360]

> BB3:=<BB2|V4>;

BB3 := _rtable[136942876]

> V5:=Vector[row](4);

V5 := _rtable[146155988]

> BB4:=<V5,BB3>;

BB4 := _rtable[137961188]

Applications: exponentielle de matrices, matrices nilpotentes

Si A est une matrice, alors on définit l'exponentielle de A à partir de la relation exp(A) = sum(A^n/n!,n = 0 .. infinity) . L'instruction exponential permet de calculer directement l'exponentielle de A en utilisant la bibliothèque linalg . Calculer aussi la somme pour n=1 à 10 puis n=1 à 20, (on utilisera evalm pour calculer explicitement la somme) et vérifier en utilisant l'instruction evalf que cette somme converge vers l'exponentielle de A.

Calculer l'exponentielle de la matrice A := _rtable[7976000]

> A:=<<1,-3>|<1,-2>>;

A := _rtable[145377876]

> with(linalg):

Warning, the name adjoint has been redefined

Warning, the previous binding of the name GramSchmidt has been removed and it now has an assigned value

Warning, the protected names norm and trace have been redefined and unprotected

> EA:=exponential(A);

EA := matrix([[exp(-1/2)*cos(1/2*sqrt(3))+sqrt(3)*e...

> evalf(evalm(EA));

matrix([[1.193207349, .5335071953], [-1.600521586, ...

> A10:=evalf(evalm(sum(A^n/n!,n=0..10)));

A10 := matrix([[1.193207396, .5335072200], [-1.6005...

> A20:=evalf(evalm(sum(A^n/n!,n=0..20)));

A20 := matrix([[1.193207349, .5335071951], [-1.6005...

Soit une matrice nxn, on appelle une matrice nilpotente une matrice telle que A^n = 0 pour . Déterminer toutes les matrices pour n=2.
Montrer en utilisant l'instruction Jordanform que toutes les solutions sont équivalentes à des matrices triangulaires supérieures avec une ligne située au dessus de la diagonale composée de 1. Même exercices pour n=3. Afficher toutes les solutions et vérifier a postériori que la propriété de nilpotence est vérifiée.

> A:=<<a,b>|<c,d>>;

A := _rtable[148046868]

> CC:=A.A;

CC := _rtable[148211704]

> sols:=solve({seq(seq(CC[i,j],i=1..2),j=1..2)},{a,b,c,d});

sols := {a = 0, c = c, d = 0, b = 0}, {d = d, a = -...

> res1:=subs(sols[1],A);

res1 := _rtable[134894536]

> res2:=subs(sols[2],A);

res2 := _rtable[134986792]

> JordanForm(res1);JordanForm(res2);

_rtable[135639912]

_rtable[136049116]

> A:=<<a,b,c>|<d,e,f>|<g,h,k>>;

A := _rtable[137229608]

> CC:=A.A.A;

CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]
CC := _rtable[138166688]

> sol2:=solve({seq(seq(CC[i,j],i=1..3),j=1..3)},{a,b,c,d,e,f,g,h,k});

sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...
sol2 := {a = 0, c = c, k = 0, d = 0, e = 0, h = h, ...

> for i from 1 to 6 do HH||i:=subs(sol2[i],A);od;

HH1 := _rtable[144872020]

HH2 := _rtable[145107136]

HH3 := _rtable[145274788]

HH4 := _rtable[145219196]

HH5 := _rtable[145419396]
HH5 := _rtable[145419396]
HH5 := _rtable[145419396]
HH5 := _rtable[145419396]

HH6 := _rtable[145486888]

> for i from 1 to 6 do map(simplify,HH||i.HH||i.HH||i);od;

_rtable[150397700]

_rtable[135725796]

_rtable[136318724]

_rtable[137661772]

_rtable[135846328]

_rtable[148228860]

> for i from 1 to 6 do JordanForm(HH||i);od;

_rtable[146964900]

_rtable[135560084]

_rtable[136360048]

_rtable[135729120]

_rtable[144891080]

_rtable[136197100]

>

>