1 of 74

Introduction à Matlab�

Pr. LAJJAM AZZA

Groupe matlab 2ap1 2021

2 of 74

Qu’est ce que Matlab?

  • C’est un logiciel commercial développé et vendu par MathWorks,
  • C’est un logiciel de mathématique qui permet d’exécuter de simples calculs, mais aussi de résoudre des problèmes complexes,
  • Il est accompagné de nombreux toolbox ( outils complémentaires pour la résolution de problèmes spécifiques),

3 of 74

Plan

Première prise en main

Vecteurs et des matrices

Scripts et des fonctions

Traiter des fichiers de données

Générer des graphiques et les sauvegarder

Ecrire de petit programmes interactifs

4 of 74

Présentation de MATLAB

  • MATLAB est un interpréteur de commandes: les instructions sont interprétées et exécuté ligne par ligne (pas de compilation avant de les exécuter)
  • Il existe deux modes de fonctionnement:

mode interactif: MATLAB exécute les instructions au fur et à mesure qu'elles sont données par l'usager.

mode exécutif: MATLAB exécute ligne par ligne un fichier ".m" (programme en langage MATLAB).

5 of 74

Interface graphique

Fenêtre de commande

Espace de travail

Historique des commandes

Arborescence du dossier en cours

6 of 74

Variables

  • Il n’est pas nécessaire de déclarer une variable. Sa taille et son type sont définis automatiquement.
  • Le nombre de charactères doit être inférieur à 63 (=namelenghtmax)
  • Les noms sont CASE SENSITIVE, miniscules et les majuscules sont différentes
  • MATLAB utilise une variable par défaut nommée ans si une expression est tapée à l'invité sans l’affecter à une variable.

>> 6 + 3

ans = 9

7 of 74

Variables

  • Il faut éviter d’utiliser des noms déjà utilisés pour les fonctions ou variable du système (built in functions and variables)
  • Certains mots appelé RESERVED WORDS ne peuvent pas être utilisés (for, end)
  • Format change le format d’affichage pas le contenu d’une variable. Cf help format long, long e, long g, short, short e …

8 of 74

Exercice 1

Créez une variable rho pour contenir la densité du sang (valeur de 1.06 g/cm^3).

9 of 74

Vecteurs

  • Les vecteurs lignes se déclarent de la manière suivante:

>> V_ligne = [0 1 2]

V_ligne =

0 1 2

  • Les vecteurs colonnes se déclarent de la manière suivante:

>> V_colonne = [0; 1; 2]

V_colonne =

0

1

2

10 of 74

Vecteurs

  • Le transposé d’un vecteur se fait à l’aide de la fonction transpose ou avec le point apostrophe (.’)

>> V_colonne=transpose(V_ligne)

V_colonne =

0

1

2

11 of 74

Vecteurs

  • Le double point (:) est l’opérateur d’incrémentation dans Matlab
  • pour créer un vecteur ligne des valeurs de 0 à 1 par incrément de 0.2, il suffit d’utiliser:

>> V= [0:0.2:1]

V =

Columns 1 through 6

0 0.2000 0.4000 0.6000 0.8000 1.0000

12 of 74

Vecteurs

  • Par défaut, l’incrément est de 1
  • pour créer un vecteur ligne des valeurs de 0 à 5 par incrément de 1, il suffit d’utiliser :

>> V=[0:5]

V =

0 1 2 3 4 5

13 of 74

Vecteurs

  • On peut accéder à un élément d’un vecteur et même modifier celui-ci directement

>> a=V(2);

>> V(3)=3*a

V =

0 1 3 3 4 5

14 of 74

Vecteurs

  • Les opérations usuelles d’addition, de soustraction et de multiplication par scalaire sur les vecteurs sont définies dans MATLAB :

>> V1=[1 2];

>> V2=[3 4];

>> V=V1+V2 % addition de vecteurs

V =

  1. 6

>> V=V2-V1 % soustraction de vecteurs

V =

2 2

15 of 74

Vecteurs

>> V=2*V1 % multiplication par un scalaire

V =

2 4

  • Dans le cas de la multiplication et de la division, il faut faire attention aux dimensions des vecteurs en cause.

16 of 74

Vecteurs

  • Pour la multiplication et la division élément par élément, on ajoute un point devant l’opérateur (.* et ./). Par exemple :

>> V=V1.*V2 % multiplication élément par élément

V =

3 8

>> V=V1./V2 % division élément par élément

