Opérations relationnelles ou logiques sur les tableaux

Comme pour les opérations arithmétiques, les opérations logiques qui existent pour les nombres scalaires peuvent aussi être appliquées à des tableaux numériques.

Les opérateurs relationnels permettent de réaliser des comparaisons logiques entre des valeurs numériques.

Valeurs logiques

Fondamental

La valeur logique "VRAIE" s'appelle true, et "FAUX" s'appelle false ; ces valeurs sont de type logique.

Ces valeurs logiques sont aussi représentées par les valeurs 1 et 0.

Toutes les opérations relationnelles ou logiques renvoient un résultat égal à la valeur logique 0 ou 1.

Opérateurs relationnels

Les opérateurs relationnels permettent la comparaison de deux valeurs entre-elles.

Le tableau suivant synthétise les syntaxes des différents opérateurs relationnels disponibles :

Syntaxe des opérateurs relationnels

Opération relationnelle

Syntaxe MATLAB

symbole

fonction

A égal à B

A == B

eq(A,B)

A différent de B

A ~= B

ne(A,B)

A supérieur à B

A > B

gt(A,B)

A supérieur ou égal à B

A >= B

ge(A,B)

A inférieur à B

A < B

lt(A,B)

A inférieur ou égal à B

A <= B

le(A,B)

Exemple

Prenons quelques exemples d'opérations relationnelles sur des valeurs numériques quelconques :

>> 2 == 2
 
ans =
    1
 
>> 2.4 > 3.2
 
ans =
    0

Question / Réponse

Question

Que se passe-t'il si l'un des opérandes est un tableau de valeurs numériques ? Et si les deux opérandes sont des tableaux ?

Réponse

ExempleComparaison d'un tableau et d'un scalaire

>> A=[1 4; 3 2]
 
A =
    1   4
    3   2
>> A > 2
 
ans =
    0   1
    1   0

Les termes de \(A\) supérieurs à 2 donnent 1 (true), les autres 0 (faux). La possibilité d'appliquer une opération relationnelle sur un tableau sera exploitée dans la suite pour calculer les valeurs d'une fonction définie par morceaux.

ExempleComparaison de deux tableaux

Prenons maintenant deux tableaux quelconques de même dimension, et comparons-les :

>> A=[1 2 ; 3 -2]
 
A =
    1   2
    3  -2
 
>> B=[-3 2.5 ; 1 -1]
 
B =
   -3.0000   2.5000
    1.0000  -1.0000
>> T = A > B
 
T =
    1   0
    1   0

Complément

Il peut être utile de savoir si le tableau T résultat d'un test contient que des valeurs non nulles (ou valeurs logiques true) ou s'il y a au moins une valeur non-nulle (ou valeur logique true).

Pour cela, vous pouvez utiliser les fonctions all(T) et any(T), respectivement. Par défaut, si T n'est pas un vecteur, ces fonctions testent la présence de valeurs non nulles selon les colonnes de T.

Exemple

Reprenons l'exemple précédent :

>> all(T)
 
ans =
    1 0
 
>> any(T)
 
ans =
    1 0
 
>> all(all(T))
 
ans =
    0
 
>> any(any(T))
 
ans =
    1

Opérateurs logiques

Les opérateurs logiques sont des opérateurs qui s'appliquent exclusivement sur des valeurs de type logique. Ils permettent la combinaison de conditions logiques.

Le tableau suivant donne la syntaxe des opérateurs logiques disponibles en MATLAB :

Syntaxe des opérateurs logiques

Opération logique

Syntaxe MATLAB

symbole

fonction

A et B

A & B

and(A,B)

A ou B

A | B

or(A,B)

A ou exclusif B

xor(A,B)

Négation de A

~A

not(A)

tandis que ce tableau rappelle le résultat de ces opérations logiques :

Tableau logique

A

B

and(A,B)

or(A,B)

xor(A,B)

not(A)

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

A et B peuvent être des valeurs scalaires logiques ou des tableaux de valeurs logiques de même dimensions. Pour les tableaux, ces opérations s'appliquent terme à terme.

Opérateurs logiques court-circuit

On appelle opérateurs logiques court-circuit les opérateurs && et ||. Contrairement aux opérateurs & et |, les opérateurs logiques court-circuit n'évaluent pas le second opérande, si la valeur du premier permet déjà de connaître le résultat global. (se référer au tableau logique présenté ci-dessus)

Exemple

Si A vaut 0, A && B vaudra nécessairement 0, quel que soit B.

Exemple

Si A vaut 1, A || B vaudra nécessairement 1, quel que soit B.

Exemple

Le && est très utile pour définir des valeurs qui n'ont de sens que sous certaines conditions. Prenons par exemple le test a/b > 1/3, ce test n'a de sens que si a/b est défini, c'est-à-dire si b ~= 0 ; on peut donc écrire :

>> a= 3; b = 7;
>> v = (b~=0) && (a/b > 1/3)
 
v =
    1

Dans ce cas, l'expression a/b > 1/3 est évaluée et vaut 1.

À l'inverse :

>> a= 3; b = 0;
>> v = (b~=0) && (a/b > 1/3)
 
v =
    0

l'expression a/b > 1/3 n'est pas évaluée, car pas définie puisque b est nul, et le test vaut 0.