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 :

Boucle For se termine trop tôt


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut Boucle For se termine trop tôt
    Bonjour,
    Je veux supprimer les x dernières lignes d'un matrice de Z lignes et 1 colonne
    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nb_lignes=size(Signal,1);
    nb_lignes_final=floor(nb_lignes/128);
     
     
    debut=nb_lignes_final*128+1;
    fin=nb_lignes;
    Signal_reduit=Signal;
     
    for i=debut:1:fin
        Signal_reduit(i)=[];
    end
    la boucle for devrait faire 25 tours mais elle n'en fait que 13.
    Pourtant j'ai bien debut=6785
    et fin=6810

    Donc je suis un peu perdu.

    Merci

  2. #2
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Pourquoi ne pas écrire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_reduit(6785:6810)=[];

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Parce que avec la boucle ou à ta manière, j'obtiens un message d'erreur que j'ai oublié de préciser:

    ??? Index of element to remove exceeds matrix dimensions.

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    La méthode de tug83 ne devrait pas donner ce message d'erreur : l'as-tu vraiment essayée ?

    Quant à ton erreur c'est une erreur habituelle : comme tu enlèves des éléments, la taille de ta matrice diminue.

    Pour le comprendre un exemple simple à lancer en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    V=1:10;
    for k=1:length(V)
       disp(['V(',num2str(k),') = ', num2str(V(k))]);
       V(k)=[];%suppression du kième élément
    end
    Ce code va bugguer, et au lieu de faire un display de 1, 2, 3...
    Il va afficher 1 puis 3 (car au 2ème tour V(2) ne sera plus 2 mais 3).

    Les 2 solutions sont :
    - la méthode de tug83 (qui est aussi la plus propre et la plus rapide)
    - de faire une boucle décroissante
    Ce qui donnerait sur mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    V=1:10;
    for k=length(V):-1:1
       disp(['V(',num2str(k),') = ', num2str(V(k))]);
       V(k)=[];%suppression du kième élément
    end

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Au temps pour moi,

    Le code de tug fonctionne seulement je l'ai essayé sur la matrice Signal_réduit déjà réduite donc en effet, ça ne passait pas.

    Merci pour les explications.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Citation Envoyé par tug83 Voir le message
    Pourquoi ne pas écrire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_reduit(6785:6810)=[];
    Ou si le vecteur Signal possède 6810 éléments :

    Ou si le vecteur Signal doit être conservé intacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_reduit = Signal(1:6784);

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Impeccable, merci pour le complément

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

Discussions similaires

  1. [Débutant] [xlsread] Boucles for trop lentes
    Par abel413 dans le forum MATLAB
    Réponses: 11
    Dernier message: 25/06/2013, 16h06
  2. [XL-2007] Boucles for imbriquées, macro trop lente
    Par Jambonpurée dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2011, 19h25
  3. [XL-2003] Macro boucle for next trop lente
    Par sixtm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2011, 18h08
  4. Boucle for qui fait un tour en trop
    Par Iloon dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/03/2008, 12h15
  5. [Numarray]Lenteur! Trop de boucle For peut etre????
    Par parp1 dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 19/05/2006, 09h31

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