V =

0.3333 0.5000

17 of 74

Vecteurs

  • Matlab lance une erreur lorsque les dimensions ne concordent pas

>> V3=[1 2 3]

V3 =

1 2 3

>> V=V1.*V3

??? Error using ==> .* Matrix dimensions must agree.

18 of 74

Vecteurs

  • Il est aussi possible de concaténer des vecteurs. Par exemple :

>> V1=[1 2];

>> V2=[3 4];

>> V=[V1 V2]

V =

1 2 3 4

19 of 74

Vecteurs

  • De même, pour les vecteurs colonnes :

>> V1=[1;2];

>> V2=[3;4];

>> V=[V1;V2]

V =

1

2

3

4

20 of 74

Exercice 2

  • Créer un Vecteur ligne commençant par 0 et allant jusqu'à 100 avec un pas de 1

A = 0:100

  • Créer un vecteur colonne commençant par 3 et finissant par 27 par pas de 3

A = 3 :3 :27

  • Si on définit A = [1 4 2 6] (vecteur ligne), calculer le transposé de A

A' est égal à [1 ;2 ;3 ;4] (vecteur colonne).

21 of 74

Matrices

On peut aussi créer des matrices à partir de vecteurs, par exemple,

>> V1=[1 2];

>> V2=[3 4];

>> V=[V1; V2]

V =

1 2

3 4

22 of 74

Matrices

qui n’est pas équivalent à :

>> V1=[1; 2];

>> V2=[3; 4];

>> V=[V1 V2]

V =

1 3

2 4

23 of 74

Matrices

  • Il faut donc être très prudent dans la manipulation des vecteurs. Par exemple, une mauvaise concaténation :

>> V1=[1 2];

>> V2=[3; 4];

>> V=[V1; V2]

??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.

24 of 74

Matrices

  • Les matrices peuvent aussi être construites directement :

>> M=[1 2; 3 4]

M =

1 2

3 4

  • On peut évidemment avoir accès aux éléments de la matrice par :

>> m21=M(2,1) % 2e ligne, 1ere colonne

m21 =

3

25 of 74

Accéder aux éléments d’une Matrice

  • >> A=[1 2 3; 8 5 6;7 8 9]

A =

1 2 3

8 5 6

7 8 9

  • les valeurs des éléments ai,j sont données par leur rang affecté par Matlab. Le 4e élément est 2 :

>> a4=A(4)

a4 =

2

26 of 74

Extraction d’une sous matrice

  • Il est aussi possible de stocker dans un vecteur une ou plusieurs lignes (ou colonnes). Ainsi, si l’on veut stocker la deuxième colonne de la matrice A :

>> V=A(:,2) % ici, (:) signifie toutes les lignes

V =

2

5

8

27 of 74

Extraction d’une sous matrice

De la même manière, si l’on veut stocker les lignes 2 et 3 :

>> M2=A(2:3,:) % (2:3) signifie ligne 2 à 3

% et (:) signifie toutes les colonnes

M2 =

8 5 6

7 8 9

28 of 74

Opérations sur les matrices

Il est possible d’inverser inv(), de transposer transpose() ou avec l’apostrophe (.’) les matrices :

>> invM=inv(M)

invM =

-2.0000 1.0000

1.5000 -0.5000

>> transpM=M.’

transpM =

1 3

2 4

29 of 74

Opérations sur les matrices

Un des intérêts de Matlab est la possibilité d’utiliser directement les opérations mathématiques prédéfinies pour les matrices. L’addition et la soustraction sont directes (attention aux dimensions) ainsi que la multiplication par un scalaire :

>> A=[1 2; 3 4];

>> B=[4 3; 2 1];

>> C=A+B % addition

C=

5 5

5 5

30 of 74

Opérations sur les matrices

>> D=A-B % soustraction

D=

-3 -1

1 3

>> C=3*A % multiplication par un scalaire

C=

3 6

9 12

31 of 74

Opérations sur les matrices

Pour la multiplication et la division, les opérateurs usuels (* et /) sont définis pour la multiplication et division matricielles :

>> C=A*B % multiplication de matrices

C=

8 5

20 13

32 of 74

Opérations sur les matrices

>> D=A/B % division de matrices

D=

1.5000 -2.5000

2.5000 -3.5000

33 of 74

Opérations sur les matrices

Afin de réaliser la multiplication et la division élément par élément, on précède les opérateurs par un point (.* et ./) :

