Programmation sous Matlab

IF, ELSE, ELSEIF   


Essayer le petit programme suivant :
  
A = input('A = ');
B = input('B = ');
if    A < B
   disp('A < B')
elseif    A > B
   disp('A > B')
else
   disp('A = B')
end



SWITCH – CASE – OTHERWISE


L'utilisation de switch-case est illustrée par le petit programme suivant.
  
fprintf('\n\n');
disp('1   :   FRANCAIS');
disp('2   :   ENGLISH');
disp('3   :   ITALIANO');
k = input('\nfaites votre choix   :  ');
fprintf('\n\n');
switch k
   case 1
      disp('Bonjour');
      nom = input('Veuillez introduire votre nom  : ','s');
      disp(['A bientôt   ' nom])
   case 2
      disp('Hello  !');
      nom = input('Please, introduce your name  : ','s');
      disp(['See you later   ' nom])
   case 3
      disp('désolé, je ne parle pas italien');
      disp('sorry, I do not speek italien');
   otherwise
      fprintf('\nvous n''avez pas fait le bon choix\n');
end;



LA BOUCLE FOR


L'utilisation de la boucle for est illustrée par les deux petits programmes suivants.

t=0:0.01:3.5;
c='rgbmck:';
close all;
hold on;
for i = 1 : length(c)
   plot(t,i*sin(i*t),c(i));
end;
grid;


_________________________

k=32;
disp(char(ones(1,73)*95));
for l = 1 : 28
   for c = 1 : 8
      fprintf('|%3d   %c ',k,char(k));
      k = k+1;
   end
   fprintf('|\n')
end
disp(char(ones(1,73)*173));



LA BOUCLE WHILE

L'utilisation de la boucle while est illustrée par le petit programme suivant.

n=65;
while  n > 32 & n < 256
   fprintf('Le caractère de code ASCII %d est %c\n\n',n,char(n));
   c=input('taper un caractère   : ','s');
   n=fix(c);
   fprintf('le code ASCII de %c  est %d\n',c,n)
   n = input('\ntaper un nombre [33 à 255] : ');
end;


L'INSTRUCTION BREAK

   L'instruction break permet de quitter une boucle for ou une boucle while avant sa fin normale.

while  1
   c=input('taper un caractère  (f = fin) : ','s');
   if c == 'f'       break;   end;
   fprintf('le code ASCII de %c  est %d\n',c,fix(c))
end;


L'INSTRUCTION RETURN

   L'instruction return permet de quitter une fonction ou le programme principal avant sa fin normale


LES FONCTIONS

   Une fonction est un programme m-file qui retourne quelque chose.
   Tapez le programme suivant et sauvegardez le sous le nom am.m
  
function m = am(fp,fm,im)
   % m = am(fp,fm,im)
   % fp : fréquence de la porteuse
   % fm : fréquence du signal modulant
   % im : indice de modulation
   T=3/fm;
   te=1/fp/10;
   t=0:te:T-te;
   m=(1+im*cos(2*pi*fm*t)) .* sin(2*pi*fp*t);
end
 
 
Le end à la fin de la fonction n'est pas obligatoire mais il est préférable de le mettre.

Essayez le en tapant les commandes suivantes :

help am
x = am(1000,100,0.5);
plot(x);grid;


LES FONCTIONS LOGIQUES


all

La fonction all(x) est vrai si tout les éléments de x sont différent de zéro. Essayer les deux commandes suivantes:

all(1:10)
all(-1:1)

any

   La fonction any(x) est vrai si au moins un élément de x est non nul. Essayer les commandes ci-dessous:

any([0 0 0 1])
any(zeros(3))

exist

   exist('x') est vrai si la variable ou la fonction x existe dans l'espace de travail ou dans le chemin de recherche de MATLAB . Elle retourne :
--> 0 si x n'existe pas
--> 1 si la variable x est définie
--> 2 si la fonction x existe (dans le chemin de recherche MATLAB )
--> 7 si le dossier x existe (dans le chemin de recherche MATLAB )
--> voir help exist pour plus de détail

find(x)

   Cherche les indices des éléments non nul du vecteur x
  

[i,j] = find(x)

   Cherche les indices ligne et colon des éléments non nul de la matrice x

A = [0 0 75 0 0 0 -23 0 0 0 0];
i = find(A);
     i =      3     7

A(i)
ans = 75      -23

find(a>0)
      ans =      3

find(a<0)
      ans =      7

find(a==0)
      ans =      1     2     4     5     6     8     9    10    11


LA FONCTION FPRINTF

La fonction fprintf permet d'écrire des informations sur l'écran ou dans un fichier. La syntaxe pour l'écran est la suivante :
fprintf(format, A, B, C . . .)
  
