Documente Academic
Documente Profesional
Documente Cultură
CURS 9
Există două metode importante de a îmbunătăți viteza de execuție și gestiunea memoriei în codurile
sursă scrise în MATLAB:
✓ vectorizarea ciclurilor
✓ prealocarea dimensiunilor
Vectorizarea ciclului
MATLAB-ul optimizează operațiile cu vectori și matrice și în unele situații folosește algoritmi mai
rapizi decât cei uzuali. Din acest motiv atunci când este posibil, ciclurile for sau while se
recomandă a fi înlocuite cu operații vectoriale sau matriciale.
Exemplu:
tic %start cronometru
x1=0.01;
for k=1:10000
y1(k)=log10(x1);
x1=x1+0.01;
end
toc %stop cronometru
Elapsed time is 0.029637 seconds.
Prealocarea dimensiunilor
Când ciclurile for sau while nu pot fi evitate, prealocarea dimensiunilor duce la o creștere a
vitezei de calcul și o îmbunătățire a utilizării memoriei.
Exemplu:
tic
for n=1:320
r(n)=rank(ones(n)); %functia rank calculează rangul unei matrice
end
toc
Elapsed time is 1.415834 seconds.
Informatica aplicată 2 - MATLAB 2
Explicație: fără prealocare, MATLAB-ul mărește dimensiunea tabloului r la fiecare execuție a ciclului,
ceea ce duce la micșorarea vitezei, la fragmentarea și utilizarea irațională a memoriei. Prealocarea
dimensiunii elimină acest pas de creștere a dimensiunii.
1. Sume și produse
Suma elementelor unui vector, matrice sau tablou se realizează cu funcția sum
Sintaxe:
Y=sum(X) dacă argumentul X este un vector funcția sum returnează un scalar egal cu suma
elementelor vectorului, iar dacă argumentul este o matrice, funcția returnează un vector linie
care conține suma elementelor pe fiecare coloană
Y=sum(X,dim) returnează suma elementelor după dimensiunea specificată (1-suma pe fiecare
coloană rezultând un vector linie care conține suma elementelor pe fiecare coloană; 2-suma pe
fiecare linie rezultând un vector coloană care conține suma elementelor pe fiecare linie; 3-suma
după dimensiunea 3 etc.)
j
Suma cumulată a elementelor unui vector, matrice sau tablou este dată de relația s j = xk ,
k =1
Sintaxe:
Y=cumsum(X) dacă argumentul X este un vector, funcția cumsum returnează un vector care
conține suma cumulată a elementelor vectorului, iar dacă argumentul este o matrice, funcția
returnează o matrice care pe fiecare coloană conține suma cumulată a elementelor din coloana
respectivă
Y=cumsum(X,dim) returnează suma cumulată a elementelor după dimensiunea specificată ( 1-
suma cumulată pe fiecare coloană, 2-suma cumulată pe fiecare linie, 3-suma cumulată după
dimensiunea 3 etc.)
Produsul elementelor unui vector, matrice sau tablou se realizează cu funcția prod
Sintaxe:
Y=prod(X) dacă argumentul X este un vector, funcția prod returnează un scalar egal cu
produsul elementelor vectorului, iar dacă argumentul este o matrice funcția returnează un
vector linie care conține produsul elementelor pe fiecare coloană
Y=prod(X,dim) returnează produsul elementelor după dimensiunea specificată (1-produsul pe
fiecare coloană, 2-produsul pe fiecare linie, 3-produsul după dimensiunea 3 etc.)
j
Produsul cumulat al elementelor este dat de relația p j = xk , j = 1, 2, ..., N . Pentru calculul
k =1
P=prod(A,1)
P =
70 16 0 108
SC=cumsum(A,1)
SC =
2 4 7 3
7 5 7 7
14 9 15 16
Informatica aplicată 2 - MATLAB 5
PC=cumprod(A,1)
PC =
2 4 7 3
10 4 0 12
70 16 0 108
DS=diff(A,1)
DS =
3 -3 -7 1
2 3 8 5
Exemplul 2: Să se calculeze vitezele medii ale unui atlet pe baza următoarelor date experimentale:
distanțele considerate: 0, 100, 300, 600, 1000, 1500, 2000, 2500, 3000 [m], la timpii:
0, 16, 47, 96, 160, 239, 319, 398, 476 [s].
d=[0 100 300 600 1000 1500 2000 2500 3000];
t=[0 16 47 96 160 239 319 398 476];
vMed=diff(d)./diff(t)
vMed =
6.2500 6.4516 6.1224 6.2500 6.3291 6.2500 6.3291
6.4103
3. Sortarea elementelor
Sortarea elementelor unui vector, matrice sau tablou se face cu funcția sort
Sintaxe:
Y=sort(X) dacă argumentul X este vector, funcția sortează crescător elementele sale; dacă
argumentul X este matrice, funcția sortează crescător fiecare coloană a acesteia
Y=sort(X,dim) sortează elementele crescător după dimensiunea specificată (1-sortează
elementele crescător pe fiecare coloană, 2-sortează elementele crescător pe fiecare linie, 3-
sortează după dimensiunea 3 etc.)
Y=sort(...,'tip_sortare') sortează elementele în direcția specificată, în funcție de
'tip_sortare': 'ascend' sau 'descend'
[Y,I]=sort(X...) returnează în matricea Y elementele coloanelor sortate și în matricea I
indicii elementelor sortate ale matricei X. Dacă elementele coloanei matricei se repetă (au
valori egale), indicii acestora sunt returnați în ordinea în care au fost întâlniți în matricea
argument. Pentru matrice cu elemente numere complexe, sortarea se face după valoarea
modulului
Informatica aplicată 2 - MATLAB 6
4. Maximul și minimul
Funcțiile max și min determină maximul și minimul valorilor unui vector, matrice sau tablou.
Sintaxe:
M=max(X) dacă X este vector, aceste funcții returnează un scalar egal cu cel mai mare
element, iar dacă X este matrice, funcțiile returnează un vector linie care conține elementele
maxime din fiecare coloană
m=min(X) dacă X este vector, aceste funcții returnează un scalar egal cu cel mai mic element,
iar dacă X este matrice, funcțiile returnează un vector linie care conține elementele minime
din fiecare coloană
[M,I]=max(X) determină elementele maxime și a indicelui (poziției) acestora; în vectorul M se
memorează valorile maxime, iar în vectorul I indicii acestor valori; dacă există mai multe valori
maxime identice, se reține indicele primului element maxim
[m,I]=min(X) determină elementele minime, precum și a indicelui (poziției) acestora; în
vectorul m se memorează valorile minime, iar în vectorul I indicii acestor valori; dacă există
mai multe valori minime identice, se reține indicele primului element minim
[M,I]=max(X,[],dim) determină elementele maxime, precum și a indicelui (poziției) acestora
după dimensiunea specificată (1-maximul de pe fiecare coloană, 2-maximul de pe fiecare linie,
3-maximul după dimensiunea 3 etc.)
C=max(A,B) creează o matrice C care conține elementele maxime din două matrice A și B,
de aceeași dimensiune
C=min(A,B) creează o matrice C care conține elementele minime din două matrice A și B,
de aceeași dimensiune
Exemplul 1: Să se determine valorile maxime și indicii acestora în cazul unui vector și ale unei matrice.
a=[2 4 7 3 5 1 0 4 7 4 8 9]
a =
2 4 7 3 5 1 0 4 7 4 8 9
[M1,I1]=max(a)
M1 =
9
I1 =
12
[M2,I2]=max(A)
M2 =
7 4 8 9
I2 =
3 1 3 3
[M,I]=max(A,[],2)
M =
7
5
9
I =
3
1
4
Informatica aplicată 2 - MATLAB 8
Exemplul 2: Crearea a două matrice C și D care conțin elementele maxime, respectiv minime, din
două matrice A și B.
A=[2 4 7 3;5 1 0 4;7 4 8 9]
A =
2 4 7 3
5 1 0 4
7 4 8 9
B=[3 2 3 1;6 1 9 3;8 3 2 2]
B =
3 2 3 1
6 1 9 3
8 3 2 2
C=max(A,B)
C =
3 4 7 3
6 1 9 4
8 4 8 9
D=min(A,B)
D =
2 2 3 1
5 1 0 3
7 3 2 2
5. Media aritmetică
Media aritmetică a unui vector, matrice sau tablou se calculează cu funcția mean
Sintaxe:
Y=mean(X) dacă argumentul X este un vector, funcția mean returnează un scalar egal cu
media aritmetică a elementelor vectorului, iar dacă argumentul este o matrice funcția
returnează un vector linie care conține media aritmetică a elementelor pe fiecare coloană
Y=mean(X,dim) dacă argumentul X este un tablou, funcția returnează media aritmetică a
elementelor după dimensiunea specificată (1-media pe fiecare coloană, 2-media pe fiecare
linie, 3-media după dimensiunea 3 etc.)
6. Mediana
Mediana este elementul de la mijlocul unul set de date ordonat crescător sau descrescător. Dacă
numărul N al valorilor setului este impar, valoarea mediană este cea din poziția (N+1)/2, iar dacă
Informatica aplicată 2 - MATLAB 9
acesta este par, valoarea mediană este media elementelor din pozițiile (N/2) și (N/2) + 1. Se
determină cu funcția median
Sintaxe:
Y=median(X) dacă argumentul X este un vector, funcția returnează un scalar egal cu mediana
elementelor vectorului
Y=median(X,dim) dacă argumentul X este un tablou, funcția returnează mediana
elementelor după dimensiunea specificată (1-mediana pe fiecare coloană, 2-mediana pe fiecare
linie, 3-mediana după dimensiunea 3 etc.)
7. Modulul
Modulul reprezintă valoarea termenului dintr-o serie de date care are frecvența maximă. Există serii
de date care au mai multe module. Se determină cu funcția mode
Sintaxe:
Y=mode(X) dacă argumentul X este un vector, funcția returnează un scalar egal cu modulul
elementelor vectorului. Atunci când există mai multe valori care au aceeași frecvență absolută,
funcția returnează cea mai mică valoare
Y=mode(X,dim) dacă argumentul X este un tablou, funcția returnează mediana elementelor
după dimensiunea specificată (1-pe fiecare coloană, 2-pe fiecare linie, 3-după dimensiunea 3
etc.). Atunci când există mai multe valori care au aceeași frecvență absolută, funcția returnează
cea mai mică valoare
[M,F]=mode(X,dim) returnează în matricea M modulul elementelor și în matricea F numărul
de apariții a modulului după dimensiunea specificată (1-pe fiecare coloană, 2-pe fiecare linie, 3-
după dimensiunea 3 etc.)
(x − m)
2
k
2 = k =1
unde termenul ( xk − m ) reprezintă diferența sau abaterea lui xk față de valoarea medie a variabilei,
notată cu m (N > 20).
Abaterea medie pătratică (abaterea standard) a unei variabile este definită ca radicalul dispersiei
variabilei respective:
N
(x − m)
2
k
= k =1
N
Informatica aplicată 2 - MATLAB 10
(x − x)
2
k
s2 = k =1
N−1
unde termenul ( xk − x ) reprezintă diferența sau abaterea lui xk față de valoarea medie a selecției,
notată cu x (N < 20).
Abaterea medie pătratică de selecție (abaterea standard de selecție):
N
(x − x)
2
k
s= k =1
N−1
Dispersia (varianța) se calculează cu funcția var
Sintaxe:
v=var(x,tip_dispersie) dacă argumentul x este un vector, funcția returnează un scalar
care reprezintă dispersia elementelor vectorului (dacă tip_dispersie este 1), respectiv
dispersia de selecție (dacă tip_dispersie este 0)
v=var(X,tip_dispersie,dim) dacă argumentul X este un tablou, funcția returnează un
scalar care reprezintă dispersia (dacă tip_dispersie este 1), respectiv dispersia de selecție
(dacă tip_dispersie este 0) după dimensiunea specificată (1-pe fiecare coloană, 2-pe
fiecare linie, 3-dimensiunea 3 etc.)
Abaterea standard (abaterea medie pătratică) se calculează cu funcția std.
Sintaxe:
a=std(x,tip_abatere) dacă argumentul x este un vector, funcția returnează un scalar care
reprezintă abaterea standard a elementelor vectorului (dacă tip_abatere este 1), respectiv
abaterea standard de selecție (dacă tip_abatere este 0);
a=std(X,tip_abatere,dim) dacă argumentul X este un tablou, funcția returnează un scalar
care reprezintă abaterea standard (dacă tip_abatere este 1), respectiv abaterea standard de
selecție (dacă tip_abatere este 0) după dimensiunea specificată (1-pe fiecare coloană, 2-pe
fiecare linie, 3-după dimensiunea 3 etc.).
Exemplu:
rez=[7.00 7.10 7.05 7.05 6.90 7.20 7.20 7.25 7.05 7.20 7.25 7.15 7.20 6.95
7.20 7.50 7.65 7.40 7.20 6.90 7.10 7.40];
Media=mean(rez,2)
Mediana=median(rez,2)
Modul=mode(rez,2)
dispSel=var(rez,0) %0==disp. de selectie
abStSel=std(rez,0)
Informatica aplicată 2 - MATLAB 11
Media =
7.1773
Mediana =
7.2000
Modul =
7.2000
dispSel =
0.0352
abStSel =
0.1875
Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA