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 :

[disp] Format spécifique pour un élément d'une matrice


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [disp] Format spécifique pour un élément d'une matrice
    Bonjour,
    j'ai besoin de différencier visuellement certains éléments d'une matrice (soit par la couleur, soit par le format : afficher avec une décimale alors que les autres sont entiers, par exemple) sans utiliser le mode graphique. Est-ce possible et, si oui, comment ?
    merci d'avance pour votre aide.

  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 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
    Comment visualises-tu cette matrice ? Dans un fichier text ? A l'invite de commandes ?
    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)

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    c'est une matrice M dont les éléments sont numériques et que j'affiche bêtement avec un disp(M), dans un fichier .m

  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
    Et tu voudrais qu'elle ressemble à quoi ta matrice ? Un exemple serait plus clair
    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)

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5

    ou bien :
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5

    ou bien :
    1 2 3 4 5
    1 2.0 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4.0 5

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    mon 3e exemple n'est pas beau (il faudrait maintenir un alignement correct)
    une solution simple pour un seul des 3 exemples me comblerait de joie !

  7. #7
    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
    Voici l'idée :

    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
    26
    function disp2(M,fmt,idx)
     
    temp=zeros(size(M));
    temp(idx)=1;
    temp=temp.';
     
    M=M.';
    str=[];
    for n=1:numel(M)
     
        if temp(n)
     
            str=[str '<a href="">' sprintf(fmt,M(n)) '</a> '];
     
        else
     
            str=[str sprintf(fmt,M(n)) ' '];
     
        end
        if ~mod(n/size(M,2),1)
            str=[str(1:end-1) '\n'];
        end
     
    end
     
    disp(sprintf(str))
    qui s'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    M=repmat([1 2 3 4 5],5,1);
    fmt='%d';
    idx=[7 20]; % voir l'indexage linéaire dans la FAQ
     
    disp2(M,fmt,idx)
    ce qui donne :
    Images attachées Images attachées  
    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)

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    C'est formidable ; ça marche !
    Ne croyant que ce que je vois, j'ai essayé ta fonction avec mon Matlab... et ça marche !
    Merci infiniment et à bientôt peut-être.
    J'espère pouvoir aider un jour.

  9. #9
    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
    Voici une version un peu plus évoluée à enregistrer dans un fichier surligne.m :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    function surligne(M,fmt,idx)
    %SURLIGNE	Surligne des valeurs à l'affichage d'une matrice
    %   SURLIGNE(M,FMT,IDX) permet d'afficher une matrice M suivant le format FMT
    %   en mettant en évidence les valeurs identifiées par IDX, soit un vecteur 
    %   d'indices linéaires, soit une matrice issue d'une opération logique sur M.
    %
    %   Exemple 1 :
    %               M = rand(3);
    %               surligne(M,'%.3f',M>=.5);
    %
    %   Exemple 2 :
    %               M = rand(3);
    %               surligne(M,'%.3f',[1 5 8]);
    %
    %   Voir aussi <a href="matlab:disp">disp</a>
    %
     
    %   Auteur: Jérôme Briot (Dut)
    %   Contact: dutmatlab@yahoo.fr
    %            http://www.developpez.net/forums/member.php?u=125006
    %   Création: 28 Décembre 2007
    %
     
    nargchk(3,3,nargin);
     
    flag=all(size(M)==size(idx));
     
    if flag    
        idx=idx.';    
    else     
        temp=zeros(size(M));
        temp(idx)=1;
        idx=temp.';    
    end
     
    M=M.';
    str='\n';
    sM=size(M);
    for n=1:numel(M)   
        if idx(n)       
            str=[str '<a href="">' sprintf(fmt,M(n)) '</a> '];        
        else        
            str=[str sprintf(fmt,M(n)) ' '];        
        end
        if ~mod(n/sM(1),1)
            str=[str(1:end-1) '\n'];
        end        
    end
     
    disp(sprintf(str))
    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)

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    je vais cogiter sur cette deuxième version !
    merci encore !

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    j'ai essayé de faire quelques transformations pour rendre la fonction aussi accessible que possible à des débutants (bien sûr, c'est moins beau et moins performant et n'a sans doute pas sa place dans ce forum...)

    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
    function disp4(M,n,B)
    %M est une matrice carrée de dimension n
    %B est le vecteur contenant la liste des positions des éléments à mettre en couleur
    %position=(numligne-1)*n+numcolonne
    str=[];
    q=length(B);
    for k=1:n
        for p=1:n
            a=0;
            for m=1:q
                if (k-1)*n+p==B(m)
                    a=1;
                end
            end
            if a==1
                str=[str '<a href="">' sprintf('%d',M(k,p)) '</a> '];
            else
                str=[str sprintf('%d',M(k,p)) ' '];
            end
        end
        str=[str '\n'];
    end
    disp(sprintf(str))

  12. #12
    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 clooo Voir le message
    c'est moins beau et moins performant
    D'où l'intérêt de lire ce tutoriel Introduction à la gestion des matrices et de parcourir 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)

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je n'y manquerai pas !

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

Discussions similaires

  1. champs 'FORMAT' pour un élément d'une table
    Par meolimo dans le forum IHM
    Réponses: 1
    Dernier message: 25/08/2011, 19h31
  2. [DisplayTag] Utiliser un Decorator pour chaque élément d'une ligne
    Par guntzerp dans le forum Taglibs
    Réponses: 2
    Dernier message: 24/06/2010, 11h57
  3. Styles différents pour les éléments d'une liste
    Par C_C dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 19/05/2009, 17h15
  4. Calcul de la Médiane pour chaque élément d'une table
    Par yuekerobero dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/09/2008, 12h01
  5. Réponses: 5
    Dernier message: 26/06/2007, 18h20

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