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 :

Equivalent boucle for [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Equivalent boucle for
    Bonjour,

    Existe t-il un équivalent à cette opération sous une forme vectorielle et donc plus rapide pour matlab..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    o=zeros(1,length(M))
    for i=1:length(mex)
        o(mex(:,1))=mex(:,2)
    end
    mex est une matrice avec 2 colonnes dont la premiere represente la position des pics d'un signal et la seconde la valeur de ces pics.

    L'opération ci dessus a pour but de creer un vecteur avec les valeurs des pics à leur position afin de garder une taille de vecteur equivalente à M le signal original.

    Merci d 'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Bonjour,

    Ta boucle ne sert à rien puisque tu n'utilises pas l'index de ta boucle...

    Est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    length(M) = max(mex(:,1))
    ?

    Christophe

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par MrPingouin Voir le message

    L'opération ci dessus a pour but de creer un vecteur avec les valeurs des pics à leur position afin de garder une taille de vecteur equivalente à M le signal original.
    Comment peux tu avoir un vecteur avec uniquement certains max (tes pics) qui serait de la même taille que ton vecteur original?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Je pense qu'il veut créer un vecteur de même longueur que celui de base mais seule la valeur des pics serait différent de zéro.

    Tu mets tout à zéros et là où tu as des pics, tu insères la valeur de ce pic.

    Christophe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Ha oui ok mais dans tous les cas il est nécessaire de définir ce qu'est un max (bcp de discussion sur ce sujet) :

    -Un max dans une fenêtre de position donnée ?
    -là ou l'on observe un changement de signe de la dérivée ou bien là ou la dérivée est nulle (=tous les "pics") ?
    -Un max qui dépasse un seuil donné ?

    Ce n'est qu'après qu'on pourra commencer à discuter matlab.

  6. #6
    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
    Tout ça m'a l'air bien embrouillé.

    @Newenda : je pense que tu pars un peu trop loin par rapport à la question posée

    @MrPingouin :
    Christophe a raison sur le fait que la boucle ne sert à rien.
    Par contre il faut que tu sois sur que length(M) soit supérieur au maximum des mex(:,1).
    Sinon ton initialisation ne sert à rien.

    Je te conseille fortement de changer le nom de ta variable mex, MEX étant une fonction de MATLAB.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Caro-Line Voir le message

    @Newenda : je pense que tu pars un peu trop loin par rapport à la question posée

    Bah je sais pas trop mais il parait tout de même nécessaire de faire une condition pour trouver ces max non? comment peut on définir un max avec une simple boucle? sauf si on travail justement sur une valeur max dans un offset donné. Une condition simple serait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for i=2:length(X)-1
     
    if X(i-1) > X(i) & X(i+1) > X(i) 
    X(i)=pic bas
    elseif  X(i-1) < X(i) & X(i+1) < X(i) 
    X(i)=pic haut
    else
    X(i)=pas un pic
    end
     
    end

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bon la réponse était tout simplement dans le premier post.
    La boucle ne sert a rien
    Désolé d avoir pris de votre temps pour ça.

    Par contre ,vos réponses m'ont permis de simplifier pas mal de choses dans cette partie du code et je vous en remercie.

    Pour Newenda,je n'ai pas parlé de max mais de pics... Leur détection se fait quelques lignes en amont de ce que je vous ait présenté.
    Elle utilise une methode assez classique qui utilise la différence entre un point et ces proches voisins en "lisant" la courbe dans un sens puis dans l'autre puis en faisant la somme des deux lectures.Il n'y a donc pas besoin de seuil dans ce cas.

    Merci encore de vos réponses.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Rha effectivement, j'ai encore lu trop vite

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

Discussions similaires

  1. [Toutes versions] Boucle For Equivalent de l instruction continue
    Par torquemada dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/11/2014, 10h19
  2. [Taglib] Equivalent boucle "for(int i ; i<10 ; i++ )
    Par Hikage dans le forum Taglibs
    Réponses: 2
    Dernier message: 22/03/2006, 16h53
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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