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

  1. #1
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    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 : 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
    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
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    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
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    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 : 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
    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.

  11. #11
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    Par défaut
    Salut à tous !

    J'ai fait ce que tu m'as dit (VV33D) et apparemment l'erreur vient principalement de la ligne 18 (puisque mes autre erreurs découlent du fait que j'utilise x(i)):

    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);
    Donc je vais essayer de faire ce que tu m'as dis FLB.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    apparemment l'erreur vient principalement de la ligne 18 (puisque mes autre erreurs découlent du fait que j'utilise x(i))
    C'était facilement visible dans le message d'erreur :
    Citation Envoyé par Winjerome Voir le message
    ??  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);
    Comment exploiter les messages d'erreurs ?

  13. #13
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    Par défaut
    C'est tout bon j'ai résolu mon problème !

    Merci à tous !

+ 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