>> C=A.*B % multiplication élément par élément

C=

4 6

6 4

34 of 74

Opérations sur les matrices

>> D=A./B % division élément par élément

D=

0.2500 0.6667

1.5000 4.0000

35 of 74

Opérations sur les matrices

D’autres opérations sur les matrices seront présentées dans les sections subséquentes.

Il faut noter certaines matrices spéciales qui peuvent être utilisées, par exemple la matrice identité :

>> I=eye(3) % matrice identité

I=

1 0 0

0 1 0

0 0 1

36 of 74

Opérations sur les matrices

On peut aussi déclarer des vecteurs (et des matrices) ne contenant que des zéros ou des 1.

>> V_nul=zeros(1,2) % un vecteur de 1 ligne, 2 colonnes de 0

V_nul=

0 0

>> V_un=ones(1,2) % un vecteur de 1 ligne, 2 colonnes de 1

V_un=

1 1

>> M_un=ones(2,2) % une matrice 2x2 de 1

M_un=

1 1

1 1

37 of 74

Opérations sur les matrices

Dans certaines applications, il est parfois utile de connaître les dimensions d’une matrice, et la longueur d’un vecteur (retournés, par exemple, par une fonction).

Dans ce cas, on utilise les fonctions length et size.

>> V=[0:0.1:10]; % utilisation de length - vecteur 1x101

>> n=length(V)

n=

101

38 of 74

Opérations sur les matrices

>> M=[1 2 3; 4 5 6]; % utilisation de size - matrice 2x3

>> [n,m]=size(M)

n=

2

m=

3

>> dim=length(M) % utilisation de length sur une matrice

dim=

3

Dans ce cas length donne la plus grande dimension, ici le nombre de colonnes.

39 of 74

Exercices d’application

Création de vecteur avec MATLAB

  • Créer un vecteur contenant les nombres entre 0 et 100 avec un pas de 10
  • Créer un vecteur de 1001 composantes contenant les nombres -500, -499,-498,…, 499, 500
  • Créer un vecteur u contenant 10 valeurs entre 0 et pi séparées par un incrément constant.

40 of 74

Script et fonction

Il existe deux types de fichiers qui peuvent être programmés avec Matlab:

  • les fichiers script (M-file)
  • function.

Dans les deux cas, il faut lancer l’éditeur de fichier et sauvegarder le fichier avec l’extension .m.

41 of 74

Script

  • Dès que le calcul à effectuer implique un enchaînement de commandes un peu compliqué, il vaut mieux écrire ces dernières dans un fichier.
  • un fichier contenant des commandes Matlab porte un nom avec le suffixe .m et s’appelle pour cette raison un M-file ou encore script.
  • On utilisera toujours l’éditeur intégré au logiciel qui se lance à partir de la fenêtre de commande en cliquant sur les icônes new M-file ou open file dans la barre de menu.
  • Une fois le fichier enregistré sous un nom valide, on peut exécuter les commandes qu’il contient en tapant son nom - sans le suffixe .m - dans la fenêtre de commande.

42 of 74

Script

  • Le fichier script permet de lancer les mêmes opérations que celles écrites directement à la fenêtre de commandes de Matlab après le symbole prompt (>>). Toutes les variables utilisées dans un script sont disponibles à l’invite Matlab (fenêtres de commandes) une fois le script exécuté.

43 of 74

Script

  • Un script Matlab est composé d’une suite d’instructions, toutes séparées par une virgule (ou de manière équivalente, un passage à la ligne) ou un point virgule. La différence entre ces deux types de séparation est liée à l’affichage ou non du résultat à l’écran (seulement effectué dans le premier cas).

44 of 74

Script

Par exemple, créons à l’aide de l’éditeur intégré de Matlab dans le répertoire de travail choisi, déjà déclaré par SetPath, le fichier test.m. Supposons qu’il contient les instructions suivantes :

clear all

x=4;

y=2;

a=x +y

b=x*y

45 of 74

Script

Ecrivons dans la fenêtre de commandes le nom du fichier

>> test

a =

6

b =

8

46 of 74

Script

  • Habituellement, on utilise les fichiers script afin de :
  • Déclarer des variables ;
  • Effectuer des opérations mathématiques ;
  • Appeler des fonctions ;
  • Tracer des figures ;
  • Programmer des algorithmes.

47 of 74

