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 :

Trouver des valeurs dans un vecteur


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut Trouver des valeurs dans un vecteur
    Bonjour tout le monde,

    J'ai un signal et je cherches a savoir combien de fois la constante "c" est depasse par ce signal.
    J'ai donc rentre dans un vecteur "X" toutes les valeurs de mon signal et j'ai essaye de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    X1=X([1:end-1]);
    X2=X([2:end]);
    Tmp=find (X1 <=c & X2>c);
    J'ai un resultat mais quand j'essaye avec un vecteur "test" du genre
    Ca marche pas tres bien.
    Si je prends c=4.2, ou n'importe quelle autre valeur, j'ai l'impression que c'est bon mais un peu par hasard (vraiment dependant de mon vecteur on va dire).

    De plusla constante "c" est en realite un vecteur donc je pensais faire une boucle et pour chaque valeur de "c" compter le nombre de fois ou la valeur est depassee.

    Avez vous des conseils ?

    Hollow

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Le code est correcte, pourquoi "Ca marche pas tres bien" ?

    ++

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    En fait c'est dans la conceptualisation de mon programme que j'ai "foire".

    En effet sur ce signal je veux savoir combien de fois mon processus croise la constante "c".

    La je regarde seulement la valeur ou il croise ... enfin avec le code que je t'ai montre, j'obtiens que un seul indice, or je vois bien sur mon signal qu'il croise la constante plusieurs fois ...

  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
    Est-ce que tu pourrais essayer de définir mieux "dépasser", "croiser" ?
    J'avoue que ce n'est pas très clair

    Donne nous un exemple (avec une courbe non monotone ce sera peut-être plus parlant), avec le résultat que tu espères avoir.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    Ouai c'est vrai que c'est pas super clair

    Alors imaginons que j'ai une sinusoide quelconque sur [-4pi 4pi] pour faire simple
    Si la constante c=0.3 on va dire.
    J'essaye de regarder le nombre de fois ou la sinusoide coupe 0.3 en montant ... je sais pas si c'est plus clair

    Pour expliquer le coup du "montant" si on a la fonction carre, la courbe croise deux fois la valeur 0.3 mais une seule fois quand la fonctione st croissante.

    Merci de votre aide

    Hollow

  6. #6
    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
    Par rapport à ce que tu écrit ton code semble toujours correct.
    Donc il y a un problème entre ce que tu veux et ce que nous on comprend.

    Peux-tu donner un exemple concret pour lequel ton code serait faux ?

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    essayes comme ceci :

    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
     
     
    clc
    close all
    clear all
     
    n = 40
    X = 10 * rand(1,n);
    IX = 1:n;
    c = 8;
     
    S = find((X(1:end-1) - c) .* (X(2:end) - c) < 0);
     
    plot(IX,X)
    hold on
    scatter(IX(S),X(S))
    plot(IX, c * ones(size(IX)))
    ++ bonne chance

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    Voici mon code avec ma boucle

    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
     
     
    u=[-0.06:0.01:0.06]; %mes differents niveaux
    ZZ=Z1(:,2); %les valeurs de mon signal
     
    A1=ZZ([1:end-1]);
    A2=ZZ([2:end]);
     
     
    N=length(u);
    lc=zeros(N,2); %de facon a avoir le nombre de depassement et le niveau %correspondant
     
    for i=1:N
        lev=u(i);
        tmp=0;
        j=find(A1<=lev & A2>lev);
        TF=isempty(j);
        if TF==0
            NN=length(j);
            tmp=tmp+NN;
        end
        lc(i,1)=tmp;
        lc(i,2)=lev;
    end

Discussions similaires

  1. Supprimer des valeurs dans un vecteur
    Par tomCB1 dans le forum MATLAB
    Réponses: 7
    Dernier message: 19/06/2014, 14h30
  2. mettre des valeurs dans un vecteur
    Par shootgirl dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/06/2011, 10h09
  3. supprimer des valeurs dans un vecteur
    Par christophe_halgand dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/07/2009, 14h14
  4. [find] Trouver des valeurs dans un tableau de cellules
    Par Pierre845 dans le forum MATLAB
    Réponses: 5
    Dernier message: 22/01/2009, 10h52
  5. Trouver la position des valeurs d'un vecteur
    Par hidies dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/04/2007, 12h33

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