Valeurs propres et vecteurs propres MATLAB
Ce tutoriel abordera la recherche des valeurs propres et des vecteurs propres d’une matrice donnée à l’aide de la fonction eig()
dans MATLAB.
Trouver des valeurs propres et des vecteurs propres à l’aide de la fonction eig()
dans MATLAB
Matlab fournit une fonction intégrée eig()
pour trouver les valeurs propres et les vecteurs propres d’une matrice donnée. La matrice doit être une matrice carrée. Sinon, Matlab affichera une erreur ; la syntaxe : E = eig(mat)
renvoie un vecteur colonne qui contient les valeurs propres de la matrice mat. Par exemple, créons une matrice aléatoire et trouvons ses valeurs propres à l’aide de la fonction eig()
. Voir le code ci-dessous.
mat = [1 3; 4 2]
E = eig(mat)
Production:
mat =
1 3
4 2
E =
-2
5
La syntaxe : [EV, DV] = eig(mat)
renvoie une matrice EV dont les colonnes sont les vecteurs propres droits et la matrice diagonale DV des valeurs propres de la matrice mat donnée. Par exemple, trouvons les valeurs propres et les vecteurs propres de la matrice ci-dessus. Voir le code ci-dessous.
mat = [1 3; 4 2]
[EV,DV] = eig(mat)
Production:
mat =
1 3
4 2
EV =
-0.7071 -0.6000
0.7071 -0.8000
DV =
-2 0
0 5
Vous pouvez également vérifier le résultat en utilisant la relation : mat x EV - EV x DV = 0. Le résultat du membre de gauche de l’équation doit être proche de zéro mais pas exactement zéro car eig()
effectue la décomposition en utilisant calcul en virgule flottante. Comme vous pouvez le voir, la variable DV contient les valeurs propres triées au niveau des entrées diagonales. Cependant, dans de nombreux cas, ils ne sont pas triés. Pour trier ces valeurs, nous pouvons utiliser la fonction diag()
pour extraire les entrées diagonales, et en utilisant la fonction sort()
, nous pouvons trier les valeurs. Par exemple, créons une autre matrice à l’aide de la fonction magic()
et trouvons ses valeurs triées. Voir le code ci-dessous.
mat = magic(3)
[EV,DV] = eig(mat)
[SV, indi] = sort(diag(DV))
Production:
mat =
8 1 6
3 5 7
4 9 2
EV =
-0.5774 -0.8131 -0.3416
-0.5774 0.4714 -0.4714
-0.5774 0.3416 0.8131
DV =
15.0000 0 0
0 4.8990 0
0 0 -4.8990
SV =
-4.8990
4.8990
15.0000
indi =
3
2
1
Les valeurs propres à l’intérieur de la matrice DV ne sont pas triées, mais les fonctions diag()
et sort()
ont trié les valeurs sont maintenant enregistrées dans la variable SV. La fonction sort()
a également renvoyé les indices des valeurs propres. On peut utiliser les indices pour remettre les valeurs propres triées dans la matrice DV. Nous pouvons maintenant trouver la matrice DV et EV triée en utilisant les indices et le vecteur SV. Voir le code ci-dessous.
mat = magic(3);
[EV,DV] = eig(mat);
[SV, indi] = sort(diag(DV));
DVs = DV(indi,indi)
SVs = EV(:,indi)
Production:
DVs =
-4.8990 0 0
0 4.8990 0
0 0 15.0000
SVs =
-0.3416 -0.8131 -0.5774
-0.4714 0.4714 -0.5774
0.8131 0.3416 -0.5774
Comme vous pouvez, la matrice diagonale DVs contient maintenant des valeurs propres triées. En utilisant la relation ci-dessus, vous pouvez également confirmer le résultat : mat x SVs - SVs x DVs = 0
. La syntaxe : [EV, DV, WV] = eig(mat)
renvoie les vecteurs propres de droite, EV, les valeurs propres, DV, et les vecteurs propres de gauche, WV. Par exemple, trouvons les vecteurs propres droits, les valeurs propres et les vecteurs propres gauches du tapis matriciel ci-dessus. Voir le code ci-dessous.
mat = magic(3)
[EV,DV,WV] = eig(mat)
Production:
EV =
-0.5774 -0.8131 -0.3416
-0.5774 0.4714 -0.4714
-0.5774 0.3416 0.8131
DV =
15.0000 0 0
0 4.8990 0
0 0 -4.8990
WV =
-0.5774 -0.7416 -0.0749
-0.5774 0.6667 -0.6667
-0.5774 0.0749 0.7416
On peut aussi utiliser la fonction eig()
pour trouver les valeurs propres généralisées et les vecteurs propres droits de deux matrices. La syntaxe : [EV,DV] = eig(mat1, mat2)
, renvoie les valeurs propres généralisées et les vecteurs propres droits du couple (mat1, mat2). Par exemple, créons deux matrices et trouvons leurs valeurs propres généralisées et leurs vecteurs propres droits à l’aide de la fonction eig()
. Voir le code ci-dessous.
mat1 = magic(2)
mat2 = [1 2; 2 1]
[EV,DV] = eig(mat1,mat2)
Production:
mat1 =
1 3
4 2
mat2 =
1 2
2 1
EV =
1.0000 -0.5000
-1.0000 1.0000
DV =
2.0000 0
0 1.6667
Nous pouvons vérifier le résultat en utilisant la relation : mat1 x EV - mat2 x EV x DV = 0. Le membre de gauche de l’équation sera proche de zéro.