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 :

\[ f(x) = \left\{ \begin{array}{ll} \sin \left( x \right) & \quad \text{si} \quad x>0 \\ \sin \left( 2x \right) & \quad \text{sinon} \end{array} \right.\]

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 :

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 :

Fonction définie par morceaux
Fonction définie par morceaux

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

indices = find(M)

renvoie dans la variable indices la liste des indices du tableau M dont les éléments sont non nuls.

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é :

>> 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 :

>> find(x)
 
ans =
    1 3 4 5 6

ou de trouver tous les éléments correspondant à un critère logique :

>> 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 :

>> 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 :

>> inds = find(x < 0,2,'last')
 
inds =
    5   6