Débuter avec MATLAB

nextpreviouscontents
Suivant: Programmer sous MATLABPrécédent:Calculer avec MATLAB
Voir:  Table des matièreIndex - Accueil


Les entrées-sorties


Les formats d'affichage des réels

MATLAB dispose de plusieurs formats d'affichage des réels. Par défaut le format est le format court à 5 chiffres. Les autres principaux formats sont:
 
format long  : format long à 15 chiffres.
format short e : format court à 5 chiffres avec notation en virgule flottante.
format long e : format long à 15 chiffres avec notation en virgule flottante.

MATLAB dispose également des formats format short g et format long g qui utilise la << meilleure >> des deux écritures à virgule fixe ou à virgule flottante. On obtiendra tous les formats d'affichage possibles en tapant help format. On impose un format d'affichage en tapant l'instruction de format correspondante dans la fenêtre de contrôle, par exempleformat long. Pour revenir au format par défaut on utilise la commande format ou format short.

>> pi
ans =
    3.1416
>> format long
>> pi
ans =
   3.14159265358979
>>  format short e
>> pi^3
ans =
   3.1006e+01
>> format short g
>> pi^3
ans =
       31.006
>> format short
>>

Affichage simple, la commande disp

La commande disp permet d'afficher un tableau de valeurs numériques ou de caractères. L'autre façon d'afficher un tableau est de taper son nom. La commande disp se contente d'afficher le tableau sans écrire le nom de la variable ce qui peut améliorer certaines présentations.
>> A = magic(4);
>>  disp(A)
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> A
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>>
On utilise fréquemment la commande disp avec un tableau qui est une chaîne de caractères pour afficher un message. Par exemple disp('Calcul du déterminant de la matrice A'). On utilise également la commande disp pour afficher un résultat. Par exemple disp(['Le déterminant de la matrice A vaut ', num2str(det(A))]). On remarque que l'usage de la commande disp est alors un peu particulier. En effet un tableau doit être d'un type donné, les éléments d'un même tableau ne peuvent donc être des chaînes de caractères et des valeurs numériques. On a donc recours à la commande num2str (<< number to string >>) pour convertir une valeur numérique en une chaîne de caractères. Par défaut la commande num2str affiche 4 décimales mais il est possible de lui spécifier le nombre de décimales souhaité en second paramètre. De même il est possible de lui spécifier un format d'affichage particulier de la valeur numérique; on consultera la documentation MATLAB pour plus de détails. Attention, si la chaîne de caractères contient une apostrophe il est impératif de doubler l'apostrophe.

Lecture

La commande input permet de demander à l'utilisateur d'un programme de fournir des données. La syntaxe est var = input(' une phrase '). La phrase une phrase est affichée et MATLAB attend que l'utilisateur saisisse une donnée au clavier. Cette donnée peut être une valeur numérique ou une instruction MATLAB. Un retour chariot provoque la fin de la saisie. Une valeur numérique est directement affectée à la variable var tandis qu'une instruction MATLAB est évaluée et le résultat est affecté à la variable var. Il est possible de provoquer des sauts de ligne pour aérer le présentation en utilisant le symbole \n de la manière suivante: var = input('\n une phrase : \n '). Pensez à mettre un point virgule (;) à la fin de l'instruction si vous ne souhaitez pas voir s'afficher var = .

Sous cette forme il est impossible d'avoir une donnée de type chaîne de caractères dans la mesure où MATLAB essaie d'interpréter cette chaîne de caractères comme une instruction. Si l'on souhaite saisir une réponse de type chaîne de caractères on utilise la syntaxe var = input(' une phrase ','s'). Signalons qu'un retour chariot (sans autre chose) initialise la variable var au tableau vide []. Voici un exemple d'utilisation de la commande input (on suppose que la variable res contient une valeur numérique).

rep = input(' Affichage du resultat ? o/n [o] ','s');
if isempty(rep), rep = 'o'; end
if rep == 'o' |  rep == 'y'
  disp(['Le resultat vaut ', num2str(res)])
end

Impressions dirigées par format

