Apprendre Maple Maple en algèbre linéaire

 
  Page d'accueilPage d'accueil   RechercherRechercher   Forum de discussionForum de discussion   ContactContact   SommaireSommaire 
  Cours MapleCours Maple   Travaux dirigésTravaux dirigés   Thèmes d'activitésThèmes d'activités   Thèmes d'activitésMaplets
Ecran MapleEcran Maple  TéléchargementTéléchargement  BibliographieBibliographie  LiensLiens  

 

 

Page d'accueil   Cours Maple   << Chapitre précédent   Chapitre suivant >>


FONCTIONS DE BASE:

 

> 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);

A := array(1 .. 3,[])

Vecteur-ligne d'ordre 3 avec initialisation:

> B:=array([x,y,z]);

B := vector([x, y, z])

Vecteur-colonne d'ordre 3 sans initialisation:

> U:=array(1..3,1..1);print(U);

U := array(1 .. 3,1 .. 1,[])

matrix([[U[1,1]], [U[2,1]], [U[3,1]]])

Vecteur-colonne d'ordre 3 avec initialisation:

> V:=array([[x],[y],[z]]);

V := matrix([[x], [y], [z]])

 

Matrice carrée d'ordre 2 sans initialisation:

> M:=array(1..2,1..2);print(M);

M := array(1 .. 2,1 .. 2,[])

matrix([[M[1,1], M[1,2]], [M[2,1], M[2,2]]])

Matrice carrée d'ordre 2 avec initialisation:

> N:=array([[a,b],[c,d]]);

