> with(linalg);

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

[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, cold...

L'utilisation du package "linalg" va nous permettre de d'utiliser des outils d'algèbre linéaire en Maple.

Dans les quelques lignes qui suivent, on montre comment utiliser certaines d'entre-elles. Regarder ces opérations (et l'aide en ligne si elles ne vous semblent pas très claires). Vous pouvez aussi vous familiariser avec d'autres fonctions Maple listées après l'instruction précédente "with(linalg)".

> A:=matrix(3,2,[1,2,3,4,5,6]);

A := matrix([[1, 2], [3, 4], [5, 6]])

> B:=array(1..2,1..3,[[1,2,3],[3,4,6]]);

B := matrix([[1, 2, 3], [3, 4, 6]])

> A[3,2];

6

> type(B,matrix); B[1,1];

true

1

> rowdim(B);coldim(B);

2

3

> C1:=col(A,2); C2:=row(A,2);

C1 := vector([2, 4, 6])

C2 := vector([3, 4])

> type(C1,matrix);type(C1,matrix);

false

false

> C1:=convert(C1,matrix);

> C2:=transpose(convert(C2,matrix));

C1 := matrix([[2], [4], [6]])

C2 := matrix([[3, 4]])

> type(C2,matrix);

true

> v:=vector([0,1]);

v := vector([0, 1])

> multiply(A,v);

vector([2, 4, 6])

> A:=randmatrix(2, 2);

A := matrix([[43, 6], [39, -67]])

> B:=inverse(A);

B := matrix([[67/3115, 6/3115], [39/3115, (-43)/3115]])

> multiply(A,B);

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

> alea:=proc() evalf(rand(10^6)()*10^(-4)); end;

alea := proc () evalf(1/10000*rand(1000000)()) end proc

>

> A:=randmatrix(3,3,entries = alea);

A := matrix([[96.55240000, 28.11450000, 20.47520000], [21.03370000, 48.04300000, 16.08900000], [82.11910000, 91.34810000, 22.00050000]])

> B:=inverse(A);

B := matrix([[0.7221394824e-2, -0.2190299454e-1, 0.9296960325e-2], [-0.1502023529e-1, -0.7747458961e-2, 0.1964460758e-1], [0.3541080934e-1, .1139233133, -0.7081455377e-1]])

> multiply(A,B);

matrix([[.9999999999, -0.1e-8, 0.1e-8], [-0.2e-9, 1.000000001, 0.], [-0.4e-9, -0.1e-8, 1.000000003]])

>

> A:=randmatrix(4,4);

A := matrix([[23, 34, -81, -95], [63, -24, -63, -36], [85, 35, -67, 19], [0, 60, 95, 95]])

> minor(A,3,3);

matrix([[23, 34, -95], [63, -24, -36], [0, 60, 95]])

> delrows(A,1..1);

matrix([[63, -24, -63, -36], [85, 35, -67, 19], [0, 60, 95, 95]])

> delcols(A,2..3);

matrix([[23, -95], [63, -36], [85, 19], [0, 95]])

> swapcol(A,1,2);

matrix([[34, 23, -81, -95], [-24, 63, -63, -36], [35, 85, -67, 19], [60, 0, 95, 95]])

> swaprow(A,3,4);

matrix([[23, 34, -81, -95], [63, -24, -63, -36], [0, 60, 95, 95], [85, 35, -67, 19]])

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

A := matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

> addrow(A,1,2,1);

matrix([[1, 2, 3], [5, 7, 9], [7, 8, 9]])

> addrow(A,1,2,-2);

matrix([[1, 2, 3], [2, 1, 0], [7, 8, 9]])

> addcol(A,1,3,-2);

matrix([[1, 2, 1], [4, 5, -2], [7, 8, -5]])

> mulrow(A,2,-1);

matrix([[1, 2, 3], [-4, -5, -6], [7, 8, 9]])

> mulcol(A,1,1/100);

matrix([[1/100, 2, 3], [1/25, 5, 6], [7/100, 8, 9]])

>

1) Ecrire une procédure Pivoter qui, étants donnés une matrice A, un numéro de ligne i et un numéro de colonne j, pivote autour de la ligne i pour la colonne j. En d'autres termes, le résultat de la procédure doit être la matrice A dans laquelle tous les coefficients de la colonne j valent 0 excépté A[i,j].

>

2) Utiliser la procédure précédente pour écrire une procédure Gauss qui applique la mathode du pivot de Gauss à une matrice A (vous pouvez si vous le souhaitez utiliser le package "LinearAlgebra" plus complet que "linalg").

Cette procédure doit, étant donnée un matrice A (rectangulaire), calculer une matrice échelonnée (ou échelonnée réduite) équivalente à A.

3) Ecrire une procédure Maple qui calcule le déterminant d'une matrice carrée par la méthode de Gauss (attention à l'effet des échanges de lignes sur le déterminant).

4) Généraliser les procédures ci-dessus pour calculer l'inverse d'une matrice carrée donnée (quand c'est possible).

5) Ecrire une procédure permettant de claculer le déterminant d'une matrice mais pas la méthode des mineurs.

6) Modifier l'algorithme précédent pour calculer le permanent d'une matrice

7) comparer les performances des algorithmes ci-dessus (sur des matrices aléatoires). Comparer aussi les performances des procédures Maple existantes pour calculer le déterminant et le permanent.