IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scilab Discussion :

spec et tri des valeurs propres


Sujet :

Scilab

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut spec et tri des valeurs propres
    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 :

    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
    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
    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 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
    -->gsort([43.499807 -4.91176 3.4119532])
     ans  =
     
        43.499807    3.4119532  - 4.91176
    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.

    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    La variable S contient des nombres complexes :

    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
    21
    22
    23
    24
    25
    -->A = [1 2 3; 6 7 5; 78 23 34]
     A  =
     
        1.     2.     3.   
        6.     7.     5.   
        78.    23.    34.  
     
    -->S = spec(A)
     S  =
     
        43.499807  
      - 4.91176    
        3.4119532  
     
    -->isreal(S)
     ans  =
     
      F  
     
    -->gsort(real(S))
     ans  =
     
        43.499807  
        3.4119532  
      - 4.91176
    Même si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -->imag(S)
     ans  =
     
        0.  
        0.  
        0.

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 15h18
  2. Calcul rapide des valeurs propres d'une matrice creuse
    Par gsagnol dans le forum Mathématiques
    Réponses: 3
    Dernier message: 22/12/2007, 00h37
  3. Tri des valeurs dans un tableau
    Par kikiarch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2007, 08h46
  4. Tri des valeurs d'un tableau en ordre croissant
    Par Mickael2604 dans le forum Ada
    Réponses: 1
    Dernier message: 17/11/2007, 20h05
  5. tri des valeurs d'une matrice
    Par suzanne loubert dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2005, 04h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo