Accueil - Informatique - Programmation - Langages

Introduction à Matlab

Publié le mercredi 1er mars 2006.


Mis à jour 8 mars 2007

Introduction

Conçu à la base pour être un environnement de calcul scientifique et de visualisation de données, MATLAB est devenu aujourd’hui un langage de programmation complet dans un environnement de développement simple, puissant et multiplateforme (Windows / Unix-Linux).

Démarrage de Matlab

Dans une fenêtre cmdtool, taper « matlab ». MATLAB répond par le symbole >>.
Il apparaît alors une Fenêtre Commande dans laquelle on tape les instructions une ligne à la fois.

En tapant la touche « return », chaque ligne est exécutée immédiatement et MATLAB retourne les résultats.
Pour réaliser plusieurs instructions sur une même ligne, celles- ci peuvent être séparées par une virgule « , » .
C’est le mode interactif de MATLAB : les instructions sont exécutées au fur et à mesure qu’elles sont tapées par l’usager.

L’autre mode est l’exécutif : MATLAB exécute ligne par ligne un fichier de langage MATLAB écrit par l’utilisateur. Ces fichiers sont des « fichiers M ».

Utilisation

La commande help sujet suivie du nom de la fonction désirée ou de l’instruction renvoie l’aide sur le sujet.

La commande help seule donne une liste des répertoires des fonctions MATLAB.

La commande doc sujet affiche l’aide au format HTML dans le "Help Broswer".

La présence d’un « ; » derrière une instructions MATLAB empêche l’affichage du résultat à l’écran. En réalité, la création de la variable a, qui est de type double, appelle la méthode display d’un objet de type double lorsque le " ;" est absent.

a = 4
a =
   5

Je reviendrais plus en détail sur le modèle objet Matlab dans un prochain article mais vous pouvez déjà trouver des informations très instructives sur la page Matlab B.O.O.T Camp de Charles R. Denham et la documentation Matlab - Programming, chapitre 8.

Ces fichiers textes contiennent des lignes d’instructions MATLAB et ont une extension « .m ». Ils sont exécutés ligne par ligne par MATLAB. Ils peuvent être de 2 types différents, scripts ou fonctions.

On définit les variables au fur et à mesure que l’on donne leurs noms et leurs valeurs ou expressions mathématiques.

Elles sont ainsi stockées dans l’espace de travail et peuvent être réutilisées dans les calculs qui suivent.

La liste des variables stockées dans l’espace de travail peut être obtenue par les commandes :

Il est important de différencier les variables locales qui ne seront utilisées que dans la fonction elle - même,chaque fonction possède son propre workspace, des variables globales qui re-serviront en dehors de la fonction où elles sont déclarées. Dans la mesure du possible, l’usage des variables globales est à proscrire.

Elles ne peuvent être réutilisées en dehors du fichier M où elles sont déclarées.

Les scripts sous Matlab sont équivalent aux procédures, ils ne prennent pas d’argument.

Les scripts partagent l’espace de travail de base (base workspace) avec la session interactive Matlab et les autres scripts. Si vous utilisez des variables temporaires, indices de boucles, etc, il est conseillé de les supprimer de l’espace de travail à la fin du script avec la commande clear

...
clear i j temp
% fin du script

Les fichiers function sont équivalent aux sous programme. Une fonction peut posséder des arguments d’entrée et des arguments de sortie.

Il est préférable d’utiliser le même nom de fichier que la fonction elle-même. A la différence des fichiers script classiques dans MATLAB, les variables à l’intérieur d’un fichier function ne sont pas disponibles à l’extérieur, elles ne sont visibles que dans leurs propres espace de travail.

La syntaxe la plus générale des fichiers function est la suivante :

[y1,y2,...ym]=fonc(x1,x2,..xn)

avec n arguments d’entrée et m arguments de sortie.

Une fonction peut posséder un nombre variable d’arguments d’entrée et sortie. On utilise pour cela les commandes varargin et varargout.

function test(varargin)
 for i=1:nargin
 x(i)= varargin(i);
end

Utiliser la syntaxe des commandes Matlab set et get avec des propriétés :

function ma_fonction(varargin)
% usage: ma_fonction(x,'propriete',valeur,'...)
x = varargin{1};
property_argin = varargin(2:end);
while length(property_argin) >= 1,
 property = property_argin{1};
 value    = property_argin{2};
 property_argin = property_argin(3:end);
 switch lower(property)
   case 'ma_proprite_1'
     var_1 = value;
   case 'ma_proprite_2'
     var_2= value;
   case ...
     ...
   otherwise
     msg = sprintf('Propriété inconnue:"%s"',property);
     error(msg);
 end
end

Les Toolboxes

Voir l’article "Toolbox Matlab Océano"

Le débogueur (Debug Mode)

Ce mode permet de placer des points d’arrêt (breakpoints). Il est ensuite possible de visualiser étape par étape (ligne par ligne) le résultat de l’exécution et de déceler ainsi les lignes qui posent problème.

Le débogueur Matlab est un outil puissant de mise au point. Un simple survol d’une variable avec le curseur de la souris permet de visualiser sa valeur. De nombreuses fonctions accessibles via le menu contextuel (clic droit) facilitent la mise au point des scripts.

Attention à bien éliminer les « clear all » dans les fonctions (fichiers) concernées car ils suppriment automatiquement les breakpoints lors de l’exécution.

Commandes utiles

Pour ajouter un répertoire dans le path, par exemple C :\perso\essais_matlab, utiliser path de cette façon :

path(path,'C:\perso/essais_matlab')

Matlab retourne alors « Le résultat est 18 ».
Cette commande s’avère très utile pour vérifier l’entrée dans une boucle ou pour afficher un résultat de manière plus améliorée (sans le nom de la variable).

indice étant incrémenté de 1 à chaque passage.

borne_inf et borne_sup étant des constantes

la suite d’instructions étant le traitement à effectuer pour les valeurs d’indices variant entre borne_inf et borne_sup.

expression logique est une expression dont le résultat peut être vrai ou faux.

suite d’instructions est le traitement à effectuer tant que expression logique est vraie.

« base » fait référence au Matlab base Workspace , on peut aussi utiliser « caller » qui désigne le Workspace de la fonction appelante.

Cette commande exécute l’expression et retourne le résultats dans des variables de sorties qui sont présentes dans le workspace.

Le modèle d’édition de Matlab fonctionne comme en C.

s symbole précisant que la donnée est de type string (chaine de caractères)

L la longueur du champ (en nombre de caractères)

% 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

t spécifie le type de notation utilisée et peut prendre plusieurs valeurs :

Certains caractères sont facultatifs, et on utilise souvent uniquement la commande %t

Vecteurs et matrices

Matlab ne fait pas vraiment de différence entre une matrice, un vecteur ligne ou colonne. Voir la documentation de l’ENAC sur le sujet et pour une description complète.

Un point important sous Matlab et qui faut toujours avoir à l’esprit, concerne la pré-allocation mémoire, qui bien souvent facilitera et simplifiera l’écriture du code.

Lors du travail sur de grosses matrices, elle rend l’exécution du code plus rapide. Sans pré-allocation mémoire, une allocation est fait à chaque fois qu’un indice est ajouté.

Pour créer dynamiquement vecteur colonne, on écrira habituellement le code suivant :

for i=1:n,A(i)=ma_fonction(),end
A=A';

Comme un vecteur colonne est une matrice de n ligne x 1 colonne [n,1], il sera plus rapide d’écrire :

A=zeros(n,1);
for i=1:n,A(i)=ma_fonction(),end

Même remarque pour construire une matrice à partir d’une autre. Le réflexe serait d’utiliser les classiques boucles for ou while mais il est bien plus efficace d’utiliser les techniques de vectorisation offertes par Matlab.

Création d’une matrice 5 lignes, 4 colonnes et extraction des colonnes paires.

>> A=rand(5,4)

A =
   0.8381    0.5028    0.1934    0.6979
   0.0196    0.7095    0.6822    0.3784
   0.6813    0.4289    0.3028    0.8600
   0.3795    0.3046    0.5417    0.8537
   0.8318    0.1897    0.1509    0.5936

>> A=A(:,[2 4])

A =
   0.5028    0.6979
   0.7095    0.3784
   0.4289    0.8600
   0.3046    0.8537
   0.1897    0.5936

autre exemple, remplacer les valeurs à 1e36 par NaN :

A(find(A == 1e36)) = NaN;

A suivre...

Liens utiles

Matlab