Programmation Octave/Algèbre linéaire

Un livre de Wikilivres.

Opération sur les vecteurs[modifier | modifier le wikicode]

On peut calculer la norme d'un vecteur grâce à la commande "norm()" :

octave> x = [2 3 1 1 1];
octave> n = norm(x)
n = 4

La commande "dot(x,y)" calcul le produit scalaire de deux vecteurs :

octave> y = [-1 1 2]
y =

 -1   1   2

octave> x = [1 1 1]
x =

 1  1  1

octave>z = dot(x,y)
z = 2

La commande "cross(x,y)'" calcul le produit vectoriel de vecteur en trois dimensions :

octave> z = cross(x,y)
z =

  1  -3   2

Opérations sur les matrices[modifier | modifier le wikicode]

Nous avons déjà vu que nous pouvions multiplier des matrices et calculer leurs transposées. Mais Octave permet aussi de les élever à une puissance :

octave> A = [-1 2;2 0]
A =

 -1   2
  2   0

octave>B = A^4
B =

  29  -18
 -18   20

La commande "rank()" calcul le rang d'une matrice :

octave> r = rank(A)
r = 2

La commande "trace" permet d'obtenir la trace d'une matrice :

octave> t = trace(A)
t = -1


On peut aussi, grâce à la commande "expm()", calculer l'exponentielle de la matrice :

octave> E = expm(A)
E =

 0.36788  7.38906
 7.38906  1.00000

Matrices particulières[modifier | modifier le wikicode]

Octave fournit plusieurs fonctions pour créer des matrices particulières.

Matrice nulle[modifier | modifier le wikicode]

Pour créer une matrice nulle, il faut se servir de la fonction "zeros" :

octave> null = zeros(5, 3)
null =

 0  0  0
 0  0  0
 0  0  0
 0  0  0
 0  0  0

Matrice identité[modifier | modifier le wikicode]

La fonction "eye" crée une matrice identité.

octave:13> I = eye(3)
I =

 1  0  0
 0  1  0
 0  0  1

Matrice diagonale[modifier | modifier le wikicode]

La fonction "diag()" crée des matrices diagonales, sur-diagonales ou sous-diagonales à partir d'un vecteur :

octave>A = diag([1 2 3],0)
A =

 1  0  0
 0  2  0
 0  0  3

octave>A = diag([1 2 3],2)
A =

 0  0  1  0  0
 0  0  0  2  0
 0  0  0  0  3
 0  0  0  0  0
 0  0  0  0  0

octave>A= diag([1 2 3],-1)
A =

 0  0  0  0
 1  0  0  0
 0  2  0  0
 0  0  3  0

Matrice aléatoire[modifier | modifier le wikicode]

La fonction "rand()" crée une matrice dont les coefficients sont des nombres choisis aléatoirement entre 0 et 1 :

octave> rand(2,3)
ans =

 0.871644  0.651894  0.563654
 0.076660  0.790505  0.275381

Matrice de Hilbert[modifier | modifier le wikicode]

La fonction "hilb()" permet de créer une matrice de Hilbert :

octave> hilb(3)
ans =

  1.00000   0.50000   0.33333
  0.50000   0.33333   0.25000
  0.33333   0.25000   0.20000

Autre matrices particulières[modifier | modifier le wikicode]

Octave propose beaucoup de commandes pour créer des matrices spéciales :

Calcul du déterminant[modifier | modifier le wikicode]

Pour calculer un determinant il suffit d'utiliser la commande "det()" :

octave> A = [1 -1 3; 4 -3 1; 2 -3 1]
A =

  1  -1   3
  4  -3   1
  2  -3   1

octave> d = det(A)
d = -16

Valeurs propres et vecteurs propres[modifier | modifier le wikicode]

Avant d'aborder le calcul de valeurs propres et vecteurs propres, il faut savoir qu'on peut manipuler les vecteurs et les matrices composante par composante :

octave> A = [2 -1; -1 1]
A =

   2  -1
  -1   1
octave> a11 = A(1,1)
a11 = 2

On peut même utiliser le vecteur d'une matrice grâce au caractère ":" :

octave:18> a2 = A(:,2)
a2 =

 -1
  1

Donc la commande "eig" permet de calculer les vecteurs et valeurs propres d'une matrice :

octave> [vecteursp , valeursp] = eig(A)
vecteursp =

 -0.52573  -0.85065
 -0.85065   0.52573

valeursp =

 0.38197  0.00000
 0.00000  2.61803

Les coefficients diagonaux de la matrice valeursp sont les valeurs propres. On peut vérifier que le calcul est juste :

octave> x=A*vecteursp(:,1)
x =

 -0.20081
 -0.32492

octave> y = valeursp(1,1)*vecteursp(:,1)
y =

 -0.20081
 -0.32492

Décomposition de matrice[modifier | modifier le wikicode]

Nous avons déjà vu la décomposition de Cholesky et LU d'une matrice dans le chapitre précédent, mais Octave permet d'effectuer d'autres décomposition. Par exemple on peut utiliser la décomposition QR :

octave> A = [1 -1 2; 3 -2 1; -3 2 1]
A =

 1  -1  2
 3  -2  1
 -3  2  1

octave> [q r] = qr(A)
q =

 -2.2942e-01   9.7333e-01   7.6411e-17
 -6.8825e-01  -1.6222e-01   7.0711e-01
  6.8825e-01   1.6222e-01   7.0711e-01

r =

 -4.35890   2.98240  -0.45883
  0.00000  -0.32444   1.94666
  0.00000   0.00000   1.41421

Ensuite on vérifie que :

octave:8>B = q*r
B =

  1.00000  -1.00000   2.00000
  3.00000  -2.00000   1.00000
 -3.00000   2.00000   1.00000

On peut de même effectuer plusieurs autres décompositions grâve aux fonctions :

  • qz (decomposition QZ),
  • qzhess (decomposition de Hessenberg),
  • schur (decomposition de Schur),
  • svd (décomposition de la valeur singulière),
  • housh
  • krylov