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 :

Fonction mesh, tableau de cellules et mémoire


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Par défaut Fonction mesh, tableau de cellules et mémoire
    Bonjour à tous,

    Savez-vous s'il est possible, à partir d'un tableau de cellules (m x n) dont chaque cellule contient un vecteur de longueur "l", de tracer une surface qui tracerait en fonction de "m" les vecteurs contenus dans mon tableau de cellules pour un argument "n" fixé ?

    La seule solution que j'ai trouvée pour l'instant, c'est de recopier les valeurs de mon tableau de cellules vers une matrice pour chaque valeur de "n" et de tracer avec la fonction "mesh", ce qui n'est pas terrible d'un point de vue de la mémoire... (je brasse un nombre important de données)

    De plus, deuxième question : savez-vous s'il y a un moyen de libérer la mémoire matlab au cours d'une session. Je m'explique : actuellement, si je fais tourner un programme qui prends 20% de mémoire, même si une fois que ma fonction a terminé de tourner je "clear" toutes les variables mais la mémoire prise sur le serveur ne repasse pas à 0... Y a-t-il un moyen de libérer cette mémoire.

    Ce sont des questions ouvertes, pas urgentes mais si quelqu'un peut m'éclairer sur ces points, ça me ferait plaisir de comprendre

  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
    Pour la première question, je n'arrive pas à comprendre si c'est uniquement un problème de consommation de ressources ou bien un problème de temps d'accès ?

    Pour la seconde question, en plus des variables, MATLAB utilise de la mémoire pour stocker par exemple les fonctions. Voir donc clear all

  3. #3
    Membre expérimenté
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Par défaut
    Pour ma première question, mon problème est que je n'arrive pas à formuler en langage Matlab ce que je souhaite faire avec la fonction mesh.
    En quelque sorte, j'ai un tableau de cellules qui contiennent des vecteurs et je souhaite tracer un réseau de courbes en 3D.
    Si j'utilisais un plot classique, je ferai ça dans une boucle for avec un "hold on" (et j'obtiendrai alors une superposition de courbes en 2D). La fonction mesh ne permet pas ce genre de "programmation" (il ne me semble pas), il faut donner toute l'instruction en 1 ligne. Lorsque j'essaye des formulations du type :
    mesh(vectX,vectY,my_cell_tab{:,1}) (avec les dimensions qui vont bien), Matlab me renvoie qu'il y a trop d'arguments. En fait c'est le ":" qui le gêne. Il y a une autre formulation ?

    Pour la question sur la mémoire, j'avais déjà lu la doc de la fonction "clear" d'où ma question.
    Je n'avais pas pensé par contre à la fonction stockée en mémoire. C'est possible que ça vienne de là. Ce qui me chagrine c'est que quand mon programme tourne, au fur et à mesure que les variables se créent, je vois la mémoire qui augmente (alors que la fonction est chargée à ce moment là non ?) et elle ne se libère pas lors d'un clear all...

  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 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
    Citation Envoyé par eskapp Voir le message
    Il y a une autre formulation ?
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mesh(vectX,vectY,cat(1,my_cell_tab{:,n}))
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mesh(vectX,vectY,cell2mat(my_cell_tab(:,3)))

    Citation Envoyé par eskapp Voir le message
    je vois la mémoire qui augmente (alors que la fonction est chargée à ce moment là non ?) et elle ne se libère pas lors d'un clear all...
    Tout dépend du problème, mais en générale, je pense que ce sont les variables qui prennent le plus de place.
    Si une grande partie de la mémoire ne se libère pas, c'est soit une fuite de mémoire, soit que des variables sont persistantes.
    MATLAB fait aussi appel à d'autres langages. Pour les interfaces graphiques par exemple, rien ne dit que le code java utilisé soit très performant.

    Je pense également que la partie EDI de MATLAB doit aussi consommer des ressources au fur et à mesure de la session.
    Fais des tests en lançant MATLAB avec les options -nojvm ou -nodesktop et en comparant l’évolution de la mémoire au cours de chaque session.

  5. #5
    Membre expérimenté
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Par défaut
    Merci ! Je n'avais pas pensé à la concaténation mais c'est exactement ce qu'il me faut.

    En ce qui concerne la mémoire, j'essaye ce que tu proposes et si j'ai un retour intéressant, je l'indiquerai.
    Un détail supplémentaire sur ce curieux phénomène :
    Si par exemple je fais tourner mon programme et qu'à la fin j'ai 20% de mémoire prise sur le serveur. J'effectue un clear all. Je reste à 20% de mémoire prise.
    Par contre, si je relance le même programme à ce moment là, je reste à 20% de mémoire (et non pas 40%).
    En fait, c'est comme si la mémoire était libre mais réservée pour ma session Matlab et donc pas dispo pour les autres utilisateurs du serveur...
    (Je précise que je n'ai pas de variables globales ou autres, les variables stockées en mémoires sont les cellules d'un tableau qui se calcule dans une fonction tout ce qu'il y a de plus basique). La mémoire n'augmente pas significativement lorsque je trace des surfaces ensuite ce qui me fait penser que le souci ne vient pas de là.

    Voilà pour toutes les précisions que je pouvais apporter. Et merci encore

  6. #6
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Fil intéressant ...
    Matlab a de tous temps été réputé pour ses fuites de mémoire.
    Je n'ai pas encore vu une release de Matlab ou toute la commnauté s'est écriée : Bravo ! Plus de petites fuites ! Matlab est devenu propre. On va pourvoir arrêter les couches culottes.
    Je ne suis pas moi-même un spécialiste suffisamment avisé pour filtrer le vrai du faux dans ces rumeurs.

Discussions similaires

  1. Rechercher une Valeur dans un tableau et garder le N° de la cellule en mémoire
    Par matteo.martelli dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/10/2012, 07h28
  2. [Débutant] fonction Boxplot appliqué à un tableau de cellules.
    Par gegon dans le forum MATLAB
    Réponses: 7
    Dernier message: 14/09/2012, 13h41
  3. désallocation mémoire - fonction - structure - tableau dynamique
    Par Flaherty Mc Coillean dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2009, 17h42
  4. Réponses: 2
    Dernier message: 09/04/2009, 10h32
  5. Réponses: 2
    Dernier message: 07/02/2008, 10h56

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