2012-04-04 3 views
0

J'écris une condition IF facile. La fonction est de juger chaque rangée de la matrice comme étant certains vecteurs. Le code est le suivant:|| utilisation dans Matlab

if (compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1]) 
     match_1 = match_1 +1; 
    else 
     mismatch_1 = mismatch_1 +1; 
    end 

L'erreur a indiqué '' Opérandes au || et & & les opérateurs doivent être convertibles en valeurs scalaires logiques ''. CompareM est une matrice n par 2 et je me demande si l'erreur est faite par || opération. Merci d'avance!

Répondre

1

Si vous comparez des vecteurs , et non des valeurs scalaires, vous devez utiliser l'opérateur |. En conséquence, vous obtenez un vecteur logique de comparaison par paire élément par élément. Pour l'utiliser dans une instruction IF, vous devez convertir chaque instruction logique (puis utiliser ||) ou le résultat de | pour scalar avec ALL, ANY ou une autre fonction.

Si vous voulez comparer à des vecteurs pour l'égalité utiliser la fonction ISEQUAL comme

if isequal(compareM(i,:)==[1, 0]) || isequal(compareM(i,:)==[2, 1]) 
+0

Croyez que ceci devrait être 'if isequal (compareM (i, :), [1,0])'; En ce moment, vous avez une combinaison de la version corrigée et l'original. – bnaul

+0

Juste une faute de frappe. Merci. – yuk

+0

@yuk Oui! Je vous remercie . Pour les vecteurs, c'est différent. – AnneS

0
if ((compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1])) 
    match_1 = match_1 +1; 
else 
    mismatch_1 = mismatch_1 +1; 
end 

Notez les parenthèses fermantes externes.

+0

Il ne fonctionne toujours pas. La même erreur se produit. – AnneS

1

compareM(i, :) évalue à un tableau numérique 1x2, donc compareM(i,:)==[1, 0] évalue à un tableau logique 1x2. La même chose pour l'expression à droite du signe ||. Mais vous avez besoin d'une seule valeur logique de chaque côté de ||, pas un tableau 1x2 de valeurs logiques.

Si vous voulez que cette expression pour évaluer true si les deux valeurs sur les LHS de == sont les mêmes que les éléments correspondants sur les rhs, envelopper all() autour de chaque côté:

all(compareM(i,:)==[1, 0]) || all(compareM(i,:) ==[2, 1]) 
Questions connexes