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 l'index d'un réel dans un vecteur


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Trouver l'index d'un réel dans un vecteur
    Bonjour,

    Voilà j'ai juste une question toute simple mais je ne sais pas comment faire :

    J'ai un vecteur [0,360]. Je veux lui assigner un pas 0:pas:360 puis pour un nombre réel donné, je veux trouver l'index correspondant à sa valeur la plus proche dans le vecteur.

    Exemple :
    index 1 2 3 4 5 ... 37
    vec 0 10 20 30 40 ... 360
    Par exemple pour 23.6, index -> 3.

    J'ai essayé de trouver une formule simple entre autre, pour un réel d :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ratio = (nvec-1) /(vec(nvec)-vec(1))
    index = round(ratio*(d-vec(1)+1))
    Mais ça ne marche pas ma formule doit être fausse (par exemple d=23,6).
    En attendant pour une valeur d pour trouver son index je fais find(min(abs(vec-d))) mais une formule mathématique serait plus rapide dans mes boucles.


    Je vous remercie.

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

    Ta ligne find(min(abs(vec-d))) est fausse : min(...) te renvoie la valeur minimum, et appliquer find ne sert à rien.
    [~ index] = min(abs(vec-d)).
    Sinon index = round(d/pas+1)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour les conseils. Desole j avais mal recopié la précédente formule du find, j'avais dans mon script :

    find(abs(vec-d)==min(abs(vec-d)))


    Merci pour la formule, il semble que :
    index = round(d/pas+1)
    marche pour des vecteurs commencant a vec(1) = 0 et pour generaliser :

    index = round((d-vec(1))/pas+1)
    il me semble.


    Merci beaucoup pour votre aide !

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    sinon en continuant d'utiliser find tu peux ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index= find(vec>=d,1,'first')

  5. #5
    Invité
    Invité(e)
    Par défaut
    @le fab : Petit bémol sur ta solution, elle va retourner l'indice de la première valeur supérieure égale à d et non la plus proche.
    Par exemple pour vec = 0:10:360; :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> find(vec>=17,1,'first') % retourne 3 => OK
    >> find(vec>=12,1,'first') % retourne 3 et non 2

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    pas faux, j'avais lu un peu vite

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 19h13
  2. Trouver le numéro de ligne réel dans une grille
    Par Margance dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/11/2011, 13h06
  3. Trouver l'index courant dans une liste
    Par Hepil dans le forum C#
    Réponses: 5
    Dernier message: 27/09/2010, 12h25
  4. Réponses: 24
    Dernier message: 19/03/2009, 16h18
  5. Réponses: 6
    Dernier message: 31/01/2008, 15h06

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