Programmation Octave/Algèbre linéaire
Opération sur les vecteurs
modifierOn 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
modifierNous 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
modifierOctave fournit plusieurs fonctions pour créer des matrices particulières.
Matrice nulle
modifierPour 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é
modifierLa fonction "eye" crée une matrice identité.
octave:13> I = eye(3) I = 1 0 0 0 1 0 0 0 1
Matrice diagonale
modifierLa 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
modifierLa 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
modifierLa 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
modifierOctave propose beaucoup de commandes pour créer des matrices spéciales :
- hankel (Matrice de Hankel).
- invhilb (Inverse de la Matrice de Hilbert),
- sylvester_matrix (Matrice de Sylvester),
- toeplitz (Matrice de Toeplitz),
- vander (Matrice de Vandermonde).
Calcul du déterminant
modifierPour 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
modifierAvant 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
modifierNous 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