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 :

Élément d'une matrice


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Élément d'une matrice
    Bonjour tout le monde :-)

    Svp j'ai un soucis avec mon code MATLAB ( oui, je suis nouveau&#128513 lorsque je remplie une matrice M 1*1 composée d'éléments positifs et négatifs, quand je trie les éléments positifs de la matrice {D=find(m>0)}, la réponse obtenue à D, est plutôt la position des éléments positifs dans la matrice M, et non le contenue de cets éléments même..!🤦*♂️


    Svp que faire pour obtenir le contenue des éléments positifs de M, et non pas leurs positions..?

    Merci..!🙏🙏

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     M=[1 2 -3;4 -5 6]
    D=M(find(M>0))
    Autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear
    M=[1 2 -3;4 -5 6]
    D=M(find(M>0))
    % Autre solution
    E=M.*(M>0)
    NaN('double')
    E(E==0)=NaN

  3. #3
    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 : 53 160
    Points
    53 160
    Par défaut
    Citation Envoyé par phryte Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     M=[1 2 -3;4 -5 6]
    D=M(find(M>0))
    Toujours mieux sans find :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     M=[1 2 -3;4 -5 6]
    D=M(M>0)
    Voir la FAQ : Qu'est-ce que l'indexage logique ?
    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)

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, ça marche..!😋

    Le seul problème est que lorsque je veux rendre égale à zéro les éléments négatifs dans la matrice initiale, ça m'envoie un signal d'erreur..!

    En fait je procède par deux façons..!

    1-
    M=(1 2 -3; 4 -5 -6)
    K=M(find(M<0))
    M(K)=0
    (Ça ne marche pas❗❗❗)

    2-
    M=(1 2 -3; 4 -5 -6)
    K=find(M<0)
    J=M(K)
    M(K)=0
    (Ça marche❗❗❗)

    Ma question est de savoir si la méthode 1- comporte une erreur, si oui... laquelle..?

    Merci..!🙏🙏

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,
    Comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    M=[1 2 -3;4 -5 6]
    M(M<0)=0
    Dans ton premier cas tu as les valeurs dans K
    Dans le second tu as les indices

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 881
    Points : 3 429
    Points
    3 429
    Par défaut
    Citation Envoyé par F.F.K Voir le message
    1-
    M=(1 2 -3; 4 -5 -6)
    K=M(find(M<0))
    M(K)=0
    (Ça ne marche pas❗❗❗)

    2-
    M=(1 2 -3; 4 -5 -6)
    K=find(M<0)
    J=M(K)

    M(K)=0
    (Ça marche❗❗❗)

    Ma question est de savoir si la méthode 1- comporte une erreur, si oui... laquelle..?
    les lignes surlignées sur les deux méthodes sont équivalentes :
    dans la premières méthodes, on a concaténé deux ligne en une et le résultat est bien les valeurs de M (correspondant à ta recherche) et non les index de M (contrairement à la première ligne en gras de l'exemple 2)
    donc M(K) plante parce que K n'est pas de index !
    si le but est d'annuler les valeur de M correspondant à ta recherche, alors il faut bien récupérer l'index puis annuler les valeurs correspondantes, en deux lignes de code, comme c'est fait dans la méthode 2
    si par contre le but était juste de récupérer ces valeurs, alors l'écriture en une ligne marche aussi bien ... et économise une ligne

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