Sunteți pe pagina 1din 11

Informatica aplicată 2 - MATLAB 1

CURS 9

ÎMBUNĂTĂȚIREA PERFORMANȚELOR DE CALCUL

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.

Versiunea vectorizată a codului anterior este:


tic
x2=0.01:0.01:100;
y2=log10(x2);
toc
Elapsed time is 0.025394 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

Versiunea cu prealocare a aceluiași cod este:


tic
r=zeros(1,320);
for n=1:320
r(n)=rank(ones(n));
end
toc
Elapsed time is 1.356177 seconds.

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.

PRELUCRAREA DATELOR ȘI CALCULE STATISTICE

Funcțiile MATLAB pentru prelucrarea datelor și calcule statistice sunt următoarele:

sum Calculează suma elementelor


cumsum Calculează suma cumulată a elementelor
prod Calculează produsul elementelor
cumprod Calculează produsul cumulat al elementelor
diff Calculează diferențele dintre elementele succesive
sort Sortează elementele în ordine crescătoare sau descrescătoare
max Determină cea mai mare componentă
min Determină cea mai mică componentă
mean Calculează media aritmetică
median Returnează valoarea mediană
mode Returnează modulul
std Calculează abaterea standard (abaterea medie pătratică)
var Calculează dispersia
Informatica aplicată 2 - MATLAB 3

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

j = 1, 2, ..., N . Pentru calculul sumei cumulate se folosește funcția cumsum

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

produsului cumulat se folosește funcția cumprod


Sintaxe:
Y=cumprod(X) dacă argumentul X este un vector, funcția cumprod returnează un vector care
conține produsul cumulat al elementelor vectorului, iar dacă argumentul este o matrice funcția
returnează o matrice care pe fiecare coloană, conține produsul cumulat al elementelor din
coloana respectivă
Informatica aplicată 2 - MATLAB 4

Y=cumprod(X,dim) returnează produsul cumulat al elementelor după dimensiunea specificată


(1-produsul cumulat pe fiecare coloană, 2-produsul cumulat pe fiecare linie, 3-produsul cumulat
după dimensiunea 3 etc.)

2. Calculul diferențelor dintre elementele succesive


Calculul diferențelor dintre elementele adiacente dintr-un vector, matrice sau tablou se realizează cu
funcția diff
Sintaxe:
Y=diff(X) dacă X este un vector, diff returnează un vector format de diferențele dintre
elementele adiacente (Y are cu un element mai puțin decât X); dacă X este o matrice, diff
returnează o matrice formată de diferențele succesive ale elementelor coloanelor (Y are cu o
linie mai puțin decât X)
Y=diff(X,n) aplică recursiv diff(X) de n ori
Y=diff(X,n,dim) returnează o matrice formată de diferențele succesive ale elementelor după
cele dimensiunea specificată recursiv de n ori (1-diferențele succesive ale elementelor pe
fiecare coloană, 2-diferențele succesive ale elementelor pe fiecare linie, 3-diferențele succesive
ale elementelor după dimensiunea 3 etc.)
Exemplul 1: Să se calculeze suma, suma cumulată, produsul, produsul cumulat și diferențele succesive
ale elementelor unei matrice după dimensiunea 1.
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
S=sum(A,1)
S =
14 9 15 16

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

Exemplu: Să se sorteze elementele unei matrice, cu precizarea indicelui fiecărui element.


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
[Y,I]=sort(A,2,'descend')
Y =
7 4 3 2
5 4 1 0
9 8 7 4
I =
3 2 4 1
1 4 2 3
4 3 1 2

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.)

[m,I]=min(X,[],dim) determină elementele minime, precum și a indicelui (poziției) acestora


după dimensiunea specificată (1-minimul de pe fiecare coloană, 2-minimul de pe fiecare linie,
3-minimul după dimensiunea 3 etc.)
Informatica aplicată 2 - MATLAB 7

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

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

[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.)

8. Dispersia (varianța) și abaterea medie pătratică (abaterea standard)


Dispersia unei variabile se calculează cu relația:
N

(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

Dispersia de selecție se calculează cu relația:


N

(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

S-ar putea să vă placă și