Fichier function

  • L’idée de base d’une fonction est d’effectuer des opérations sur une ou plusieurs entrées ou arguments pour obtenir un résultat qui sera appelé sortie. Il est important de noter que l’appel de la fonction se fait en précisant ses variables entrées si ces dernières ne sont pas disponibles à l’invite Matlab.

48 of 74

Fichier function

  • Par exemple, la fonction suivante admet une seule sortie a qui constitue le résultat de l’addition des deux arguments d’entrée x et y:

function a = ma_fonction(x,y)

a=x+y;

Lorsqu’on tape dans la fenêtre de commandes:

>> a = ma_fonction(4,2)

on obtient

a = 6

49 of 74

Fichier function

  • Modifions la fonction pour lui demander de calculer aussi le produit de x et y  de la façon suivante :

function [a,b] = ma_fonction2(x,y)

a=x+y;

b=x*y;

Dans ce cas, on vérifie que:

>> [a,b] = ma_fonction2(4,2)

a =

6

b =

8

50 of 74

Fichier function

  • Habituellement, on utilise les fichiers function afin de :
  • Programmer des opérations répétitives ;
  • Limiter le nombre de variables dans l’invite Matlab ;
  • Diviser le programme (problème) de manière claire.

51 of 74

Fichier function

  • Une fonction ne comportant qu’un petit nombre d’instructions peut être définie directement dans la fenêtre de commandes de la manière suivante :

>>angle=inline(’atan(y/x)’)

angle =

Inline function:

angle(x,y) = atan(y/x)

>>angle(5,4)

ans =

0.6747

52 of 74

Fonctions mathématiques usuelles

  • fonctions trigonométriques et inverses : sin, cos, tan, asin, acos, atan
  • fonctions hyperboliques (on rajoute «h») : sinh, cosh, tanh, asinh, acosh, atanh
  • racine, logarithmes et exponentielles : sqrt, log, log10, exp
  • fonctions erreur : erf, erfc
  • fonctions de Bessel et Hankel: besselj, bessely, besseli, besselk, besselh et hankel
  • Size, length, diag, det, norm, rank, trace, sum, prod, mean, std, var, max, min, rand, null, inv, pinv, sort, reshape, fliplr, flipud, tril, triu,…

53 of 74

Exercice

  • Ecrire un M-file function appelé polaire.m qui permet de convertir les coordonnées cartésiennes d’un point en coordonnées polaires.

54 of 74

Représentation graphique

  • La fonction plot permet de tracer des courbes en Matlab. Les arguments de cette fonction sont les vecteurs des variables indépendantes et dépendantes (en alternance), comme dans l’exemple qui suit :

>> x=[0:0.01:2*pi];

>> plot(x,cos(x),x,sin(x))

55 of 74

Représentation graphique

  • Ces graphiques manquent cependant de clarté. Il faut toujours nommer les axes (et mettre les unités si possible), proposer une légende, etc. Ceci est évidemment un peu long à écrire à l’invite Matlab. Un script est tout indiqué :

% graphique.m

clear all

close all % ferme les anciennes figures

x=[0:0.01:2*pi]; y1=cos(x); y2=sin(x);

figure(1)

plot(x,y1,’.’,x,y2,’+’) % cos(x) en points, sin(x) en +

title(’sinus et cosinus’) xlabel(’x’) ylabel(’f(x)’)

legend(’cos(x)’,’sin(x)’,0) % le 0 place la légende à côté des courbes

56 of 74

Représentation graphique

  • Les points peuvent être matérialisés par le symbole p prenant les valeurs suivants : o . ∗ + ×
  • Les couleurs sont repérées par leur initiale en anglais : r(ed), b(lue), blac(k), w(hite), y(ellow), m(agenta), g(reen)
  • Par défaut la fenêtre graphique est effacée avant chaque commande plot. Pour superposer des courbes par des appels successifs à cette fonction, il faut auparavant avoir utilisé la commande hold on.
  • Pour afficher plusieur graphique, on utilise subplot

57 of 74

Opérateurs de comparaison et logique

Opérateur

Syntaxe Matlab

Egal à

= =

Différent de

~ =

Supérieur à

Supérieur ou égal à

>=

Inférieur à

Inférieur ou égal à

<=

Négation

~

Ou

|

Et

&

58 of 74

Exemple de représentation graphique

x=linspace(0,pi,30); % crée un tableau de 30 composantes uniformément

% réparties entre 0 et pi

y=sin(x);

plot(x,y) %relie les points (xi,yi) par un trait continu noir

