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 :

Code à optimiser: tracés de fonctions liés à des sous-matrices indexées


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Par défaut Code à optimiser: tracés de fonctions liés à des sous-matrices indexées
    Salut à tous,

    Par cette journée pluvieuse, je me suis mis à coder un peu et je cherche à faire un peu d'optimisation.
    Si vous avez aussi envie de vous prendre au jeu...

    Imaginons qu'on ait une matrice du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    matrice_initiale=[1,2,3,1,2,3,1,2,1,1,2;...
     1,1,1,2,2,2,3,3,4,5,5;...
     1,2,5,8,9,7,8,9,3,1,4;...
     2,6,6,7,8,9,8,5,1,5,3;...
     3,6,1,3,3,7,8,9,5,2,4;...
     4,5,6,7,8,2,3,4,5,6,4]
    La 1e ligne serait un index, la seconde notre abscisse et les suivantes des ordonnées.
    J'ai cherché à tracer sur 3 figures (liés à l'index) des subplot des 4 ordonnées et ça me donne:

    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
    function tracepasoptimisee(matrice_initiale)
    % matrice_initiale:
    % Index
    % X
    % Y1
    % Y2
    % Y3
    % Y4
     
    %Tri par colonne selon la ligne 1
    [pasbesoin,idx] = sort(matrice_initiale(1,:))
    matrice_triee=matrice_initiale(:,idx)
    % ans =
    % 
    %      1     1     1     1     1     2     2     2     2     3     3
    %      1     2     3     4     5     1     2     3     5     1     2
    %      1     8     8     3     1     2     9     9     4     5     7
    %      2     7     8     1     5     6     8     5     3     6     9
    %      3     3     8     5     2     6     3     9     4     1     7
    %      4     7     3     5     6     5     8     4     4     6     2
     
    %Recherche en ligne 2 des termes égaux à 1
    debut=find(matrice_triee(2,:)==1)%!sous réserve que le nouveau plot commence toujours à index=1
    %ans =
    %
    %     1     6    10
     
    nbplot=matrice_triee(1,end)% 3 ici
     
    for i=1:nbplot%boucle plot
        figure
        if i~=nbplot
            temp=matrice_triee(:,debut(i):debut(i+1)-1)%sous-matrice
        else
            temp=matrice_triee(:,debut(nbplot):size(matrice_triee,2))%dernière sous-matrice
        end
        for j=1:4%boucle des 4 graphes
            subplot(4,1,j); plot(temp(2,:),temp(j+2,:))
            title(strcat('elle est jolie ma figure n° ',num2str(j),' :)'));
        end%j
    end%i
    Je suis assez fier de moi mais je cherche à optimiser ce code que je trouve long et parfois fastidieux,
    donc si vous avez des astuces...
    J'ai notamment un vilain lag sur le tracé de la dernière figure... (à cause du if else?)
    Et y'a-t-il un moyen d'avoir un titre général en haut de figure?

    Merci d'avance

  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 317
    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 317
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    nplot = max(matrice_initiale(1,:));
     
    for i = 1:nplot
       figure
     
       idx = matrice_initiale(1,:)==i;
     
       for j = 1:4
           subplot(4,1,j)
           plot(matrice_initiale(2,idx), matrice_initiale(2+j,idx))
       end
     
    end

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Par défaut
    Wow, en effet, quelle concision.
    Il faut que j'arrive à ce niveau de programmation.
    Merci

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

Discussions similaires

  1. Optimisation d'une requête contenant des sous-requêtes
    Par Christophe Charron dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/06/2010, 15h34
  2. affectation de fonction dans des sous-menus
    Par chossette9 dans le forum Interfaces Graphiques
    Réponses: 33
    Dernier message: 27/05/2009, 11h29
  3. reconnaissance des sous-matrices de zéros
    Par Lalaine dans le forum Mathématiques
    Réponses: 2
    Dernier message: 16/03/2009, 16h01
  4. Appel de fonction dans des sous dossiers
    Par milach dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/01/2008, 14h24
  5. Liste des sous-matrices carrées
    Par potimarara dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 12/10/2006, 18h30

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