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 :

index must be a positive integer or logical


Sujet :

MATLAB

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut index must be a positive integer or logical
    Bonjour ,

    j'ai un problème dans mon code Matlab et je n'arrive pas à localiser la faute, donc voilà:
    Count_Local est un tableau à 16 valeurs entières
    Remarque:dans les premiers itérations la variable "sub_local_index" peu prendre la valeur 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    for j=1:height-block_size
    	  for i=1:width-block_size
    	    sub_local_index = floor(i*4/width)+floor(j*4/height)*4;
    	    Count_Local(sub_local_index)=Count_Local(sub_local_index)+1;
     
    end 
       end
    j'obtiens ce message:
    Attempted to access Count_Local(0); index must be a positive integer or logical.

    Error in ==> DOcorriger>hblgr4 at 112
    Count_Local(sub_local_index)=Count_Local(sub_local_index)+1;

  2. #2
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour,

    A la première itération, i=0 et j=0 tu as la variable sub_local_index qui vaut 0, et ensuite tu l'utilise pour indexer le vecteur Count_Local.

    Sous Matlab, le premier indice d'un vecteur est 1.

    A mon avis, la correction est soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for j=0:height-block_size
       for i=0:width-block_size
          sub_local_index = floor(i*4/width)+floor(j*4/height)*4 + 1;
          Count_Local(sub_local_index)=Count_Local(sub_local_index)+1;    
       end 
    end
    ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for j=1:height-block_size
       for i=1:width-block_size
          sub_local_index = floor(i*4/width)+floor(j*4/height)*4;
          Count_Local(sub_local_index)=Count_Local(sub_local_index)+1;    
       end 
    end

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    nn le pb ne provient pas du premier indice, j'ai changer le code et j'obtient le même message.

    Aide SVP

  4. #4
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Il faut confirmer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sub_local_index = floor(i*4/width)+floor(j*4/height)*4;
    OU essaye de voir le résultat des 2 premières itérations !

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    re
    sub_local_index pour les 8 premiers iteration de (i) égale a zéro,
    car même si i et j différent de zero avec "floor" on prend la partie entier.
    voila exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    block_size=8
    width=320
    height=240
    pour i=1 et j=1
     sub_local_index = floor(i*4/320)+floor(j*4/240)*4;
               floor(0.012)+ floor(0.016)*4=0
     
     sub_local_index = 0

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Par défaut
    Donc c'est bien ça, si à un moment ton sub_local_index vaut 0, tu vas essayer d'accéder à local_count(0), ce qui n'est pas possible, les indices commençant à 1 sous Matlab.
    Peut-être mettre une condition pour n'incrémenter la valeur de count_local que si sub_local_index est non nul.

  7. #7
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    Merciiiiiii Myrne, c'est exactement mon pb

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par Myrne Voir le message
    Peut-être mettre une condition pour n'incrémenter la valeur de count_local que si sub_local_index est non nul.

    D'où ma première proposition

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2013, 00h57
  2. Réponses: 1
    Dernier message: 03/11/2012, 00h03
  3. Réponses: 2
    Dernier message: 14/09/2010, 12h47
  4. Réponses: 2
    Dernier message: 03/12/2009, 19h35
  5. Réponses: 2
    Dernier message: 23/04/2009, 23h24

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