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 valeurs proches de deux vecteurs


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Trouver valeurs proches de deux vecteurs
    Bonjour,

    Soit 2 vecteurs A, B de même dimension

    A=[1 15 45 78 103 125]
    et B=[5 14 55 79 125 203]

    J'aimerais trouver les indices de ces vecteurs pour lesquelles leurs valeurs sont très proches (mais pas identiques) et supérieur à une certaine valeur

    Soit ici C=[2 3]

    En gros :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    IdxPresquePareil = find(A==B && A>50 && B>50)


    J'ai deux problèmes:

    - Celui de la syntaxe pour mettre plusieurs conditions en utilisant l'indexage logique
    - Celui de mettre un "quasi égale" entre deux valeurs (par exemple, peut varier de 5)

    on pourrait penser à un truc comme :


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    IdxPresquePareil = find( (A<B+5) || (A<B-5)  && (A>50) && (B>50) )


    Mais évidemment ce n'est pas bien syntaxé et peut être qu'il y a mieux..

    Merci
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  2. #2
    Membre confirmé
    ha je crois que
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    C=find(abs(A-B)<5 & A > 50 & B > 50)


    marche bien
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  3. #3
    Membre actif
    Bonjour,

    un complément pas nécessairement indispensable :
    - pour travailler en valeurs relatives plutôt qu'absolues, il est possible que chercher les valeurs proches en faisant abs(1-A./B) plutôt que abs(A-B).
    - A && B ne fonctionne que si A et B sont des scalaires, et non des vecteurs. Dans ce dernier cas, comme tu l'indiques, il faut utiliser A & B. La différence est la suivant :
    Avec C = A && B, Matlab ne regarde l'état logique de B que si celui de A vaut 1 (en effet, si A vaut 0, il est inutile de regarder l'état de B puisque C vaudra de toutes façon 0.
    Avec C = A & B, Matlab regarde systématiquement l'état logique de B, indépendamment de celui de A.
    - attention à l'ordre des opérateur : le "&" est prioritaire sur le "ou" (de même que la multiplication est prioritaire sur l'addition). Ainsi : A | B & C = A | (B & C). cela aurait empéché de fonction ton exemple " find( (A<B+5) || (A<B-5) && (A>50) && (B>50) )" comme tu l'entendais.

###raw>template_hook.ano_emploi###