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 :

incrémentation dans une boucle


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 58
    Par défaut incrémentation dans une boucle
    Bonjour,

    En fait, j'étais entrai de travailler sur un bout de code qui utilise les boucles for.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
     
    numDistinctValues = numel(unique(x));
    prob=zeros(1);
    for i=1:numDistinctValues
            ipOcurrences = numel(find(x==valuesX(i)));  
            p(i) = ipOcurrences/numValues;  
            prob=[prob p(i)];
     
    end
    I_var(1)=var(prob(1:L));
     cumvar=zeros(1);
    for i=1:8
     
        I_cum=prob(2:i*L-1);
     
        I_var(i)=var(I_cum);
     
        cumvar=[cumvar I_var(i)];
     
    end
    varcum(1)=cumvar(1);
     
     for i=2:8
     
         varcum(i)=(1-alpha).* varcum(i-1)+alpha.* cumvar(i);
         varcum=[varcum(1) varcum(i)];
         i=i+1
     end
    le alpha est un réel à donner en input et x est un vecteur à donner aussi en entrée.
    en exécutant ce code il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Attempted to access varcum(3); index out of bounds because numel(varcum)=2.
     
    Error in ==> divers_calcul at 89
         varcum(i)=(1-alpha).* varcum(i-1)+alpha.* cumvar(i);
    Je ne sais pas pourquoi il s'arrête sur l'indice 2 dans la dernière boucle pourtant j'ai vérifié que les deux autre boucles contiennet les éléments nécessaires pour la construction des éléments de la derière boucle.
    En plus en utilisant une boucle while le programme n'entre pas du tout dans la boucle.

    merci pour votre aide

  2. #2
    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 : 41
    Localisation : France

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

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

    Alorts je sais pas si c'est tout le problème qui vient de là mais tu incrémentes ton indice i dans ta boucle for, lors de ton deuxième passage dans la boucle i vaut donc 4 au lieu de 3 comme on s'y attendrait...

    Citation Envoyé par zizo08 Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      
     for i=2:8
        
         varcum(i)=(1-alpha).* varcum(i-1)+alpha.* cumvar(i);
         varcum=[varcum(1) varcum(i)];
         i=i+1
     end
    Bonne journée,
    Duf

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 58
    Par défaut
    merci pou votre aide mais par faute que j'ai coupié cette ligne mais rèellement ça n'existe pas et le problème est le même.
    voici le bon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    numDistinctValues = numel(unique(x));
    prob=zeros(1);
    for i=1:numDistinctValues
            ipOcurrences = numel(find(x==valuesX(i)));  
            p(i) = ipOcurrences/numValues;  
            prob=[prob p(i)];
     
    end
    I_var(1)=var(prob(1:L));
     cumvar=zeros(1);
    for i=1:8
     
        I_cum=prob(2:i*L-1);
     
        I_var(i)=var(I_cum);
     
        cumvar=[cumvar I_var(i)];
     
    end
    varcum(1)=cumvar(1);
     
     for i=2:8
     
         varcum(i)=(1-alpha).* varcum(i-1)+alpha.* cumvar(i);
         varcum=[varcum(1) varcum(i)];
     
     end

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Ta variable varcum fera toujours une longueur de 2, l'erreur est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varcum=[varcum(1) varcum(i)];
    A chaque tour (enfin il s'arrête vite à cause de l'erreur) tu concatènes varcum(1) et varcum(i).
    D'ailleurs je ne vois pas l'intérêt de cette concaténation, puisque tu définis varcum(i) juste avant.
    Tu peux carrément supprimer cette ligne.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 58
    Par défaut
    vous avez raison=> c'est ça le problème.

    merci infiniment

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

Discussions similaires

  1. [Débutant] Deux incréments dans une boucle for simultanément
    Par lFantasyz dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/04/2014, 16h19
  2. Nom de fichier image incrémenté dans une boucle for
    Par franck31 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/10/2011, 16h49
  3. impossible d'incrémenter dans une boucle for
    Par slayer21 dans le forum MATLAB
    Réponses: 13
    Dernier message: 29/07/2009, 14h09
  4. Créer un nom de variable qui s'incrémente dans une boucle
    Par Pietro_L dans le forum Général VBA
    Réponses: 3
    Dernier message: 09/05/2007, 15h10
  5. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05

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