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 à l'essai
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Points : 10
    Points
    10
    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 chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    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
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Points : 10
    Points
    10
    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 chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    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 !
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Points : 10
    Points
    10
    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 habitué
    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
    Points : 157
    Points
    157
    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 à l'essai
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merciiiiiii Myrne, c'est exactement mon pb

  8. #8
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    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
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

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

Discussions similaires

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

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