Programmation Octave/Algèbre linéaire
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 :
- 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
[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