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 :
Opération relationnelle | Syntaxe MATLAB | |
---|---|---|
symbole | fonction | |
A égal à B |
|
|
A différent de B |
|
|
A supérieur à B |
|
|
A supérieur ou égal à B |
|
|
A inférieur à B |
|
|
A inférieur ou égal à B |
|
|
Exemple :
Prenons quelques exemples d'opérations relationnelles sur des valeurs numériques quelconques :
1 2 3 4 5 6 7 8 9 | >> 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 ?
Exemple : Comparaison d'un tableau et d'un scalaire
1 2 3 4 5 | >> A=[1 4; 3 2] A = 1 4 3 2 |
1 2 3 4 5 | >> 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.
Exemple : Comparaison de deux tableaux
Prenons maintenant deux tableaux quelconques de même dimension, et comparons-les :
1 2 3 4 5 6 7 8 9 10 11 | >> 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 |
1 2 3 4 5 | >> 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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | >> 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 :
Opération logique | Syntaxe MATLAB | |
---|---|---|
symbole | fonction | |
A et B |
|
|
A ou B |
|
|
A ou exclusif B |
| |
Négation de A |
|
|
tandis que ce tableau rappelle le résultat de ces opérations logiques :
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 :
1 2 3 4 5 | >> 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 :
1 2 3 4 5 | >> 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
.