Formation d'initiation au logiciel MATLAB et Simulink
TUTORIELMATLAB
[Accueil] [Premiers pas] [Thèmes choisis] [Exercices]
L'aide de Matlab
L'aide intégrée de Matlab est très efficace, apprenez à en utiliser les bases. Cliquez [ici].
Initiation à Matlab
Nous vous conseillons d'ouvrir une fenêtre Matlab et de reproduire les exemples donnés dans chacun des points suivants.
§ Les bases Création, modification de matrices, accès aux éléments, gestion de la mémoire. Cliquez [ici]
§ Les matrices Opérations élémentaires sur les matrices.
Cliquez [ici]
§ L'opérateur "colon" Permet de générer des suites de nombres.
Cliquez [ici]
? Structures de contrôle
Boucles, tests et conditions.
Cliquez [ici]
? Scripts et fonctions Réaliser des fonctions personnelles, découper un programme en plusieurs fichiers. Cliquez [ici]
Matlab est un logiciel extrêmement bien documenté, avec plusieurs fonctions d'aide très performantes. Lorsqu'on est confronté à un problème technique dans l'utilisation de Matlab, ces fonctions d'aide permettent souvent de le résoudre rapidement.
Fonction help
Lorsque vous recherchez de l'aide sur une fonction précise de Matlab, vous pouvez simplement taper la commande:
>> help nom_de_la_fonction
Exemple
>> help det DET Determinant.
DET(X) is the determinant of the square matrix X.
Use COND instead of DET to test for matrix singularity.
See also COND. Overloaded methods help sym/det.m
Note
Dans l'aide de Matlab, même si les noms des fonctions sont indiqués en majuscule, il convient d'écrire ces noms en minuscule lors de l'appel de ces fonctions. Par exemple, si on souhaite calculer le déterminant de la matrice on écrira dans Matlab:
>> det([4 2; 1 3]) ans =
10
>>
Fonction lookfor
La fonction lookfor permet de rechercher les fonctions se rapportant à un certain sujet. Vous devez simplement veiller à entrer les mots-clés en anglais. >> lookfor mot_clé_en_anglais
Exemple
>> lookfor determinant DET
Fonction helpwin
La fonction helpwin fait apparaître une fenêtre qui vous permet de naviguer à travers l'aide des fonctions de Matlab. On écrira dans Matlab:
>> helpwin
Fonction doc
Matlab dispose d'une documentation très fournie sous la forme de pages HTML. Pour accéder à ces pages, tapez la commande: doc ou helpdesk . Si vous recherchez une information sur une commande précise : doc nom_de_la_commande
Introduction
Matlab, et non pas Mathlab est l'abréviation de MATRIX LABORATORY. C'est un logiciel de calcul numérique, utilisant des matrices comme objets de base. Ces matrices peuvent aussi être des vecteurs (ligne ou colonne), ainsi que des scalaires. Matlab manipule aussi bien les nombres réels que les nombres complexes.
Ce qui fait la popularité de Matlab, c'est la facilité avec laquelle on peut programmer des méthodes numériques, les tester et visualiser les résultats sous forme graphique. C'est un logiciel qui se destine plus à l'expérimentation numérique. Lorsqu'on doit résoudre un problème de très grande taille demandant une importante puissance de calcul, il vaut souvent mieux utiliser des logiciels spécifiques, ou programmer soi-même les méthodes numériques dans un langage tel que C, C++, Fortran, Java, .
Interface
Les menus et les boutons au sommet de la fenètre permettent d'accéder à certaines fonctionalités de Matlab sous Windows (éditeur de scripts, gestion des variables, gestion des chemins d'accès, ). Au centre de la fenètre, on trouve la ligne de commande de Matlab qui permet d'entrer des instructions et de lire les résultats. C'est là que nous allons travailler.
Créer une matrice
On peut créer une matrice A explicitement:
>> A = [1 2 3 ; 4 5 6]
A =
La matrice est délimitée par des crochets, on entre les éléments ligne par ligne, avec un point-virgule pour séparer les lignes de la matrice. De la mème façon, on peut créer un vecteur ligne:
>> B = [1 5]
B =
1 5
ou un vecteur colonne:
>> C = [3 ; 4 ; 5]
C =
3
4
5
Une autre façon de faire est de créer un vecteur colonne et de le transposer avec l'opérateur de transposition: l'apostrophe.
>> D = [1 2]'
D =
1
2
Les scalaires se déclarent indifféremment comme des matrices 1*1, soit directement comme des scalaires:
>> E = [5]
E =
5
>> F = 6
F =
6
On accède aux éléments d'une matrice en spécifiant entre parenthèses et séparés d'une virgule, la ligne et la colonne de l'élément désiré:
>> A(2,3) ans = 6
Pour les vecteurs colonne (resp. ligne), on peut choisir de ne pas spécifier la colonne (resp. ligne):
>> C(2,1) ans = 4
Ou de façon équivalente:
>> C(2) ans = 4
Pour les scalaires, on peut ne pas spécifier ni la ligne, ni la colonne:
>> F(1,1) ans = 6
Ou encore:
>> F(1) ans = 6
Ou encore:
>> F
F =
6
Pour connaître la signification du mot clé ans, on peut taper :
>> help ans
ANS Most recent answer.
ANS is the variable created automatically when expressions are not assigned to anything else. ANSwer.
Pour une introduction à l'aide de Matlab, cliquez [ici]. Matlab possède aussi tout une série de fonctions pour créer des matrices spéciales essayez: >> help elmat
Attention, la casse a de l'importance pour Matlab, A n'est pas équivalent à a ! On peut, par exemple, définir:
>> a = 2 a = 2
La variable A existe toujours:
>> A
A =
1 2 3
4 5 6
Modifier une matrice
Il est possible de modifier un des éléments d'une matrice :
>> A(1,3) = 2
A =
1 2 2
4 5 6
Si on modifie un élément inexistant d'une matrice, la matrice est agrandie jusqu'à ce que cet élément existe :
>> A(3,3) = 1 A =
1 2 2
4 5 6
0 0 1
Gestion de la mémoire
La facilité avec laquelle on crée de nouvelles variables dans Matlab fait que la mémoire risque vite d'ètre encombrée avec une multitude de variables dont on ne se sert plus. La commande who donne la liste des variables de l'espace de travail. La commande whos donne la mème liste, ainsi que des informations sur la nature et la taille de chaque variable.
>> who Your variables are:
A C E a
B D F
>> whos
Name Size Bytes Class
A 3x3 72 double array
B 1x2 16 double array
C 3x1 24 double array
D 2x1 16 double array
E 1x1 8 double arrayF 1x1 8 double array a 1x1 8 double array
Grand total is 19 elements using 152 bytes
Pour effacer une variable et libérer la mémoire qu'elle occupait, il faut effectuer la commande:
clear nom_de_la_variable
>> clear F
>> who Your variables are:
A C E
B D a
La commande clear all efface toutes les variables de l'espace de travail. Il n'est pas possible d'annuler (undo) la commande clear.
Affichage
Lorsqu'on souhaite que le résultat d'une commande ne s'affiche pas, il faut placer un point-virgule à la fin de celle-ci:
>> T = [1 2 3];
Aucun résultat n'est affiché, pourtant, la commande a bien été exécutée.
>> T
T =
1 2 3
Pour cette partie, on réutilisera les matrices qui ont été définies à la partie précédente [les bases].
Opérations sur les scalaires
Matlab permet d'effectuer les opérations classiques sur les scalaires :
>> toto = (E-a)^a*a/E+1
toto = 4.6000
Les fonctions classiques comme sin, cos, log, existent aussi. (essayez helpwin ops, ou helpwin elfun)
>> titi = sin(a) titi =
0.9093
NB : Les fonctions trigonométriques travaillent en radians.
Valeurs particulières
Certaines valeurs particulières sont définies dans Matlab:
§ pi : c'est la constante pi avec un maximum de chiffres après la virgule.
§ i ou j : l'unité imaginaire. Si on a déjà utilisé i et j comme noms pour d'autres variables, ces constantes sont inaccessibles. On peut alors utiliser sqrt(-1)
>> tata = a + sqrt(-1) + 2*i;
>> tata = 2.0000 + 3.0000i; On a un nombre complexe !
§ Inf : L'infini. C'est le résultat renvoyé par Matlab quand un calcul devrait avoir un résultat infini.
§ NaN : Not a Number. Lorsque le résultat d'un calcul est indéterminé.
>> b = -3/0
Warning: Divide by zero.
b = -Inf
>> c = 0/0
Warning: Divide by zero. c = NaN
Opérations sur les matrices
Les opérations +, - ,*, / existent aussi pour les matrices. S'il n'y a pas d'ambiguïtés pour l'addition et la soustraction, il faut faire attention pour les opération de multiplication, division, puissance, etc.
Exemples:
>> a*A ans = 2 4 4
8 10 12
0 0 2
>> A*A ans = 9 12 16
24 33 44 0 0 1
>> A*C ans =
21
62
5
>> T*A ans = 9 12 17
>> A*T
??? Error using ==> *
Inner matrix dimensions must agree.
Les matrices doivent avoir des dimensions compatibles.
Le signe * est soit l'opérateur de produit matriciel, soit l'opérateur de multiplication d'une matrice par un scalaire. Si on souhaite multiplier deux à deux les éléments de deux matrices, il faut utiliser l'opérateur .* .
>> C .* [2; 1; 2]
ans =
6
4
10
C'est la même chose pour l'opérateur ^. Si A^2 signifie A*A au sens matriciel, A.^2 signifie qu'on prend tous les éléments de A élevés au carré. Pour plus de détail essayez : helpwin ops.
Résolution de systèmes linéaires
Une façon de résoudre un système linéaire A*x = C, est de calculer l'inverse de A:
>> x = inv(A)*C x =
-5.6667
-0.6667
5.0000
Cette façon de procéder peut être très imprécise si la matrice A est mal conditionnée. En outre calculer l'inverse de la matrice demande beaucoup plus d'opérations qu'il n'en faut pour résoudre le système uniquement. Une meilleure façon de procéder est d'utiliser l'opérateur de division à gauche de Matlab ( \ ). Matlab utilise alors un ensemble de méthodes mieux appropriées pour résoudre le système (Par exemple la factorisation LU de la matrice, suivie de la résolution de deux systèmes triangulaires).
>> x = A\C x =
-5.6667
-0.6667
5.0000
Concaténation et extraction
Il est possible de créer de nouvelles matrices en concaténant des matrices déjà existantes. La syntaxe est similaire à celle de la création de matrices à partir de scalaires.
>> [A C;1 T] ans = 1 2 2 3
4 5 6 4
0 0 1 5
1 1 2 3
Lorsqu'on écrit A(1,3), on extrait en fait une sous-matrice de dimensions 1*1. Cette syntaxe est en fait extensible à des sous-matrices de plus grande taille.
>> A(2,[1 3]) ans = 4 6
Ici, on a extrait la sous matrice composée de la deuxième ligne de A et des colonnes 1 et 3.
>> A(2,[3 1 2]) ans =
6 4 5
Ici, on crée un matrice qui est constituée d'une permutation de la deuxième ligne de A.
>> A([1 3 2],[3 1 2]) ans = 2 1 2
1 0 0
6 4 5
Ici, on a simplement créé une matrice : A, dont on a permuté les lignes et les colonnes.
L'opérateur ":" (colon) est un opérateur permettant de générer des suites de nombres. Il est très utile pour extraire des sous-matrices, gérer les boucles d'itérations (voir la partie : structures de contrôle), etc.
Générer une suite de nombres
>> a = -2:3 a =
-2 -1 0 1 2 3
>> b = [-2:3] b =
-2 -1 0 1 2 3
>> c = [-2:3]'
c = -2
-1
1
2
3
La notation "a:b" signifie : tous les nombres de a à b par pas de 1.0 . Si ce n'est pas possible, on obtient un message d'erreur.
>> 3:-1 ans =
Empty matrix: 1-by-0
Modifier le pas
Si on avait voulu générer la liste de l'exemple précédent, mais en allant de 3 à 2, on aurait pu faire:
>> a = fliplr([-2:3])
a =
3 2 1 0 -1 -2
Mais il est plus simple d'écrire :
>> a = 3:-1:-2
a =
3 2 1 0 -1 -2
La notation "a : h : b" signifie : tous les nombres de a à b par pas de h. Le pas h peut être positif ou négatif. Pour générer tous les nombres pairs de 4 à 20, on écrit :
>> b = 4:2:20 b =
4 6 8 10 12 14 16 18 20 Sélectionner une sous-matrice
Soit la matrice A:
>> A = [1 2 3 4; 5 6 7 8 ; 9* ones(1,4); zeros(1,4)]
A =
1 2 3 4
5 6 7 8
9 9 9 9
0 0 0 0
Pour extraire la sous matrice 3*3 composée des 3 premières lignes et colonnes on écrit :
>> B = A(1:3,1:3)
B =
>> A(1:4,4) ans =
4
8
9
Il existe un raccourci qui permet de spécifier d'un coup toutes les lignes ou colonnes d'une matrice :
>> A(:,2) ans =
2
6
9
Il faut lire : A(toutes les lignes, deuxième colonne). Cette notation est équivalente à :
>> A(1:size(A,1),2)
ans =
2
6
9
De la même façon, on peut écrire :
>> A(1,:) ans = 1 2 3 4
>> A(1,1:size(A,2))
ans = 1 2 3 4
Tracer le graphe d'une fonction
Un moyen simple de visualiser le graphe d'une fonction de R dans R est d'évaluer cette fonction en un certain nombres de points, et de relier ces points par des segments de droite. Visualisons la fonction sin(x) pour x valant de 0 à 12.
>> x = [0:0.05:12];
>> y = sin(x);
>> plot(x,y)
A la première ligne, on génère des valeurs de 0 à 12, espacées de 0.05. Ensuite, on évalue la fonction sinus en ces points. Enfin on affiche ces points, reliés par des lignes. Le résultat est:
Note
Si vous voulez de l'aide sur l'opérateur ":", tapez help colon essayez aussi : help linspace , help logspace
Le langage de Matlab n'aurait pas beaucoup d'intérêt s'il n'était pas possible d'effectuer des tests, de programmer des boucles, etc., comme dans la majorité des langages de programmation. L'aide concernant les structures de contrôle peut être accédé via:
>> helpwin lang
Opérations booléennes
Les valeurs booléennes "vrai" et "faux" sont respectivement représentées dans Matlab par les valeurs 1 et 0. Les opérateurs booléens de Matlab sont décrits à la rubrique d'aide relop (helpwin relop). On a les opérateurs : > , >= ,
Exemples: >> a = 2; b = 3;
>> a>b ans =
>> a>=a ans =
1
>> a==a ans =
1
>> a~=a ans =
>> (b>a) & (a~=4)
ans =
1
Comme vous avez pu le constater, la commande figure fait apparaître une nouvelle fenêtre dans laquelle le prochain graphe sera dessiné. L'appel à la fonction plot, non précédé de cette commande, efface le graphe actuel pour dessiner le nouveau. Pour faire apparître 2 courbes sur le même graphe, il faut remplacer, dans la série de commandes ci-dessus, la commande figure par la commande hold on.
On peut controler les fenêtres en sauvant la valeur renvoyée par la commande figure:
>> f1 = figure;
>> plot(x,y,'o');
>> f2 = figure;
>> plot(x,y,'rx');
On peut alors facilement fermer la deuxième fenêtre: >> close(f2);
La commande close all ferme toutes les fenetres graphiques.
La commande title (voir ci-dessus), permet d'ajouter un titre au graphe. De même, les commandes xlabel et ylabel permettent d'ajouter des intitulés aux axes. On peut également modifier les limites des axes au moyen de axis.
La commande subplot permet d'afficher plusieurs graphes dans une même fenêtre.
>> x=[0:0.1:5];
>> subplot(1,2,1);
>> plot(x,sin(x);
>> subplot(1,2,2);
>> plot(x,cos(x));
On peut aussi réaliser des diagrammes logarithmiques loglog ou semi-logarithmiques semilogx et semilogy. On peut tracer des diagrammes de Bode bode ou de Nyquist nyquist.
Pour plus d'informations: help plot
Exercice 1
Écrire une fonction "monexp" qui calcule l'exponentielle d'un réel à partir du développement de Taylor de la fonction exponentielle.
Exercice 2
Ecrire une fonction "fibo" qui prend comme arguument un naturel "n" et qui calcule les n premiers termes de la suite de Fibonacci. Cette suite F(n) est définie comme: F(n) = F(n1)+F(n-2), avec F(1)=F(2)=1.
Exercice 3
Ecrire une fonction "monsort" qui prend un vecteur de nombres réels comme argument et qui renvoie, comme résultat, ce même vecteur avec les éléments triés par ordre croissant. Comparez votre programme (résultats et performances) avec la fonction sort de Matlab.
Exercice 4
Construisez la fonction y = brol(x) dont le graphe est représenté ci-dessous.
Exercice 5
Construisez une fonction y = ecrire(x,n) qui sauve dans un fichier les n premières puissance de x. Le fichier doit contenir un élément par ligne.
Exercice 6
Construisez la fonction [A,B,C] = test_divise(x,y) telle que:
§ A = 1 si x est divisible par y et 0 sinon
§ B est le résultat de la division entière de y par x
§ C est le reste de la division entière de y par x
Exemple:
[A,B,C] = test_divise(10,6) fourni:
A = 0 ; B = 1 ; C = 4
Exercice 7
Utilisez la fonction réalisée en 3. pour réaliser une fonction [y] = banque(x) qui vérifie si x est un numéro de compte bancaire valide. Un numéro de compte bancaire est valide si les 2 derniers chiffres sont le reste de la division entière des 10 premiers par 97.
Exercice 8
Ecrivez un script qui représente sur un même graphique, les fonctions sin(x), cos(x), sin²(x), sin(x²) dans des couleurs différentes.
Exercice 9
Ecrivez un script qui lit au clavier un nombre entier n et fourni une matrice n x n dont les éléments sont donnés par: a(i,j) = i + j.
Exercice 10
Ecrivez une fonction [y] = compare(x,y) qui prend 2 chaînes de caractères comme arguments et renvoi 1 sur x est avant y dans l'ordre alphabétique et 0 sinon.