Programmation Octave/Algèbre linéaire

Un livre de Wikibooks.

Octave
L'étagère Informatique
et
Mathématiques.
Octave
Sommaire
Bibliographie
Autres cours
Modifier ce modèle

Sections

[modifier] Opération sur les vecteurs

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

[modifier] Opérations sur les matrices

Nous avons déja 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 = exp(A)
E =

 0.36788  7.38906
 7.38906  1.00000

[modifier] Matrices particulières

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

[modifier] Matrice nulle

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

[modifier] Matrice identité

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

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

 1  0  0
 0  1  0
 0  0  1

[modifier] Matrice diagonale

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

[modifier] Matrice aléatoire

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

[modifier] Matrice de Hilbert

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

[modifier] Autre matrices particulières

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

[modifier] Calcul du déterminant

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

[modifier] Valeurs propres et vecteurs propres

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

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 coefficient diagonaux de la matrice valeursp sont les valeurs propres. On peut verifier 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

[modifier] Décomposition de matrice

Nous avons déjà vu la décomposition de Cholesky et LU d'une matrice de 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  A = QR \,:

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