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ème boucle for ? [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut Problème boucle for ?
    Bonjour à tous,

    Je vous sollicite pour un petit problème dans mon programme. Je pense qu'il vient de ma boucle for mais je n'arrive pas à le détecter !

    Voici mon programme, il permet de récupérer un fichier txt et de manipuler ses données :

    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
    fid=fopen('045639 T01 02 1028710.txt','r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    T = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
    t=0:1:length(T{1}(5:end,1))-1;
    t=t';
    y=[];
    Tmax=[];
    x=[];
    ENERGIE=[];
    RMS=[];
    i=[];
    l=length(x);
    j=1;
    for i=5:1:7
        y(i)=max(max(T{1}(5:end,i))).*0.1;
        Tmax(i)=max(max(T{1}(5:end,i)));
        x(i)=max(y(i).*ones(length(T{1}(5:end,i)),1),T{1}(5:end,i))-y(i);
        ENERGIE(i)=trapz(x(i),[-t*1.195]);
        while x(j,i)<=0
            j=j+1;
        end
        while x(l,i)<=0
            l=l-1;
        end
        RMS(i)=sqrt((1000/((l-j)*1.195))*norm(T{1}(j:l,i-4),2));
    end
    La=20*log10(RMS/10^-6);
    Lv=20*log10(RMS/10^-9);
    Ce message d'erreur apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    Merci !

    Tom

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Bonjour,

    Pour commencer, il faut savoir quelle ligne fait l'erreur.
    - Mets ton code dans un fichier.m et appelle ce fichier depuis matlab, et active le mode debug
    - Quelle est la ligne ? Quelle est la valeur de i ?

  3. #3
    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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    tu trouveras une aide dans la faq concernant ce message d'erreur :
    http://matlab.developpez.com/faq/?pa...ments_B_I_same

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    Salut,
    Les erreurs qu'il m'indique sont (si j'ai bien lu) les lignes 16,17,18,19,26. En gros les lignes où j'ai utilisé i.
    Je pense que ça bloque par là !

    Pour mon i, je veux qu'il aille de 5 à 7.


    EDIT : C'est exact FLB mais je ne repère pas du tout mes erreurs d'éléments. Mes ne devraient pas être en conflit avec ce i. Je comprend pas trop.

  5. #5
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Non, l'erreur (la première qu'il rencontre) provient dune UNIQUE ligne.

    Pour mon i, je veux qu'il aille de 5 à 7.
    -> Quelle est sa valeur AU MOMENT de l'erreur

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    Au moment de l'erreur. Et bien justement je n'en sais rien, comment pourrais-je le savoir si ma boucle doit me sortir toutes les valeurs de mes vecteurs de 5 à 7 ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    VV33D t'a expliqué la procédure pour cela :
    Citation Envoyé par VV33D Voir le message
    Pour commencer, il faut savoir quelle ligne fait l'erreur.
    - Mets ton code dans un fichier.m et appelle ce fichier depuis matlab, et active le mode debug
    - Quelle est la ligne ? Quelle est la valeur de i ?
    Ceci fait on a le message d'erreur suivant :
    ??  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    
    Error in ==> fichier at 18
        x(i)=max(y(i).*ones(length(T{1}(5:end,i)),1) , T{1}(5:end,i)) - y(i);
    dès la première itération
    À lire

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    Jerome --> Exact j'avais pas compris que c'était cette valeur à relever. EN effet mon vecteur i ne dépasse pas la valeur 5.

  9. #9
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Merci. Donc continuons,

    L'erreur a lieu lorsque i=5 (première itération) à la ligne 18.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x(i)=max(y(i).*ones(length(T{1}(5:end,i)),1),T{1}(5:end,i))-y(i);
    Reste en mode debug au moment de l'erreur, et exécute seuls les petits blocs de cette ligne, par exemple dans l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    y(i)
    T{1}(5:end,i)
    ones(length(T{1}(5:end,i)),1)
    max(y(i).*ones(length(T{1}(5:end,i)),1),T{1}(5:end,i))-y(i)
    Jusqu'à trouver lequel soulève ton erreur, et dis nous lequel ne marche pas

  10. #10
    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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Intéresse toi en particulier à la taille des différents éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x(i) %est un scalaire, alors que
    x(i,:) %est un vecteur ligne
    Vérifie que la taille de ce que tu mets à gauche du signe = est la même que celle à droite.

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

Discussions similaires

  1. Problème boucle for
    Par revsys dans le forum Delphi
    Réponses: 20
    Dernier message: 24/05/2007, 15h50
  2. Problème boucle for
    Par rouliane dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2006, 14h37
  3. [VBA-E, Débutant] Problème Boucle for
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2006, 12h30
  4. [Débutant] Problème boucle for
    Par toniooooo dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 14h42
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

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