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

MATLAB Discussion :

extraction d'une sous-matrice a partir des éléments d'un vecteur


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2011
    Messages : 76
    Points : 35
    Points
    35
    Par défaut extraction d'une sous-matrice a partir des éléments d'un vecteur
    Bonjour

    Veuillez SVP m'aider à trouver une solution pour ma question
    J'ai une matrice carrée, exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d=[0 24 64 57 25 34 45 36; 24 0 43 79 33 22 33 60; 64 43 0 122 75 58 30 98; 57 79 122 0 53 76 101 31 ;25 33 75 53 0 23 65 46; 34 22 58 76 23 0 56 66; 45 33 30 101 65 56 0 74; 36 60 98 31 46 66 74 0]

    et j'ai un vecteur Je veux savoir comment peut on extraire une sous-matrice carrée du matrice d formée par les lignes et les colonnes numérotées dans le vecteur v, c'est à dire avoir comme solution une sous-matrice carrée de taille 4 formée par les lignes et les colonnes 2, 3, 5, et 6 du matrice d.

    Merci beaucoup d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    ça ?
    qui renvoie :

    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
    d =[ 0    24    64    57    25    34    45    36
        24     0    43    79    33    22    33    60
        64    43     0   122    75    58    30    98
        57    79   122     0    53    76   101    31
        25    33    75    53     0    23    65    46
        34    22    58    76    23     0    56    66
        45    33    30   101    65    56     0    74
        36    60    98    31    46    66    74     0]
    
    
    v = [2     3     5     6]
    
    
    M =[ 0    43    33    22
        43     0    75    58
        33    75     0    23
        22    58    23     0]

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2011
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup Antoane pour votre réponse

    Juste j'ai une question, si le vecteur v contient un zero parmi ses éléments, ça va afficher une erreur, comment peut on résoudre ce problème.

    exemple on le vecteur Dans ce cas on doit afficher la matrice carrée formée par les lignes et les colonnes numérotés par le vecteur v et qui sont différents de zero, c'est a dire par les lignes 2 3 5 et 6 dans cet exemple.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonsoir,

    il suffit de retirer les zéros du vecteur v ; je te laisse proposer un code le faisant

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2011
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Salut Antoane
    C'est vrai c'est simple de retirer le zero du vecteur v et terminer le reste du travail. La réalité le problème est plus compliqué que ça juste j'ai pas trouvé la bonne façon de le faciliter.
    En fait, il s'agit d'une matrice et on doit trouver la matrice carrée pour chaque ligne, c'est a dire on a considéré chaque ligne comme une vecteur v.

    On a la matrice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M= [0     2     3     4     5
         1     2     3     4     5
         1     2     3     4     5
         1     2     3     4     5
    J'ai proposé le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for t=1:T
        w(:,:,t)=d(M(t,:),M(t,:));
    end
    sachant que T=4 est le nombre de lignes, ce code donne 4 sous matrices comme je veux, mais le fait de trouver un zero comme le cas de la première ligne, il m'affiche une erreur.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    sachant que T=4 est le nombre de lignes, ce code donne 4 sous matrices comme je veux, mais le fait de trouver un zero comme le cas de la première ligne, il m'affiche une erreur.
    Tu as compris que l'erreur vient du fait que les lignes et colonnes n°0 n’existent pas.
    Tu as compris qu'il n'est pas possible de simplement retirer le zéro du vecteur v=M(t, car la taille des matrices dépendrait de la valeur de la variable de boucle t, empêchant ainsi leur concaténation via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    T = size(M,1) ;
    for t=1:T
        v = M(t,:) ;
        v = retirer_les_zeros_de(v) ;
        w(:,:,t)=d(v,v);
    end
    Diverses solutions sont alors applicables, suivant ce que tu veux faire de w, par exemple :
    - mettre d(v,v) dans un cell array : w{t} = d(v,v) ;
    - ajouter des nan là où v voudrait que tu mettes la ligne zéro.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2011
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Bonjour Antoane

    J'ai fait le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for t=1:T
    new{t}= nonzeros(M(t,:));
    end
    for t=1:T
        w=d(new{t},new{t});
    end
    lorsque je clique run, 'w' m'affiche une seule matrice, en fait je dois avoir T matrice
    Ainsi si je mets w(:,:,t) au lieu de 'w' il m'affiche une erreur sachant que j'ai essayé de faire des conversions from cell to array ou matrix mais sans résultat.

    SVP si possible aidez moi comment faire pour avoir directement une matrice 'w' pour chaque t (autrement w(t)), exemple je veux avoir seulement la matrice associée à t=1 ou bien t=2,.. car 'w' dans le code que j'ai proposé m'affiche une seule matrice

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonjour,
    Citation Envoyé par sophielow Voir le message
    J'ai fait le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for t=1:T
    new{t}= nonzeros(M(t,:));
    end
    for t=1:T
        w=d(new{t},new{t});
    end
    à chaque itération de la boucle, la variable w est écrasée : Matlab ré-écrit dans la variable une nouvelle valeur. A la fin du programme, w contient ce qui y a été écrit en dernier : w=d(new{T},new{T}).

    lorsque je clique run, 'w' m'affiche une seule matrice, en fait je dois avoir T matrice
    Comment s'appelleraient-elles ?



    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    T = size(M,1) ;
    for t=1:T
        v = M(t,:) ;
        v = retirer_les_zeros_de(v) ;
        w{t}=d(v,v);
    end
    chaque matrice est "rangée" dans une cell de w et tu accèdes à la kième matrice par : w{k}



    Plus généralement : lorsque tu débogues un programme, en particulier lorsqu'il contient une boucle, il est intéressant de l'éxecuter ligne à ligne en regardant à chaque étape le contenu des différentes variables et en vérifiant qu'il est conforme à ce qui était attendu. Il peut être possible de simplifier la vérification en diminuant la taille des variables (par exemple avec une matrice de départ de taille 3 plutôt que 6).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction d'extraction d'une sous-matrice
    Par Julien237 dans le forum Images
    Réponses: 1
    Dernier message: 02/04/2019, 14h20
  2. [Python 2.X] Créer une matrice à partir des éléments d'un vecteur
    Par hazem2410 dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 20/07/2017, 04h41
  3. extraction d'une sous matrice d'une image (taille)
    Par Ryma_d3 dans le forum Images
    Réponses: 2
    Dernier message: 25/01/2012, 19h04
  4. Tracer une courbe à partir des éléments d'un vecteur
    Par User Name dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2010, 20h55
  5. Extraction d'une sous matrice à partir d'une matrice
    Par Christinita dans le forum MATLAB
    Réponses: 16
    Dernier message: 17/01/2009, 10h42

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