2012-2013
Université de Jijel
Département :TCST (2eme Année)
Module: informatique
TRAVAUX PRATIQUES -MATLAB
Préparé par: LAHLOU NADJIB
Groupe: 01
Section: A
1
Introduction
Matlab est un langage simple et très efficace, optimisé pour le traitement des
matrices, d’où son nom. Pour le calcul numérique, Matlab est beaucoup plus
concis que les “vieux” langages (C,Pascal, Fortran, Basic). Un exemple: plus
besoin de programmer des boucles modifier pour un à un les éléments d’une
matrice. On peut traiter la matrice comme une simple variable. Matlab contient
également une interface graphique puissante, ainsi qu’une grande variété
d’algorithmes
Scientifiques.
2
Les Différentes fenêtres de Matlab
1. En utilisant la fenêtre d'espace de travail (Workspace), j'ai obtenu ces résultats :
>> a=2+3i
a=
2.0000 + 3.0000i
>> b=[1 2;3 4]
b=
1 2
3 4
>> c='abcd'
c=
abcd
>> d={'Paul' 2;'Claire' 1}
d=
'Paul' [2]
'Claire' [1]
Donc les classes des objets a,b,c,d sont :
a et b: Double array
c: char array
d: cell array
2. Who / Whos
>> lookfor who
who - List current variables.
whos - List current variables, long form.
>> who
Your variables are:
a ans b c d
>> whos
Name Size Bytes Class Attributes
a 1x1 16 double complex
ans 0x0 0 char
3
b 2x2 32 double
c 1x4 8 char
d 2x2 276 cell
Donc: l'instruction who nous donne les objets qui se trouvent dans l'espace de travaille;
quant à whos elle vous donne les détails des objets qui sont : name, size, byte, classe ….
3. Après avoir terminé l'exercice on utilise clear pour vider les fenêtres de commandes,
d'historique et de travail.
Utilisation de l'aide en ligne.
1. On veut trouver comment calculer les différentes normes de vecteurs (norme euclidienne,
norme1, norme infini), le produit scalaire de 2 vecteurs, et le produit vectoriel de deux vecteurs. Pour
cela il est recommandé de taper lookfor vector dans la fenêtre de commande ; et on obtiendra :
>> lookfor vector
TargetsComms_VectorApplicationChannel - class representing information about vector application
chanels
idnlfunVector - Create array of multiple nonlinearity estimator objects.
xregvectorinput - function obj = xregvectorinput(FigureHandle , 'Name' , vector ,
'Callback')
mbctransform - vectorized transform object
all - True if all elements of a vector are nonzero.
any - True if any element of a vector is a nonzero number or is
isvector - True if array is a vector.
length - Length of vector.
linspace - Linearly spaced vector.
logspace - Logarithmically spaced vector.
cross - Vector cross product.
dot - Vector dot product.
eig - Eigenvalues and eigenvectors.
norm - Matrix or vector norm.
4
detrend - Remove a linear trend from a vector, usually for FFT processing.
On peut aussi faire différentes recherches sur les commandes et fonctions (norm, cross, dot …) e.i :
>> help dot
DOT Vector dot product.
C = DOT(A,B) returns the scalar product of the vectors A and B.
A and B must be vectors of the same length. When A and B are both
column vectors, DOT(A,B) is the same as A'*B.
DOT(A,B), for N-D arrays A and B, returns the scalar product
along the first non-singleton dimension of A and B. A and B must
have the same size.
DOT(A,B,DIM) returns the scalar product of A and B in the
dimension DIM.
Class support for inputs A,B:
float: double, single
Soit :
>> a=[1 3 5 1]'
a =1
b=[1 1 2 2]'
b =1
5
2
>> dot(a,b)
ans = 16
>> norm(a)
ans = 6
>> norm(a,2)
ans = 6
>> norm(a,inf)
ans = 5
2. Par défaut, Matlab utilise une précision de 4 chiffres après la virgule pour l'affichage de
résultats. L'utilisateur peut changer la précision des nombres en choisissant parmi les formats ci-
dessous: (tester sur le nombre PI)
>> format short : 4 chiffres après la virgule (par défaut)
>> pi
ans =
3.1416
>> format long: 14 chiffres après la virgule
>> pi
ans =
3.141592653589793
>> format short e : 4 chiffres après la virgule+ l'exposant.
>> pi
ans =
3.1416e+000
>> format short g: 5 chiffres en tout avec ou sans exposant.
>> pi
ans =
3.1416
>> format long e : 15 chiffres après la virgule + l'exposant.
>> pi
ans =
3.141592653589793e+000
>> format long g: 15 chiffres au total avec ou sans exposant.
6
>> pi
ans =
3.14159265358979
>> format bank: "dollars et sous" format.
>> pi
ans =
3.14
>> format hex : affiche les bits en format hexadécimal.
>> pi
ans =
400921fb54442d18
>> format + : seulement les signes sont affichés
>> pi
ans =
+
>> 21/5
ans =4.2000
>> 1/2+1/3
ans = 0.8333
construction de vecteurs.
La prévision de l'effet des commandes sans utiliser le logiciel:
1.
>> a=[1 2 3]
a =1 2 3
>> b=[1 2 3]
b=1 2 3
>> c=[1:2:3]
c =1 3
>> d=[1 2 3]'
d=1
7
>> e=[0;i]
e =0
0 + 1.0000i
>> e'
ans =
0 0 - 1.0000i
>> e.'
ans =
0 0 + 1.0000i
2.
>> a=0:10
a =0 1 2 3 4 5 6 7 8 9 10
>> b=0.10
b = 0.1000
>> c=[0:10]
c =0 1 2 3 4 5 6 7 8 9 10
>> d=[0;10]
d =0
10
>> e=[0,10]
e=0 10
>> f=0.7:3.4
f = 0.7000 1.7000 2.7000
3.
>> a=[0:0.1:1]
8
a=
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
>> b=[0:0.15:1]
b=
0 0.1500 0.3000 0.4500 0.6000 0.7500 0.9000
>> c=[1:-0.15:0]
c=
1.0000 0.8500 0.7000 0.5500 0.4000 0.2500 0.1000
>> d=linspace(0,1,10)
d=
0 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 0.8889 1.0000
4. Explication de la différence entre les commandes:
- [Début: fin] : Dans Matlab , le pas est par défaut égal à 1.
- [Début: pas: fin]: Le pas est manuel; Càd on a tout à fait le choix de donner n'importe quelle
valeur logique au pas.
- linspace(a,b,n): C'est Matlab qui se charge de trouver le pas dans se cas; on n'a qu'à préciser
le début, la fin et les nombres entres les éléments de ce vecteur.
- Pour partager un intervalle borné en 50 intervalles de même longueur il suffit d'écrire la
combinaison suivante: linspace(a,b,50).
- linspace(0,1,k) nous donne un vecteur espacé linéairement ayant K espace.
- Si le début et supérieur à la fin, il faudra préciser le pas négatif sinon on aura comme réponse
empty matrix.
Construction de matrices et matrices particulières.
Soit: A = 1 2 3
4 5 6
1. B=[A, zeros(2,3); diag([1,2]),eye(2,4)] est ce qu'on appelle une concaténation.
>> zeros(2,3)
ans = 0 0 0
9
0 0 0
>> c=[A,zeros(2,3)]
c=1 2 3 0 0 0
4 5 6 0 0 0
>> diag([1,2])
ans = 1 0
0 2
>> eye(2,4)
ans =1 0 0 0
0 1 0 0
>> B=[A,zeros(2,3);diag([1,2]),eye(2,4)]
B=
1 2 3 0 0 0
4 5 6 0 0 0
1 0 1 0 0 0
0 2 0 1 0 0
_La taille de B est:
>> size(B)
ans = 4 6
[Link] remplacement de la 6 ème
colonne de B par le vecteur (7,8,9,10):
>> B(:,6)=[7 8 9 10]
B=
1 2 3 0 0 7
4 5 6 0 0 8
1 0 1 0 0 9
0 2 0 1 0 10
10
L'extraction de la matrice correspondante aux ligne 2 et 4, et aux colonnes 2 et 6:
>> B([2,4],[2,6])
ans =
5 8
2 10
3. les réponses aux instructions données :
>> A'
ans =1 4
2 5
3 6
>> diag(A)
ans = 1
>> diag(diag(A))
ans = 1 0
0 5
>> triu(A)
ans =1 2 3
0 5 6
Triu : veut dire la matrice triangulaire superieur.
>> tril(A)
ans = 1 0 0
4 5 0
Tril : nous donne la matrice triangulaire inférieur.
>> rand(size(A))
ans =
0.8147 0.1270 0.6324
11
0.9058 0.9134 0.0975
Rand: nous donne des nombres aléatoires limités entre 0 et 1.
>> eye(size(A))
ans = 1 0 0
0 1 0
4.
>> A(1,2)=0
A=1 0 3
4 5 6
Cette commande fait remplacer le chiffre 2 de la 1ère ligne et la 2ème colonne par le chiffre 0 .
>> A(4,2)=5
A=1 2 3
4 5 6
0 0 0
0 5 0
Cette commande a ajouter deux nouvelles lignes à la matrice A, et a fait remplacer le ch iffre 0
de la 4ème ligne de la 2ème colonne par le chiffre 5.
>> A(10)
ans = 6
Opération sur les matrices.
Soient: A =1 2 3 et u=2
4 5 6 4
1.
>> B=A+2
12
B =3 4 5
6 7 8
L'addition d'un scalaire à une matrice revient à l'ajout de ce dérnier à tous ces élèments.
>> C=A*3
C =3 6 9
12 15 18
La même chose pour la multiplication.
D=[A+3*eye(size(A))] , On exclue les commandes interne après on execute les autres commandes.
>> size(A)
ans = 2 3
>> eye(2,3)
ans =1 0 0
0 1 0
>> 3*eye(size(A))
ans =3 0 0
0 3 0
>> D=[A+3*eye(size(A))]
D=4 2 3
4 8 6
2.
>> E=A*A
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Le nombre de colonne n'est pas égal au nombre de ligne.
>> F=A.*A
F =1 4 9
16 25 36
13
C'est une multiplication dite élément par élément.
>> G=A^3
??? Error using ==> mpower
Matrix must be square.
Car A n'est pas une matrice carrée.
>> H=A.^3
H =1 8 27
64 125 216
>> I=exp(A)
I = 2.7183 7.3891 20.0855
54.5982 148.4132 403.4288
>> J=sqrt(A)
J =1.0000 1.4142 1.7321
2.0000 2.2361 2.4495
>> K=A*u
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> L=A.*A'
??? Error using ==> times
Matrix dimensions must agree.
>> M=A*A'
M =14 32
32 77
Le rôle du point est d'effectuer la multiplication élèment par élèment.
14
Utilisation d'un fichier externe (script) et de la fenêtre de
l'éditeur (Curent Directory).
Pour créer un nouveau fichier, allez dans le menu de sélection à:
"File/New/M-file"
Pour ouvrir un fichier déjà créé, allez à:
"File/Open" et choisissez le nom du fichier en question.
La fenêtre "Edit Window" peut être vue comme un éditeur de texte où:
• Les commentaires sont écrits en vert et débutent par "%"
• Les variables et équations apparaissent en noir
• Les caractères apparaissent en rouge
La boucle <for>
La boucle "for" s'écrit de la manière suivante:
for index = expression
…
…
…
end
où "expression" prend généralement la forme suivante:
début:incr:fin
Exemple 1:
function [factn]= factn
fact n=1
for i= 1:4
fact n = fact i
end
Exemple 2:
function A = matA(n)
A= zeros (n)
for i= 1:n
for j= 1:n
A(i,j)= 1/(i^2+j^2+1)
end
end
La boucle <if … end>
"if" et "if – else" sont utilisés pour imposer des conditions. Si la condition est respectée,
alors le code qu'elle contient est exécuté. A noter qu'il faut toujours terminer le "if" par un
"end" en Matlab.
Forme:
15
if "expression"
---
---
elseif "expression"
---
---
else
---
end
Exemple:
function [sol] = equa2(a,b,c)
% On va essayer de calculer les racines réelles de se polynôme
delta=b^2-4*a*c
if delta<0
sol [pas de racines]
elseif delta == 0
sol [-b/2a , -b/2a]
else delta>0
sol [b+sqrt(delta)/2a , -b+sqrt(delta)/2a]
end
La boucle <While …end>
Dans Matlab, la boucle "while" s'écrit de la façon suivante:
while expression
…
…
…
end
Le code dans la boucle est exécuté aussi longtemps que la condition de départ est "vrai".
Exemple:
function [n]= test(K,epss)
n=1
y=1
while y>epsilon
n=n+1
y=1/n^K ;
end
16
17