plot(x,y,’p-b’) %relie les points (xi,yi) par un trait continu de couleur et

%matérialise les points avec un symbole

plot(x,y,’pb’) %matérialise les points (xi,yi) avec un symbole de couleur

59 of 74

Exercice

  • Ecrire un M-file pour la fonction

  • Tester la fonction sur quelques valeurs, par exemple f(1) , f(0)
  • Créer un tableau x d’abscisses de −5 à 5 et contenant 100 points.
  • Représenter la fonction f aux points xi avec la commande plot(x,f(x))

60 of 74

Boucles if-elseif-else�

  • Dans un programme interviennent souvent des conditions. Les boucles if-elseif-else sont une structure de programmation qui est très utile pour rendre compte de cette situation. En pseudo-code, on peut résumer la chose de la façon suivante:

if CONDITION1

ACTION1;

elseif CONDITION2

ACTION2;

else

ACTION3;

61 of 74

Boucles if-elseif-else�

  • Par exemple, on reçoit un entier a, s’il est impair négatif, on le rend positif. S’il est impair positif, on lui ajoute 1. S’il est pair, on ajoute 2 à sa valeur absolue.
  • La courte fonction suivante permet de réaliser cette transformation (notez ici, l’emploi du modulo pour déterminer si l’entier est divisible par 2).

62 of 74

Boucles if-elseif-else

function b=transf_entier(a)

if a<0 & mod(a,2) ~ = 0 % mod permet de trouver le reste d’une division

b=-a;

elseif a>=0 & mod(a,2) ~ = 0

b=a+1;

else

b=abs(a)+2;

end

63 of 74

Exemple d’application

  • L’instruction If else est utilisée pour la vérification des erreurs entrées dans un script
  • Ecrire un script qui demande à l’utilisateur de saisir un rayon, vérifie si le nombre est valide ensuite calcul la superficie du cercle

64 of 74

Boucles for

Les boucles for sont très utiles dans la plupart des applications mathématiques (par exemple, pour effectuer un calcul sur tous les éléments d’un vecteur).

for i = 0:valeur_finale

ACTION1;

ACTION2;

...

ACTIONN;

end

65 of 74

Boucles for

Remarquez que l’incrément peut être différent de 1,

par exemple si l’on veut calculer les carrées des nombres

pairs entre 0 et 10 :

for i=0:2:10

carre = i^2

end

66 of 74

Boucles for

67 of 74

Exemple d’application

  • Ecrire une fonction qui calcul la somme des n nombres saisis par l’utilisateur; n est un argument entier transmis à la fonction

68 of 74

Boucle while

Une boucle while permet de répéter une opération tant qu’une condition (critère) n’est pas remplie. En pseudo-code, elle peut être schématisée de la façon suivante :

while CONDITION

ACTION1;

ACTION2;

...

ACTIONN;

end

69 of 74

Boucle while

Par exemple, on veut trouver le nombre d’entiers positifs nécessaires pour avoir une somme plus grande que 100. On pourrait réaliser cette tâche de la manière suivante:

function n=nombre_entier (somme)

n=0; % initialisation des valeurs

somme=0;

while somme < 100

n=n+1; % itération de n

somme=somme+n; % nouvelle somme

end

70 of 74

Boucle switch

Les boucles switch permettent parfois de remplacer les boucles if-elseif-else, particulièrement dans le cas de menus.

switch (CAS)

case {CAS1}

ACTION1

case {CAS2}

ACTION2

otherwise

ACTION3

end

71 of 74

Boucle switch

  • Par exemple, on veut faire une calculatrice simple en Matlab, pour déterminer l’exponentielle ou le logarithme en base e d’un nombre entré par l’utilisateur.
  • Une manière simple de rendre le programme interactif serait d’utiliser le script suivant :

72 of 74

Boucle switch

operation=input(’Opération: (1) exp ; (2) log ? ’);

nombre=input(’Valeur: ’);

switch operation

case 1

b=exp(nombre)

case 2

b= log(nombre)

otherwise

disp(’mauvais choix -- operation’)

end

73 of 74

Boucle switch

>> calcul_rapide

Opération: (1) exp ; (2) log ? 1

Valeur: 0.5

b =

1.6487

74 of 74

Exercices

Traduire en langage Matlab l’algorithme PGCD suivant :

a,b entiers positifs

tant-que a≠b faire

si a>b alors a<- a-b

sinon b<- b-a

fin tant-que

PGCD<- a