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 :

Remplir la diagonale d'une matrice sans boucle FOR-END


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Remplir la diagonale d'une matrice sans boucle FOR-END
    Bonjour,
    J'ai un simple problème qui m'énerve.
    J'ai une matrice assez conséquente A , et je dois mettre certains indices de sa diagonale à une certaine valeur, disons à 1, par exemple.

    J'ai un vecteur d'indice ind, qui contient les indices de la diagonale.

    J'ai donc par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A= rand(1000,1000); ind=[1 4 100 330];
    Et quand j'essaie quelque chose de simple comme A(ind,ind) =1.. bah ca me met tout le carré correspondant à 1, ce qui n'est pas ce que je désire, vu que je veux JUSTE les éléments de la diagonale correspondant aux indices donnés à 1...
    je veux donc A(ind(1),ind(1)) = 1 puis A(ind(2),ind(2)) =1, etc...
    J'aimerais me passer de boucler for pour le faire.

    Quelqu'un serait m'aider?
    Un grand merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonsoir,

    une solution en bidouillant les matrices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d = diag(A);
    d(ind) = 1;
    result = A-diag(diag(A))+diag(d);
    ou un peu plus propre avec les indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A(sub2ind(size(A),ind,ind)) = 1;
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Un grand merci!

    la solution avec le sub2ind est exactement le genre de solution que je cherchais!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par magelan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A(sub2ind(size(A),ind,ind)) = 1;
    La même solution sans SUB2IND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A = rand(7);
    ind = [1 2 5];
     
    A((ind-1)*size(A,1)+ind) = 1
    Voir la technique d'indexage linéaire dans la
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. "Comparer" un vecteur à une matrice sans boucle for
    Par nawellee dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/04/2013, 20h55
  2. Réponses: 2
    Dernier message: 26/03/2013, 16h48
  3. Mettre la diagonale d'une matrice à 0
    Par yous18 dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 14/12/2007, 23h08
  4. Réécrire dans une matrice sans l'effacer
    Par jmbonnaz dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/07/2007, 19h45
  5. Comparaison de deux matrices sans boucle for
    Par zicos dans le forum MATLAB
    Réponses: 8
    Dernier message: 04/05/2007, 18h16

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