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 :

Problèmes size vector et out of memory.


Sujet :

MATLAB

  1. #1
    Membre du Club Avatar de NELLLY
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 50
    Points
    50
    Par défaut Problèmes size vector et out of memory.
    Salut
    ci-dessous une partie de mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PB=(0:0.001:0.999)';
    IPB=(1000*PB)+1;
    C=cell(length(PB),7);
    for i=1:length(PB)
        C{i,1}=zeros(IPB(i),length(p));
        size(C{i,1})%pour voir où ça plante
        pause
    end
    J'ai 2 messages qui s'affichent:
    1. Size vector should be a row vector.
      Je ne sais pas pourquoi il affiche ce message alors que les valeurs de IPB sont entières et malgré ça il affiche ensuite la taille des C{i,1}.
    2. Au dessus de i=639 le message
      Error using zeros, out of memory.

    Que dois-je faire?

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PB=(0:0.001:0.999)';
    IPB=(1000*PB)+1;
    Le problème est que IPB ne représente pas un entier mais un flottant (Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?)
    Utilise pour indexer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IPB=round((1000*PB)+1);
    Ce qui corrigera "Warning: Size vector should be a row vector with integer elements."

    Ensuite pour les problèmes de mémoire, il est toujours bon de la préallouer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C{length(PB),1} = zeros(round(IPB(length(PB))),length(p));
    Avant ta boucle for. Chez moi ca tourne sans soucis avec length(p)=100

  3. #3
    Membre du Club Avatar de NELLLY
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Salut
    merci pour la solution proposée. La première erreur est évitée cependant la deuxième est toujours présente. Vu que vous avez de l'expérience avec Matlab est-ce -que si j'augmente la capacité de la carte mémoire de mon pc je n'aurais plus de problème de mémoire avec MATLAB?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Plus de problème de mémoire, c'est un peu idyllique... disons moins

    Pour N = length(p), tu essaies de stocker
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N*sum(IPB)*8 /1024 /1024 /1024 (Go)
    Ce qui fait pour N = 100 environ 372 Go !!
    Comment déterminer approximativement la quantité de mémoire nécessaire pour le stockage d'une variable ?

    As-tu réellement besoin tout cela en même temps ?
    Que fais-tu par la suite avec C ?

  5. #5
    Membre du Club Avatar de NELLLY
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    J'ai oublié de noter que car Pour chaque valeur de PB j'ai une matrice (1001*1001) et un cout à déterminer.
    En premier lieu j'ai essayé d'utiliser une boucle for pour PB et vu que j'ai deux autres variables de décision, la première est entière et la deuxième est réelle. Le temps d'exécution du programme est très grand j'ai attendu 6 heures et le calcul n'était pas encore terminé. Par suite j'ai modifié l'algorithme en traitant PB comme un vecteur et par la suite j'ai utilisé des multidimensional cell arrays pour que le calcul soit plus rapide et j'étais affronté à une mémoire insuffisante.
    J'ai trouvé une alternative provisoire, je peux départager le vecteur PB en sous vecteurs et à chaque je cherche une solution et je compare ensuite moi meme las solutions obtenus pour chaque sous vecteur et je choisis la solution minimale. Pour le moment si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=(0:0.001:1)';
    PB=(0:0.01:0.05)';
    je n'ai plus une mémoire insuffisante, il me reste ensuite de boucler sur deux autres variables. et chercher ensuite une deuxième solution pour etc.
    Concernant le langage C je l'ai utilisé auparavant pour d'autres programmes utilisant des boucles for mais ne contenant pas de calcul matriciel et comparé à son analogue en MATLAB leurs temps d'exécution était beaucoup plus rapide. Ce pendant pour mes programmes utilisant du calcul matriciel j'utilise MATLAB car j'ai des multidimensional arrays and cell arrays.
    Si vous avez d'autres solutions faites les moi parvenir.

Discussions similaires

  1. [Liferay] Profiler pour problème de Out Of Memory
    Par Samaël63 dans le forum Portails
    Réponses: 0
    Dernier message: 22/06/2009, 12h06
  2. Problème de out of memory
    Par dodobn dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 08/06/2009, 01h13
  3. Réponses: 3
    Dernier message: 08/08/2007, 19h08
  4. J'ai tjrs le problème de Out of Memory
    Par Socrat dans le forum C++Builder
    Réponses: 24
    Dernier message: 22/07/2007, 10h27
  5. [Out of Memory] Problème
    Par matt67 dans le forum MATLAB
    Réponses: 19
    Dernier message: 19/06/2007, 13h35

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