format est une chaîne de caractère qui précise comment les données A, B, C doivent être affichées à l'écran. on utilise une syntaxe similaire à celle du langage C:    %7.3f
--> 7 est le nombre total de chiffres, le point compris
--> 3 est le nombre de chiffre après la virgule (précision)
--> f : spécificateur de type, voir tableau ci-dessous
Spécification Description
%c un seul caractère
%d décimal, utilisé en général pour les nombres entier
%e Notation exponentielle.  ex :  3.1415e+00)
%f notation en virgule fixe
%g format libre
%o Représentation octale (unsigned)
%s chaîne de caractères
%u Décimal non signé
%x Hexadécimal (lettres a-f)
%X Hexadécimal (lettres A-F)


Tout texte inclus dans la chaîne format sera reproduit à l'écran. Certains caractères de contrôle peuvent être introduits en les précédant de \ comme cela est indiqué dans le tableau ci-dessous.
  
> fprintf('\npi = %g  = %d =  %f =  %4.2f  = %e\n',pi,pi,pi,pi,pi)
pi = 3.14159  = 3.14e+000 =  3.141593 =  3.14  = 3.141593e+000

> fprintf('Pi = %5.3f\nLe double de pi est %20.18f\n',pi,2*pi);
Pi = 3.142
Le double de pi est 6.283185307179586200

Caractère
Description
\b Backspace
\f Form feed
\n New line
\r Carriage return
\t Horizontal tab
\\ Backslash
\'' ou  '' apostrophe
%% %


SAISIE D'UNE DONNEE AU CLAVIER

La fonction input permet de saisir une donnée au clavier durant l'exécution d'un programme. La donnée peut être un scalaire, une matrice ou une chaîne de caractère
  
X = input('tapez un nombre   :   ');
Affiche le message : tapez un nombre  et attend qu'une donnée soit introduite au clavier. La valeur introduite est affectée à la variable X. Si on veut introduire une chaîne de caractères, il faut la taper entre guillemets., sinon il faut utiliser le format suivant. Dans ce cas, les guillemets son inutiles car MATLAB  s'attend à une chaîne.
X = input('tapez une chaine   :   ' , 's');
  
  

MANIPULATION DE CHAINES DE CARACTERES

   Taper help strfun pour avoir une liste exhaustive des fonctions manipulant les chaînes de caractères. En voici quelques-unes.
  

deblank(X)

   supprime les blancs qui se trouvent à la fin de la chaîne X

findstr(str1, str2)

Cherche les indices du début de la petite chaîne dans la grande chaîne
str1 = 'Find the starting indices of the shorter string.';
str2 = 'the';
findstr(str1,str2)
             ans =     6    30

strcmp(str1,str2)

   compare les deux chaîne str1 et str2
  
strcmp('yes','yes ')
    ans =     0

strcmp('yes','yes')
   ans =   1

strcat(str1, str2, str3,. . . )


Concaténation de chaînes

s = strcat('bonjour','monsieur')
   s =   bonjourmonsieur
  
s = strcat('bonjour      ','monsieur')
   s = bonjourmonsieur
  
s = strcat('bonjour','       monsieur')
   s = bonjour       monsieur

Pour mieux gérer le problème des espaces, il vaut mieux utiliser:
s = ['Bonjour'  '   '  'Monsieur']
  s = Bonjour   Monsieur

strrep(str1, str2, str3)

   Recherche str2 dans str1 et la remplace par str3

S = 'j''ai passé une très bonne soirée'
X = strrep(S,'bonne','mauvaise')
    X = j'ai passé une très mauvaise soirée

char(n)

   Retourne le caractère de code ASCII n

char(65)
    ans = A

char(65:75)
    ans = ABCDEFGHIJK

num2str()

Convertit un nombre en une chaîne de caractère afin qu'on puisse l'utiliser dans une fonction qui manipule des chaînes.  Essayer le petit programme suivant :
  
fp=1000;
fm=100;
im=0.5;
y = am(fp,fm,im);
S='signal modulé en amplitude  '
S = [S 'fp=' num2str(fp) ' fm=' num2str(fm) '  im =' num2str(im)];
plot(y);
title(S);
 
 

  

CONVERSION ENTRE BASES DE NUMÉRATION

  

dec2bin()

   Décimal vers binaire
  
b = dec2bin(13)
   b = 1101
  
dec2bin retourne une chaîne de caractère. Si on désire que le résultat soit un tableau de nombres, on peut utiliser la forme suivante :

n = dec2bin(13)-48

n =
     1     1     0     1
  

bin2dec

   Binaire vers décimal
  
bin2dec('010111')
   ans =   23
  

dec2hex

   Décimal vers Hexadécimal

dec2hex(888)
   ans = 378
  

hex2dec

   Hexadécimal vers décimal
  
hex2dec('12B')
        ans =    299