Bonjour,
je rencontre quelques soucis avec la fonction spec qui renvoie les valeurs propres d'une matrice : les matrices que j'utilise sont symétriques, donc à valeurs propres réelles, et je cherche souvent la plus grande. La documentation de spec est muette quant à l'ordre dans lequel elle renvoie les valeurs propres mais je m'étais convaincu sur quelques exemples qu'elle les rangeait par ordre croissant. Comme mon programme se comporte de manière étrange j'en viens à douter de ce fait. En bidouillant un peu je trouve une matrice pour laquelle spec ne renvoie pas les valeurs propres par ordre croissant :
Plus étrange encore, je n'arrive pas à forcer le tri avec la fonction gsort, que ce soit en imbriquant gsort et spec ou en passant les valeurs propres dans un vecteur intermédiaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 -->A=[1 2 3; 6 7 5; 78 23 34] A = 1. 2. 3. 6. 7. 5. 78. 23. 34. -->spec(A) ans = 43.499807 - 4.91176 3.4119532
Je trouve cela plutôt intriguant, surtout dans la mesure où gsort trie correctement le même vecteur définit "à la main" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 -->gsort(spec(A)) ans = 43.499807 - 4.91176 3.4119532 -->S=spec(A) S = 43.499807 - 4.91176 3.4119532 -->gsort(S) ans = 43.499807 - 4.91176 3.4119532
Je n'ai pas de connaissance sur l'implémentation de scilab mais il semblerait que gsort fasse une différence entre ces deux vecteurs en apparence identique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 -->gsort([43.499807 -4.91176 3.4119532]) ans = 43.499807 3.4119532 - 4.91176
Si vous avez des éléments de compréhension ou une manière certaine d'obtenir les valeurs propres d'une matrice rangées dans l'ordre, je suis très preneur.
En vous remerciant pour votre lecture et vos réponses.
Partager