next up previous contents
suivant: Lecture et écriture au monter: Introduction au logiciel Matlab précédent: Les boucles   Table des matières

Tests

Un test est une alternative entre deux commandes (ou groupe de commandes ) Matlab  sélectionnées suivant le résultat d'une opération logique. Le résultat d'une opération logique (voir tableau 4) est une variable logique ou boléenne qui vaut $1$ pour VRAI et $0$ pour FAUX.

Dans Matlab  on dispose du classique if-else agrémenté du elseif parfois bien utile. La syntaxe est par exemple

»x=16
 x  =
    16  
»if x>0, y=-x, else y=x, end
 y  =
  - 16  
On a aussi la possibilité d'utiliser le switch-case, qui a son équivalent dans le langage C
switch expression
  case case_expr
    commande,... ,commande
  case case_expr1,case_expr2,case_expr3,...
     commande,... ,commande
...
  otherwise
    commande,... ,commande
end
Cet élément de syntaxe permet de gérer plus élégamment les tests portant sur un seul critère pouvant prendre plus de deux valeurs entières, comme dans l'exemple suivant
n=round(10*rand(1,1))
switch n
case 0  
    fprintf('cas numero 0')
case 1
    fprintf('cas numero 1')
case 2
    fprintf('cas numero 2')
otherwise
   fprintf('autre cas')
end


Tableau 4: Les opérateurs logiques dans les tests
français test Matlab
et $\&$
ou $\vert$
non ~
égal $==$
différent ~$=$
plus petit que $<$
plus grand que $>$
plus petit ou égal à $ <=$
plus grand ou égal à $ >= $


On a vu dans le paragraphe 2.3 qu'on pouvait utiliser la plupart des fonctions définies pour un argument scalaire avec un argument tableau. Dans ce cas la fonction renvoie dans un tableau la valeur de la fonction appliquée à chaque composante. Si la fonction met en oeuvre des tests logiques sur la valeur de la variable scalaire passée en argument d'appel, le résultat appliqué à un vecteur dépend du résultat logique intersection du test appliqué à toutes les composantes. Pour appliquer la fonction composante par composante, il faut parfois la ré-écrire en remplaçant les tests sur des valeurs scalaires par l'emploi de la fonction find ou bien par des fonctions caractéristiques.

Prenons par exemple, la fonction suivante

function y=test1(x)
if x>0.5
  y=1
else
  y=0
end
qui teste la position d'une variable réelle par rapport à $0.5$. Si on l'applique à un vecteur, on obtient une seule valeur correspondant au résultat du test scalaire vérifié pour toutes les composantes. Ici, test1(v) sera égal à $1$ si toutes les composantes de v sont supérieures à $0.5$.

Pour appliquer le test composante par composante, le plus simple est de remarquer que test1 se programme aussi par l'instruction

y=(x>0.5)
qui donne le résultat attendu dans le cas scalaire et aussi vectoriel (le vérifier!)

Exercice 14   Regardons maintenant une deuxième fonction test2
function y=test2(x)
if x>0.5
  y=sin(x)
else
  y=x
end
  1. Créer un vecteur contenant $10$ valeurs aléatoires uniformément distribuées entre $0$ et $0.5$.
  2. Tester l'emploi des deux fonctions test1 et test2 sur ce vecteur
  3. Ecrire une fonction test2v qui fait la même chose que test2 composante par composante. (Utiliser find ou des fonctions caractéristiques)

Exercice 15  
  1. Ecrire un M_file pour la fonction

    \begin{eqnarray*}
f_2(x)=\left\{\begin{array}{ll}
0,\quad&x<-1\\
1/(e^{-15(x+3 ...
...-7 /2)^2},\quad& 3\leq x<4\\
0,\quad&x\geq 4
\end{array}\right.
\end{eqnarray*}

    sur l'intervalle $[-2,5]$
  2. Tester la fonction sur quelques valeurs, par exemple $f_2(-1)=0.0230$, $f_2(3)=0.0235$.
  3. Créer un tableau d'abscisses $x$ de $-2$ à $5$ par pas de $0.01$
  4. Représenter la fonction $f_2$ aux points $x_i$, avec la commande
    plot(x,f2(x))
    Modifier si besoin f2.m pour que ceci soit possible.


next up previous contents
suivant: Lecture et écriture au monter: Introduction au logiciel Matlab précédent: Les boucles   Table des matières
marie 2005-02-01