Cours Matlab
Matlab fournit également la possibilité d'exécuter des commandes unix directement sous l'interpréteur :
Les noms de variables sont composés de lettres et de chiffres ; seuls les 19 premiers caractères sont pris en compte et Matlab fait la distinction entre minuscules et majuscules.
Matlab fournit deux fonctions permettant de lister les variables de l'environnement de travail :
Plusieurs commandes permettent de sauvegarder / restaurer des variables dans l'environnement de travail :
>> A=[1 1 3; 4 0 6; 2,5,-1]
A =
1 1 3 4 0 6 2 5 -1
On peut également taper enter à la place d'un ;
>> B=[1 0 -1 0 1 1 -1 1 0]
B =
1 0 -1 0 1 1 -1 1 0
>> x=[3 6 -2]; y=[7 2 4]; >> x+y
ans =
10 8 2
>> x'
3 6 -2
>> A*x'
3 0 38
>> 3+y
10 5 7
Lorsqu'un opérateur est précédé du caractère ., l'opération s'effectue élément par élément.
>> A*B
-2 4 0 -2 6 -4 3 4 3
>> A.*B
1 0 -3 0 0 6 -2 5 0
>> A
>> A(:)'
1 4 2 1 0 5 3 6 -1
6.4 Extraction /extension d'une partie de matrice
L'opérateur : appliqué à une dimension d'une matrice permet d'extraire des parties de matrice
>> A(:,2:3) %extraction des colonnes 2 à 3
1 3 0 6 5 -1
La suppresssion d'une colonne (resp. ligne) se fait par substitution avec une colonne (resp. ligne) vide.
>> A(2,:)=[] %suppression de la 2ieme ligne
1 1 3 2 5 -1
>> A(:,3)=[] %suppression de la 3ieme colonne
1 1 2 5
Les instructions suivantes permettent d'ajouter une ligne et une colonne
>> A=[A;3 4] %ajout d'une 3eme ligne
1 1 2 5 3 4
>> A(:,3)=[7 9 12]' %ajout d'une 3eme colonne
1 1 7 2 5 9 3 4 12
6.5 Taille et dimensions d'une matrice
>> size(A) %précise les dimensions de A sous la forme d'un vecteur colonne
3 3
>> length(A) %plus grande dimension de A
3
>> ndims(A) % nombre de dimensions de A
2
6.5 Affichage d'une matrice
Les commandes disp, printmat et pltmat permettent d'afficher une matrice :
>> printmat(A) --1--> 1 1 7 --2--> 2 5 9 --3--> 3 4 12
>> pltmat(A,'Matrice A','b',12)
Les commandes fliplr (respectivement flipud) réalisent un retournement des colonnes (respectivement des lignes). La commande flipdim effectue un retournement de la matrice suivant une dimension précisée. Ainsi, pour une matrice 2D appelée A, flipdim(A,1) est équivalent à flipud(A) et flipdin(A,2) est équivalent à fliplr(A,2).
>> fliplr(A)
7 1 1 9 5 2 12 4 3
>> flipud(A)
3 4 12 2 5 9 1 1 7
>> all(all(flipdim(A,2)==fliplr(A)))% on verifie que flipdim(A,2)==fliplr(A)
1
La commande rot90 effectue une rotation de 90° d'une matrice :
>> rot90(A)
7 9 12 1 5 4 1 2 3
La commande permute réordonne les dimensions d'une matrice suivant l'ordre spécifié par un vecteur :
>> permute(A,[2 1])
1 2 3 1 5 4 7 9 12
La commande reshape(x, m, n) forme une matrice m*n à partir des éléments de x. x doit avoir m*n éléments :
>> x=[1 2 3 4 5 6]; reshape(x,2,3)
1 3 5 2 4 6
La commande sub2ind(size, i1, ..., in) retourne l'indice de l'élément (i1, ..., in) d'une matrice dont les dimensions sont précisées par le tableau size. Sa fonction réciproque est ind2sub(size, index).
>> sub2ind([3 3], 1, 2)
4
>> [i,j]=ind2sub([3 3], 4)
i =
j =
Enfin, end fait référence au dernier indice d'une matrice suivant la dimension indiquée :
>> A(end,end)
12
>> A(end,:) % fait référence à la dernière ligne de A
3 4 12
6.7 Fonctions élémentaires sur les matrices
Matlab possède plusieurs fonctions (présentes dans datafun) agissant directement sur les vecteurs ou les colonnes de matrices :
6 10 28
>> cumsum(A)
1 1 7 3 6 16 6 10 28
>> cumprod(A)
1 1 7 2 5 63 6 20 756
Pour obtenir la somme de tous les éléments de la matrice A, on peut soit appliquer deux fois la fonction sum, soit appliquer une fois la fonction sum à la matrice A mise en colonne.
>> sum(sum(A))
44
>> sum(A(:))
6.8 Génération de matrices particulières
Le répertoire elmat propose plusieurs fonctions de génération de matrices élémentaires ou spécifiques. Voici tout d'abord les fonctions de génération de matrices élémentaires :
1 0 0 0 1 0 0 0 1
>> eye(2,3)
1 0 0 0 1 0
>> rand(2,3)
0.4565 0.8214 0.6154 0.0185 0.4447 0.7919
>> C=[1 2;3 4]
C =
1 2 3 4
>> repmat(C,2,3)
1 2 1 2 1 2 3 4 3 4 3 4 1 2 1 2 1 2 3 4 3 4 3 4
Plus de 60 fonctions sont prévues pour la création de matrices plus spécifiques. Ces fonctions sont détaillées à la fin de l'aide en ligne obtenue par la commande "help elmat". Les fonctions listées par la commande "help gallery" peuvent être détaillées à l'aide de la commande "help private/function" (par exemple "help private/cauchy" pour les matrices de Cauchy).
>> compan([1 2 3]) % Calcule la matrice dont le polynome caractéristique est X^2+2X+3
-2 -3 1 0
>> gallery('invol',4) % Calcule une matrice involutive d'ordre 4 (ie tq ans*ans=eye(4))
-4.0000 0.5000 0.3333 0.2500 -120.0000 20.0000 15.0000 12.0000 240.0000 -45.0000 -36.0000 -30.0000 -140.0000 28.0000 23.3333 20.0000
6.9 Opérations propres au calcul matriciel
L'ensemble des opérations élémentaires sur les matrices peuvent être effectuées par Matlab :
6.10 Les matrices creuses
La boîte à outils sparfun comporte un ensemble de fonctions sur les matrices creuses à 1 ou 2 dimensions. En effet, lorsqu'une matrice possède beaucoup d'éléments nuls (la matrice est dite creuse), il est intéressant d'utiliser une représentation condensée de ce type de matrice afin de diminuer la place mémoire occupée, le nombre d'opérations et le temps de calcul.
La fonction de conversion d'une matrice pleine m*n en matrice creuse est sparse(i, j, s, m, n) avec i, j indices lignes et colonnes des éléments non nuls et s valeurs des éléments non nuls. La fonction réciproque (passage de la représentation creuse à la représentation pleine d'une matrice) se fait grâce à la fonction full.
>> i=[1 3 2 2]
1 3 2 2
>> j=[1 1 2 3]
1 1 2 3
>> s=[1 2 3 4]
s =
>> A=sparse(i,j,s,3,3)
(1,1) 1 (3,1) 2 (2,2) 3 (2,3) 4
>> fullA=full(A)
fullA =
1 0 0 0 3 4 2 0 0
La commande issparse permet de savoir si une matrice admet une représentation pleine ou creuse :
>> issparse(A)
>> issparse(fullA)
0
Des fonctions permettent d'extraîre les informations propres aux éléments nuls et non nuls d'une matrice creuse :
>> find(A)
1 3 5 8
>> nnz(A)
>> nonzeros(A)
>> spy(A)
0 0 0.8928 0 0 0.2731 0 0 0 0 0 0
>> full(sprandn(3,4,0.3))
-0.0956 0 0 -0.8323 0 0 0 0 0.2944 0 0 0
>> full(sprandsym(3,0.4))
0.8580 0 1.2540 0 0 0 1.2540 0 0
La fonction spfun permet d'appliquer une fonction à tous les éléments non nuls d'une matrice creuse : spfun('fun', A).
>> full(A)
>> full(spfun('exp',A))
2.7183 0 0 0 20.0855 54.5982 7.3891 0 0
Les algorithmes classiques rencontrés en algèbre linéaire ont également été programmés : résolution de systèmes linéaires, recherche de valeurs et vecteurs propres, calcul de normes, du conditionnement d'une matrice.
7 Les nombres complexes
Matlab permet une manipulation aisée des complexes soit sous la forme algébrique (a+i*b) soit sous la forme exponentielle (rho*exp(i*theta)). NB : Les imaginaires purs i et j vérifient tous deux i2 = j2 = -1. Les opérations et fonctions usuelles +, -, *, /, ^, sqrt, exp, log sont directement applicables sur les nombres complexes.
>> z1=1+3i % Notez que le * entre 3 et i est inutile
z1 =
1.0000 + 3.0000i
>> z2=2-4i
z2 =
2.0000 - 4.0000i
>> z1+z2
3.0000 - 1.0000i
>> z1*z2
14.0000 + 2.0000i
>> z1/z2
-0.5000 + 0.5000i
>> z1^2
-8.0000 + 6.0000i
>> 2^z1
-0.9740 + 1.7468i
>> z1^z2
-7.5542e+02 - 1.2709e+03i
>> log(z1)
1.1513 + 1.2490i
>> sqrt(z1)
1.4426 + 1.0398i
Quelques fonctions de manipulation des complexes :
Plusieurs fonctions d'aide au tracé de fonctions complexes :
>> s=cplxgrid(4); >> plot(s) >> plot(s(1,:)) >> plot(s(2,:)) >> plot(s(3,:)) >> plot(s(4,:)) >> plot(s(5,:))
8 Les chaînes de caractères
La boîte à outils strfun est consacré au traitement des chaînes de caractères. Pour Matlab, une chaîne de caractères est un vecteur ligne composé de chaque caractère de la chaîne. Une chaîne de caractères ne peut être délimitée qu'avec des apostrophes.
Les fonctions de base :
ch1 =
presentation
>> length(ch1)
>> vc=abs(ch1)
vc =
112 114 101 115 101 110 116 97 116 105 111 110
>> setstr(vc)
>> disp([ch1,' de ','Matlab']) presentation de Matlab
>> ch2='3 blancs a la fin '; >> disp(['Taille avec les blancs a la fin=',num2str(length(ch2))]); Taille avec les blancs a la fin=20 >> disp(['Taille sans les blancs a la fin=',num2str(length(deblank(ch2)))]); Taille sans les blancs a la fin=17
Fonctions de test sur les caractères et chaînes de caractères :
logiciel matlab
>> upper('logiciel MATLAB')
LOGICIEL MATLAB
Evaluation d'une chaîne de caractères :
2.4142
Quelques fonctions utiles :
super logiciel MATLAB
>> [mot1, reste] = strtok('super logiciel MATLAB')
mot1 =
super
reste =
logiciel MATLAB
>> l = findstr('informatique scientifique', 'ti')
l =
8 19
logiciel scientifique MATLAB
Cette boîte à outils inclut également les conversions nombre<->chaîne de caractères et conversions de nombre d'une base à une autre (bases admises : binaire, décimale et hexadécimale ou base quelconque entre 2 et 36) :
C
>> dec2bin(12)
1100
>> dec2base(12,4)
30
9 Les polynômes
L'essentiel des fonctions sur les polynômes figure dans la boîte à outils polyfun.
Génération d'un polynôme à partir de ses coefficients rangés par ordre de décroissance de leur puissance :
>> p=[2 0 3] % p(x)=2x²+3
p =
2 0 3
Génération d'un polynôme à partir de ses racines :
>> poly([2 1]) % polynome x²-3x+2
1 -3 2
Recherche des racines d'un polynôme :
>> roots([1 -3 2])
2 1
Evaluation d'un polynôme en un point :
>> polyval([1 -3 2], 3)
Multiplication de polynômes :
>> conv(poly([1 2]), poly([3 4])) % generation du polynome (x-1)(x-2)(x-3)(x-4)
1 -10 35 -50 24
Division de polynômes :
>> P=[1 2 3]; >> S=[4 5 6]; >> [Q,R]=deconv(P,S) % Calcul du quotient Q et du reste R : P=QS+R
Q =
0.2500
R =
0 0.7500 1.5000
Dérivation d'un polynôme :
>> polyder([3 4 5]) % Derivation du polynome 3x²+4x+5
6 4
Décomposition d'une fraction en éléments simples :
>> [R,P,K]=residue(P,S) % B(s)/A(s) = K(s) + R(1)/(s-P(1)) + ... + R(n)/(s-P(n))
0.0938 - 0.1224i 0.0938 + 0.1224i
P =
-0.6250 + 1.0533i -0.6250 - 1.0533i
K =
Interpolation polynomiale :
10 Résolution d'autres problèmes numériques
Recherche de zéro d'une fonction :
3.6652
Minimisation d'une fonction :
Extrait du fichier sys.m décrivant le système (x'=-2y, y'=x) :
function yp=sys(t,y) yp=[-2*y(2),y(1)]';
11 Programmer en MATLAB
switch_expr et les case_expr peuvent être des scalaires ou des chaînes de caractères. Un seul CASE peut être exécuté, auquel cas les instructions suivantes sont celles qui suivent le END du switch.
Normalement, seules les instructions entre le TRY et le CATCH sont exécutées. Cependant, si une erreur survient lors de l'exécution d'une de ces instructions, ce sont les instructions entre le CATCH et le END qui seront exécutées.
12 Les graphiques 2D
Commandes d' "habillage" de graphiques (communes aux graphiques 2D et 3D) :
13 Les graphiques 3D
Principales fonctions de tracé 3D :
Quelques autres fonctions de tracé de graphiques 3D :
14 Images et animations
La toolbox specgraph contient les fonctions élémentaires de manipulation des images :
Les fonctions permettant de gérer des animations se trouvent également dans la toolbox specgraph :
15 Création d'interfaces Homme-Machine
La réalisation d'interfaces graphiques se fait à l'aide d'un outil appelé graphique. Grâce à cet outil, il est possible de créer, de personnaliser les interfaces graphiques de ses applications de manière visuelle.
Pour lancer l'éditeur, taper guide. La fenêtre suivante apparaît alors :
Les quatre boutons du haut permettent d'ouvrir les fenêtres suivantes :