Chapitre 08 : Maple en algèbre linéaire
- Bibliothèque |
- Maple |
- Cours
|
> restart; Les vecteurs et les matrices peuvent être définis comme des tableaux rectangulaires, par la fonction array , rencontrée dans le chapitre sur les tableaux :
Vecteur-ligne d'ordre 3 sans initialisation: > A:=array(1..3);
Vecteur-ligne d'ordre 3 avec initialisation: > B:=array([x,y,z]);
Vecteur-colonne d'ordre 3 sans initialisation: > U:=array(1..3,1..1);print(U);
Vecteur-colonne d'ordre 3 avec initialisation: > V:=array([[x],[y],[z]]);
Matrice carrée d'ordre 2 sans initialisation: > M:=array(1..2,1..2);print(M);
Matrice carrée d'ordre 2 avec initialisation: > N:=array([[a,b],[c,d]]);
Opérations sur les vecteurs et les matrices , avec la fonction evalm : Somme de vecteurs ou de matrices de même dimension avec + > evalm(A+U);
Multiplication de vecteurs ou de matrices de dimensions compatibles avec &* > evalm(M &* N);
Calcul de la matrice inverse, lorsque N est inversible, avec ^(-1) > evalm(N^(-1));
Puissance n-ième avec ^n > evalm(N^3);
Multiplication par un scalaire avec * > evalm(2*M-5*N);
LES OUTILS DU PACKAGE linalg:
Le package
linalg
contient plus d'une centaine d'outils en algèbre linéaire: > with(linalg);
Les fonctions matrix et vector permettent de définir respectivement une matrice (tableau rectangulaire d'objets) ou un vecteur (tableau d'objets à une seule ligne) :
> P:=matrix([[s,t,u,v],[w,x,y,z]]);
Définition d'un vecteur-ligne d'ordre 4 et d'une matrice-colonne d'ordre 3: > V:=vector([a,b,c,d]);
> C:=matrix([[1],[2],[3]]);
Une matrice a le type matrix , un vecteur a le type vector .
Opérations sur les matrices:
A la place de la fonction evalm , on peut utiliser les outils spécifiques du package linalg :
Multiplication de vecteurs ou de matrices de dimensions compatibles avec multiply
> multiply(M,N);
Calcul de la matrice inverse,lorsque N est inversible, avec inverse > inverse(N);
Multiplication par un scalaire
> scalarmul(P,lambda);
Test d'égalité de deux matrices avec equal > equal(M,N);
Etude d'une matrice:
Déterminant et trace d'une matrice carrée (somme des éléments diagonaux): > N:=matrix([[1,2],[4,-3]]);det(N);trace(N);
Rang d'une matrice: > rank(N);
kernel(A); ou nullspace(A); détermine une base du noyau de A > A:=matrix([[2,-2],[-1,1]]);kernel(A);
> colspace(A);
> rowspace(A);
Matrice caractéristique:
> charmat(A,lambda);
> charpoly(A,lambda);
Valeurs propres de A (ce sont les racines du polynôme caractéristique): > eigenvals(A);
Un
vecteur propre
associé à la
valeur propre
> eigenvects(A);
Le résultat affiché signifie que
Modification d'une matrice:
> print(P);
row(P,k) permet d'extraire la k-ième ligne de la matrice P. Le résultat est un vecteur. col(P,k) permet d'extraire la k-ième colonne de la matrice P. Le résultat est un vecteur. > row(P,2),col(P,3);
rowdim(P) et coldim(P) retournent le nombre de lignes et de colonnes de la matrice P . > rowdim(P),coldim(P);
augment(M1,M2,...,Mn) permet de concaténer horizontalement les n matrices M1,M2,...,Mn : > augment(A,P);
stackmatrix(M1,M2,...,Mn) permet de concaténer verticalement les n matrices M1,M2,...,Mn : > stackmatrix(A,N);
copyinto(M,N,m,n) : copie M dans N , l'élément M[1,1] étant copié en > copyinto(N,P,1,2);
swapcol(M,m,n) et swaprow(M,m,n) permettent d'échanger les colonnes (ou les lignes) m et n de la matrice M : > swaprow(A,1,2);
transpose(M) permet de transposer la matrice M : > print(M);transpose(M);
addcol(M,m,n,k) ou addrow(M,m,n,k) rendent une matrice obtenue à partir de M par l'opération col n := col n + k * col m (respectivement lig n := lig n + k * lig m ) :
> print(N);addcol(N,1,2,mu);
Matrices particulières: > vandermonde([a,b,c,d]);
> JordanBlock(expr,4);
LES OUTILS DU PACKAGE LinearAlgebra:
A partir de la version 7, existe dans Maple un nouveau package LinearAlgebra avec des outils similaires à ceux du package linalg et destiné à supplanter l'ancien. En voici les fonctions: > with(LinearAlgebra);
On définit une matrice A dont on calcule le déterminant, la matrice et le polynôme caractéristique, ainsi que les valeurs propres et vecteurs propres associés:
>
A:=Matrix([[1,-1,-1],[-2,2,3],[2,-2,-3]]);
Exercice corrigé 8:
Rechercher les matrices carrées
X
d'ordre 2 telles que
> with(linalg):A:=matrix(2,2,1);X:=matrix(2,2):
> Y:=evalm(X^2+X-A);
> Y:={seq(seq(Y[i,j],j=1..2),i=1..2)};
>
solutions:={solve(Y)}:
Donc 4 matrices solutions.
Travail dirigé 8:
TD 8.1: Ecrire une procédure pcd(L::list) retournant à partir d'une liste donnée L la liste obtenue par permutation circulaire vers la droite des éléments de L . Exemple: > pcd([a,b,c,d,e,f,g]);
TD 8.2: Ecrire une procédure circulante_droite(n::posint) retournant à partir de l'entier n> 0 une matrice carrée d'ordre n telle que
- sa première ligne est constituée par les entiers de 1 à n . - pour k> 1 , sa k-ième ligne est déduite de la ligne précédente par permutation circulaire vers la droite de ses éléments.
Exemple: > circulante_droite(5);
TD 8.3:
2 matrices M et N sont égales si et seulement si elles ont même nombre de lignes, même nombre de colonnes, et les mêmes coefficients . Sans avoir recours à la fonction préexistante equal de Maple, écrire une procédure egal(M: : matrix , N: : matrix) retournant la valeur booléenne true si M=N et false sinon.
|
, où
.





