Exemples d'utilisation des opérations logiques sur les tableaux
Définition d'une fonction par morceaux
Nous avons vu que pour MATLAB, les valeurs logiques true
ou false
sont équivalentes à 1
ou 0
. Ce n'est pas qu'une écriture, et cela implique que ces valeurs logiques peuvent être utilisées comme valeurs numériques (elles sont alors automatiquement sur-typées en réel double).
Ceci est particulièrement utile pour définir des fonctions par morceaux.
Exemple :
Imaginons que l'on veuille définir la fonction suivante :
C'est une fonction y=f(x), où f est définie par morceaux puisque sa valeur dépend d'un test logique définissant, dans cet exemple, deux domaines de définition.
Voilà comment définir y
en fonction de x
:
1 2 | x=-2* pi : pi /25:2* pi ; y = sin (x) .* (x>0) + sin (2*x) .* not (x>0); |
On ajoute les deux expressions \sin \left( x \right) et \sin \left( 2x \right) en les pondérant par la condition logique définissant leurs domaines de validité. C'est simple, mais efficace !
Si l'on trace y
en fonction de x
(vous saurez bientôt le faire !), on obtient la courbe suivante :
Remarque :
On aurait pu définir une fonction MATLAB, permettant le calcul de cette fonction mathématique... mais les fonctions[1], c'est pour plus tard !
Critère sur les valeurs : Fonction find
Nous avons vu qu'il était aisé d'appliquer un opérateur logique sur un tableau. Cela nous renvoie un tableau contenant des 1
ou des 0
(valeurs logiques true
ou false
) selon que le critère logique est vérifié ou non. Ce principe peut être exploité pour écrire facilement une fonction définie par morceaux, mais cela ne permet pas d'extraire ou de modifier des valeurs selon un test logique. Pour cela, on peut utiliser la fonction find
.
La fonction find
est utile pour identifier simplement les éléments non nuls d'un tableau, et par extension, d'identifier les valeurs vérifiant un critère logique donné.
Syntaxe :
1 | indices = find (M) |
renvoie dans la variable indices
la liste des indices du tableau M
dont les éléments sont non nuls.
1 | indices = find (opération logique sur M) |
renvoie dans la variable indices
la liste des indices du tableau M
vérifiant l'opération logique.
Exemple :
Soit un tableau de valeurs donné :
1 2 3 | >> x = [ -1.2 0 3.1 6.2 -3.3 -2.1] x = -1.2000 0 3.1000 6.2000 -3.3000 -2.1000 |
La fonction find
permet d'identifier les éléments comportant des valeurs non nulles :
1 2 3 4 | >> find (x) ans = 1 3 4 5 6 |
ou de trouver tous les éléments correspondant à un critère logique :
1 2 3 4 | >> inds = find (x < 0) inds = 1 5 6 |
Dans cet exemple, on a cherché tous les éléments négatifs du vecteur x
.
On peut ensuite facilement extraire le sous-tableau ne contenant que les éléments négatifs de x
en écrivant simplement :
1 2 3 4 | >> y = x(inds) y = -1.2000 -3.3000 -2.1000 |
Retenez bien cet exemple. Ce type de séquence s'avère très utile dans la pratique car ici encore, il économise le parcours du tableau et la multiplication de tests logiques.
Notons enfin que la fonction find
s'applique aussi aux tableaux 2D (voir la documentation).
Complément :
La fonction find
permet aussi de trouver les indices des k
premiers (first) ou des k
derniers (last) éléments répondant à un critère logique :
1 2 3 4 | >> inds = find (x < 0,2, 'last' ) inds = 5 6 |