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 :

plot de gros vecteurs


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut plot de gros vecteurs
    Bonjour,

    J'ai des vecteurs représentant des traces d'oscillo de plusieurs centaines de milliers de points chacunes. Chaque vecteur est stocké dans le workspace de base.
    J'affiche ces vecteurs sur plusieurs axes par subplot + plot à l'intérieur d'un uipanel.

    La figure peut donc parfois avoir 4 ou 5 courbes de 500.000 points à afficher, ce qui est très lourd. De plus, chaque vecteur est en fait contenu deux fois en mémoire : une fois dans le workspace de base, une fois dans les propriétés des objets 'line' (XData et YData), ce qui occupe d'autant plus de mémoire RAM.

    Bien sûr quand la courbe est affichée en entier, je n'ai pas besoin des 500.000 points pour chaque courbe ; j'en ai juste besoin si je dois zoomer dans certaines parties de la courbe. Quand j'affiche tout (sans zoomer), par exemple, on pourrait imaginer que je n'affiche qu'un point sur dix afin d'alléger la figure. Mais je me demande si ce n'est pas déjà ce que fait 'plot' : affiche-t-il réellement les 500.000 points à l'écran et donc en écrasant les points les uns sur les autres (parce que mon écran ne fait pas 500.000 pixels de large) ? Ou bien fait-il qqch de plus intelligent pour ne pas s'alourdir ?
    En gros, si je fais moi meme une réduction de la courbe à un point sur 10 (par exemple) quand j'affiche la courbe entière, est ce que ca va accélérer le traitement ? Si je zoome, je récupèrerais les nouvelles xmin xmax et j'afficherais un point sur 5 ou un point sur 2 de l'intervalle [xmin xmax] et en changeant les paramètres 'XData' et 'YData' de chaque 'line'.

    Ca c'est l'idée. Je voudrais juste savoir si ca a des chances d'être plus rapide que le plot de base associé au zoom standard.

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Au risque de choquer certains, je dirais que c'est un exemple typique de problème pour lequel Matlab n'est pas adapté (même si, en général, Matlab est un outil génial). Personnellement, j'écrirais un programme (ou plusieurs) qui générerait le code LaTeX (module PSTricks) pour tracer tes courbes; c'est évidemment plus compliqué, mais, de cette manière, tu peux faire tout ce que tu veux.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    ok, LaTeX j'en ai fait (un peu) il y a qqs années, mais c'était pour écrire de la doc, pas pour faire un outil qui fait des zooms et des resynchronisations de courbes au bon vouloir de l'utilisateur. Alors je veux bien un peu plus de détail que juste le nom d'un module Meme si ca ne me plait pas beaucoup de changer d'environnement...

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Meme si ca ne me plait pas beaucoup de changer d'environnement...
    Quand tu connais 42 langages, ça n'est pas difficile de te mettre au 43ème.

    Alors je veux bien un peu plus de détail que juste le nom d'un module
    Dans Wikipedia, tu ouvres la page PSTricks. A la fin de cette page, tu as Liens externes et tu cliques sur Documentation
    Jean-Marc Blanc

    PS: Ah! J'avais oublié: personnellement, j'écris en Fortran le programme qui générera le code LaTeX.
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Quand tu connais 42 langages, ça n'est pas difficile de te mettre au 43ème.
    Ce n'est pas trop ça le problème. C'est que c'est un outil qui a d'autres fonctionnalités et qu'il faudrait donc tout refaire dans un autre langage, ce qui prend du temps dont on ne dispose pas. De plus, il faudrait aussi probablement stocker nos vecteurs dans un autre format que le .mat, ce qui n'est pas top, notamment pour des raisons d'historique et de retrocompatibilité.

    Sinon pourquoi dis tu que Matlab n'est pas l'outil approprié pour ce genre d'application ?

    Est ce que quelqu'un a la réponse à ma question concernant la façon dont Matlab affiche un vecteur contenant plus de valeurs que la résolution de l'écran ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Oui si un algorithme existé ce serait super ! Personne ?

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Citation Envoyé par jcanivet Voir le message
    Est ce que quelqu'un a la réponse à ma question concernant la façon dont Matlab affiche un vecteur contenant plus de valeurs que la résolution de l'écran ?
    Je pense que malgré tout MATLAB essaye d'afficher tous les points, d'où la lourdeur d'affichage.

    As-tu essayé les 2 tracés (avec tous les points et avec seulement 1 point sur 10)? Quels sont les résultats en terme de performance?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  8. #8
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Je ne sais pas s'il existe une option matlab qui permet de spécifier le nombre de points affichés... Mais tu peux très bien essayer de développer une fonction/classe qui te permette de modifier automatiquement (ou en le spécifiant) le nombre de points affichés sur la figure (en utilisant les propriétés/callbacks des guis). Si tu le fais, je serai intéressé de le récupérer. Cela fait aussi partie de mes problématiques, mais secondaires pour moi.

    Cordialement,

    ps: peut-être chercher du côté de matlab central
    ps2: bingo : à tester.
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par tachmou Voir le message
    ps: peut-être chercher du côté de matlab central
    ps2: bingo : à tester.
    je confirme que ca marche. C'est rapide : il limite le nombre de points affichés à 5000 en prenant de la marge pour le panning afin de le fluidifier. Si l'intervalle de temps demandé déborde des points présélectionnés de son vecteur, il recalcule sa sélection. Ce qui est intéressant est l'utilisation d'un addlistener sur le 'PostSet' de la propriété xlim de l'axe.

    Bon je dois adapter pas mal de choses pour mon appli, mais je pense que ca nourrit ma réflexion et surtout ca montre que ca sert à qqch d'aller dans cette voie. Pour moi, l'autre inconvénient de son code est son copyright qui n'est pas terrible pour mon appli. Donc je n'ai pas trop regardé le détail : j'ai juste vérifié qu'il faisait dans le principe ce qui était évoqué ci-dessus dans mon premier post.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    je confirme que ca marche.
    Quoi?
    iplot ?

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par k4lls Voir le message
    Quoi?
    iplot ?
    oui, iplot est rapide en limitant le nombre de points affichés à 5000

Discussions similaires

  1. Générer un Graph Plot, longueur de vecteur
    Par 1ma91nat10n dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/12/2011, 18h16
  2. Réponses: 1
    Dernier message: 05/12/2011, 10h36
  3. Plot d'un vecteur
    Par johannj dans le forum MATLAB
    Réponses: 6
    Dernier message: 03/12/2009, 11h23
  4. matlab et gros vecteurs
    Par gtkill dans le forum MATLAB
    Réponses: 9
    Dernier message: 09/06/2009, 13h48
  5. bad_alloc sur gros vecteurs
    Par Benoit_T dans le forum SL & STL
    Réponses: 6
    Dernier message: 08/05/2009, 15h55

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