La commande sprintf permet l'impression de variables selon un modèle donné. Un modèle d'édition se présente sous la forme du symbole pourcent (%) suivi d'indications permettant de composer le contenu du champ à imprimer, en particulier sa longueur en nombre de caractères. Le modèle d'édition utilisé par MATLAB est le modèle d'édition du langage C. La syntaxe de la commande sprintf est:

sprintf(format, variables)

Modèle d'édition de caractères
Un modèle d'édition de caractères est de la forme %Ls% est le symbole de début de format et s le symbole précisant que la donnée est de type chaîne de caractères. L est un entier donnant la longueur total du champ (en nombre de caractères). Par défaut le champ est justifié à droite (si la longueur de la chaîne de caractères est plus petite que la longueur L du champ, des espaces sont insérés après la chaîne de caractères). Le symbole - (moins) juste après le symbole % permet de justifier à gauche. En l'absence de l'entier L la longueur totale du champ est égale au nombre de caractères de la chaîne.
>> sprintf('%s', 'il fera beau a Brest')
ans =
il fera beau a Brest 
>> temps = 'il fera beau a Brest'; sprintf('%s',temps)
ans =
il fera beau a Brest 
>> sprintf('%30s', temps)
ans =
          il fera beau a Brest
>> sprintf('%-30s', temps)
ans =
il fera beau a Brest
>> sprintf('meteo : %s', temps)
ans =
meteo : il fera beau a Brest
>>
Modèle d'édition des réels
Un modèle d'édition de réel est de la forme %+- L.D t, où % est le symbole de début de format, L est un entier donnant la longueur total du champ (en nombre de caractères, point virgule compris), D est le nombre de décimales à afficher et t spécifie le type de notation utilisée. Par défaut le champ est justifié à droite (si la longueur de la variable est plus petite que la longueur du champ L, des espaces sont insérés à gauche). Le symbole - (moins) permet de justifier à gauche. Le symbole + (plus) provoque l'affichage systématique d'un signe + devant les réels positifs. Les principales valeurs possibles pour t sont les suivantes:
 
d : pour les entiers
e : pour une notation à virgule flottante où la partie exposant est délimitée par un e minuscule (ex: 3.1415e+00)
E : même notation mais E remplace e (ex: 3.1415E+00)
f : pour une notation à virgule fixe (ex: 3.1415)
g : la notation la plus compacte entre la notation à virgule flottante et la notation à virgule fixe est utilisée
>> x = pi/3; y = sin(x);
>> sprintf('sin(%8.6f) = %4.2f', x,y)
ans =
sin(1.047198) = 0.87    
>> sprintf('sin(%8.6f)  = %4.2E', x,y)
ans =
exp(1.047198)  =  8.66E-01    
>>
Utilisations particulières
La commande sprintf est << vectorielle >> : si la variable n'est pas scalaire le format d'impression est réutilisé pour tous les éléments du tableau, colonne par colonne.
>> x = [1:10];
>> sprintf(' %d ,',x)
ans =
 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
>>
Il est possible d'utiliser les symboles suivant dans les chaînes de caractères
 
\n : provoque le passage à une nouvelle ligne
\t : insère une tabulation horizontale
\b : décale l'impression du champ suivant d'un caractère vers la gauche
\r  : saut horizontal
>> z =[]; x = [1:10]; for i=1:length(x), z = [z ,x(i), log(x(i))]; end;
>> s = sprintf('%4.1f | %8.6E \n ', z )
ans =
  1.0 | 0.000000E+00
  2.0 | 6.931472E-01
  3.0 | 1.098612E+00
  4.0 | 1.386294E+00
  5.0 | 1.609438E+00
  6.0 | 1.791759E+00
  7.0 | 1.945910E+00
  8.0 | 2.079442E+00
  9.0 | 2.197225E+00
 10.0 | 2.302585E+00 
>>
Si l'on a besoin d'afficher le caractère % on le doublera %% pour qu'il ne soit pas interprété comme le début d'un format. La commande fprintf est l'analogue de sprintf pour imprimer de variables selon un modèle donné dans un fichier.

nextpreviouscontents
Suivant: Programmer sous MATLAB Précédent:Calculer avec MATLAB
Voir:  Table des matièreIndex - Accueil


(c) Stéphane Balac - Centre de Mathématiques - INSA de Lyon