N := matrix([[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);

matrix([[A[1]+U[1,1]], [A[2]+U[2,1]], [A[3]+U[3,1]]...

Multiplication de vecteurs ou de matrices de dimensions compatibles avec &*

> evalm(M &* N);

matrix([[M[1,1]*a+M[1,2]*c, M[1,1]*b+M[1,2]*d], [M[...

Calcul de la matrice inverse, lorsque N est inversible, avec ^(-1)

> evalm(N^(-1));

matrix([[d/(a*d-b*c), -b/(a*d-b*c)], [-c/(a*d-b*c),...

Puissance n-ième avec ^n

> evalm(N^3);

matrix([[(a^2+b*c)*a+(a*b+b*d)*c, (a^2+b*c)*b+(a*b+...

Multiplication par un scalaire avec *

> evalm(2*M-5*N);

matrix([[2*M[1,1]-5*a, 2*M[1,2]-5*b], [2*M[2,1]-5*c...

 

LES OUTILS DU PACKAGE linalg:

 

Le package linalg contient plus d'une centaine d'outils en algèbre linéaire:
  

> with(linalg);

[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...

 

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) :


Définition d'une matrice 2x4 :

> P:=matrix([[s,t,u,v],[w,x,y,z]]);

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]);

V := vector([a, b, c, d])

> C:=matrix([[1],[2],[3]]);

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);

matrix([[M[1,1]*a+M[1,2]*c, M[1,1]*b+M[1,2]*d], [M[...

Calcul de la matrice inverse,lorsque N est inversible, avec inverse

> inverse(N);

matrix([[d/(a*d-b*c), -b/(a*d-b*c)], [-c/(a*d-b*c),...

Multiplication par un scalaire lambda avec scalarmul

> scalarmul(P,lambda);

matrix([[lambda*s, lambda*t, lambda*u, lambda*v], [...

Test d'égalité de deux matrices avec equal

> equal(M,N);

false

 

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);

N := matrix([[1, 2], [4, -3]])

-11

-2

Rang d'une matrice:

> rank(N);

2

kernel(A); ou nullspace(A); détermine une base du noyau de A
colspace(A); détermine une base du sous-espace engendré par les vecteurs-colonnes de A
rowspace(A); détermine une base du sous-espace engendré par les vecteurs-lignes de A

> A:=matrix([[2,-2],[-1,1]]);kernel(A);

A := matrix([[2, -2], [-1, 1]])

{vector([1, 1])}

> colspace(A);

{vector([1, -1/2])}

> rowspace(A);

{vector([1, -1])}

 

Matrice caractéristique: lambda*I-A , det(lambda*I-A) .

> charmat(A,lambda);

matrix([[lambda-2, 2], [1, lambda-1]])

> charpoly(A,lambda);

lambda^2-3*lambda

Valeurs propres de A (ce sont les racines du polynôme caractéristique):

> eigenvals(A);

0, 3

Un vecteur propre associé à la valeur propre lambda est un vecteur X non nul tel que A*X = lambda*X .

> eigenvects(A);

[0, 1, {vector([1, 1])}], [3, 1, {vector([-2, 1])}]...

 

Le résultat affiché signifie que lambda = 0 est une valeur propre d'ordre 1 de vecteur propre associé

X = (1, 1) et que lambda = 3 est une valeur propre d'ordre 1 de vecteur propre associé X = (-2, 1) .

 

Modification d'une matrice:

 

> print(P);

matrix([[s, t, u, v], [w, x, y, z]])

 

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);

vector([w, x, y, z]), vector([u, y])

 

rowdim(P) et coldim(P) retournent le nombre de lignes et de colonnes de la matrice P .

> rowdim(P),coldim(P);

2, 4

 

augment(M1,M2,...,Mn) permet de concaténer horizontalement les n matrices M1,M2,...,Mn :

> augment(A,P);

matrix([[2, -2, s, t, u, v], [-1, 1, w, x, y, z]])

 

stackmatrix(M1,M2,...,Mn) permet de concaténer verticalement les n matrices M1,M2,...,Mn :

> stackmatrix(A,N);

matrix([[2, -2], [-1, 1], [1, 2], [4, -3]])

 

copyinto(M,N,m,n) : copie M dans N , l'élément M[1,1] étant copié en

> copyinto(N,P,1,2);

matrix([[s, 1, 2, v], [w, 4, -3, z]])

 

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);

matrix([[-1, 1], [2, -2]])

 

transpose(M) permet de transposer la matrice M :

> print(M);transpose(M);

matrix([[M[1,1], M[1,2]], [M[2,1], M[2,2]]])

matrix([[M[1,1], M[2,1]], [M[1,2], M[2,2]]])

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);

matrix([[1, 2], [4, -3]])

matrix([[1, mu+2], [4, 4*mu-3]])

Matrices particulières:

> vandermonde([a,b,c,d]);

matrix([[1, a, a^2, a^3], [1, b, b^2, b^3], [1, c, ...

> JordanBlock(expr,4);

matrix([[expr, 1, 0, 0], [0, expr, 1, 0], [0, 0, ex...

 

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);

[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basi...

 

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]]);
    Determinant(A);
    CharacteristicMatrix(A,lambda);
    factor(CharacteristicPolynomial(A,lambda));
    Eigenvalues(A);
    Eigenvectors(A);

A := _rtable[4468540]

0

_rtable[14270440]

(lambda-1)*lambda*(lambda+1)

_rtable[14253092]

_rtable[14253172], _rtable[14279184]

 


 

Exercice corrigé 8:

 

Rechercher les matrices carrées X d'ordre 2 telles que X^2+X = A , où A := MATRIX([[1, 1], [1, 1]]) .

> with(linalg):A:=matrix(2,2,1);X:=matrix(2,2):

A := matrix([[1, 1], [1, 1]])

> Y:=evalm(X^2+X-A);

Y := matrix([[X[1,1]^2+X[1,2]*X[2,1]+X[1,1]-1, X[1,...

> Y:={seq(seq(Y[i,j],j=1..2),i=1..2)};

Y := {X[1,1]^2+X[1,2]*X[2,1]+X[1,1]-1, X[1,2]*X[2,1...
Y := {X[1,1]^2+X[1,2]*X[2,1]+X[1,1]-1, X[1,2]*X[2,1...

> solutions:={solve(Y)}:
    for k to nops(solutions) do
        X:=matrix(2,2):assign(solutions[k]):print(X);
    end do:

matrix([[0, 1], [1, 0]])

matrix([[-3/2, -1/2], [-1/2, -3/2]])

matrix([[1/2, 1/2], [1/2, 1/2]])

matrix([[-1, -1], [-1, -1]])

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]);

[g, a, b, c, d, e, f]

 

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);

matrix([[1, 2, 3, 4, 5], [5, 1, 2, 3, 4], [4, 5, 1,...

 

TD 8.3:

Test d'égalité de 2 matrices:

 

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.

 

 

 

 

haut de cette page


©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.