Sunteți pe pagina 1din 25

CURS 3

1



CURS 3

1. Instruciuni de control logic
Instruciunile de control logic n MATLAB sunt:
if Instruciune pentru execuia condiionat;
else Instruciune asociat cu if;
elseif Instruciune asociat cu if;
for Instruciune pentru crearea ciclurilor cu numr specificat de pai;
while Instruciune pentru crearea ciclurilor cu condiie logic;
break Instruciune pentru terminarea forat ntr-un ciclu;
return Returneaz execuia la funcia precizat;
error Instruciune pentru afiarea unui mesaj de eroare;
end Instruciune pentru ncheierea ciclurilor for", while" si if.
Programele MATLAB sunt scrise pentru a realiza numai pai secveniali, operaiile fiind realizate una
dup alta. n multe cazuri, ns, este necesar repetarea unui set de instruciuni atta timp ct o condiie
este realizat si a altui set de instruciuni, dac condiia nu mai este realizat. Alteori, este necesar
repetarea unui grup de instruciuni de un anumit numr de ori. MATLAB pune la dispoziia
programatorului dou instruciuni, for i while, cu ajutorul crora un grup de instruciuni, numit corpul
ciclului, sa poate repeta de mai multe ori.
Instruciunea for este folosit pentru repetarea unui grup de instruciuni de un anumit numr de ori,
cunoscut iniial. Un contor de ciclu ine evidena numrului de repetri ale instruciunilor din corpul
ciclului i oprete ciclul cnd contorul ajunge la valoarea precizat.
Instruciunea while este folosit atunci cnd calculele efectuate cu un grup de instruciuni trebuie
repetate pn cnd o anumit condiie este ndeplinit. Numrul de iteraii nu este cunoscut iniial.
Ieirea din ciclu se realizeaz la ndeplinirea condiiei impuse, care este testat la nceputul fiecrei
iteraii.
1.1. Instruciunea condiional if
n cadrul unui algoritm este deseori necesar o selecie a grupului de instruciuni ce urmeaz a fi
CURS 3


2


executate, condiionat de valoarea de adevr a unei expresii. Instruciunile condiionale utilizeaz
operatorii relaionali si operatorii logici.
1.1.1. Operatori relaionali
MATLAB-ul are ase operatori relaionali, care sunt utilizai pentru a compara dou matrice de
dimensiuni egale; lista este prezentat n tabelul 1.
Operatorii relaionali compar dou matrice sau dou expresii matriceale, element cu element. Acetia
returneaz o matrice de aceeai dimensiune cu a matricelor care se compar, cu elementele 1 cnd
relaia este ADEVRAT i cu elementele zero cnd relaia este FALS. Primii patru operatori (< ,<=
, >, >=) compar numai partea real a operanzilor (partea imaginar este ignorat), iar ultimii doi
operatori (== i ~=) trateaz att partea real ct i cea imaginar.
Tabelul 1
Operatorii relaionali Semnificaia
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
= = identic
~ = diferit
Forma general de utilizare a operatorilor relaionali este:
rezultat = expresie_ 1 op_relaional expresie_2
unde: rezultat este o matrice de elemente 0 i 1, n care sunt returnate rezultatele comparaiei;
expresie_1, expresie_2 - matricele sau expresiile matriceale care se compar ;
op_relaional - unul dintre cei ase operatori relaionali menionai n tabelul 1.
Dac A i B sunt matricele care se compar i C matricea n care este returnat rezultatul, expresia:
C=A op_relaional B
returneaz:
CURS 3


3


( )
( ) ( ) ( )
( ) ( ) ( )
1 , _ ,
,
0 , _ ,
daca A i j op relational B i j true
C i j
daca A i j op relational B i j false


Dac unul dintre operanzi este un scalar i cellalt o matrice, scalarul se extinde" pn la dimensiunea
matricei (vezi exemplele din cursul anterior operaii cu matrici).
Exemplul 1. Urmtoarele dou instruciuni:
X=5>=[1 2 3; 4 5 6; 7 8 10]
X=5*ones(3,3)>=[1 2 3; 4 5 6; 7 8 10]
sunt echivalente, obinndu-se acelai rezultat:
1 1 1
1 1 0
0 0 0
X =

Observaie. Funcia ones(3,3) returneaz o matrice 3*3 cu toate elementele egale cu 1.
Exemplul 2. Fie matricele:
1 0 1
2 0 1 2 2 1 5
i i i
A B
i i i i
( (
= =
( (
+


S se realizeze comparaiile:
C=A>=B i D=A= =B cu A i B definite mai sus, se obin rezultatele
1 1 1 1 1 0
1 0 1 1 0 0
C D = =

1.1.2. Operatori logici
Pentru combinarea a dou sau mai multe expresii logice se utilizeaz operatorii logici din tabelul 2.
Tabelul 2.
Operatori logici Simbol
MATLAB
Prioritatea
CURS 3


4


NU ~ 1
l & 2
SAU | 3
Operatorii & i | compar doi scalari sau dou matrice de dimensiuni egale. Pentru matrice opereaz
element cu element. Operatorii logici retumeaz 1 (ADEVRAT) pentru orice valoare diferit de
zero. Se va returna 1 pentru ADEVRAT i 0 pentru FALS.
Operatorul logic NU (sau complementul logic), este operator unar. Expresia ~A retumeaz 0 dac A
e diferit de zero si 1 dac A este 0.
Operatorii logici au prioritate mai mic dect operatorii relaionali i aritmetici. Astfel, se evalueaz
nti expresiile care conin operatori relaionali i aritmetici, i apoi cele cu operatori logici.
Operatorii logici se utilizeaz ntotdeauna pentru compararea matricelor cu elemente 0 i 1, calculate cu
operatori relaionali. Spre exemplu, expresia logic:
( )
( ) ( ) ( ) ( ) ( )
1 , , & , ,
,
0
daca A i j B i j B i j C i j
D i j
inrest
< <


are urmtoarea descriere n MATLAB:
D=(A<B)&(B<C)
Aceast operaie este posibil numai dac matricele rezultate din operaiile A< B i B < C au aceeai
dimensiune.
Operatorii logici se utilizeaz cu expresii logice complete. Spre exemplu, expresia a<b & b<c este
corect, ns expresia a<b & c este incomplet. Expresiile logice pot fi precedate de operatorul logic
NU. Acest operator schimb valorile expresiei n valorile opuse: dac a>b este 1 (ADEVRAT),
atunci ~(a>b) este 0 (FALS). Expresiile logice pot conine mai muli operatori logici, ca n exemplul:
~(b= =c | c = = 5)
Ordinea de prioritate a operatorilor logici, de la superior la inferior, este: NU, l, SAU. Dac b = 3 si c
= 5, n exemplul anterior, prima expresie este 0 i a doua 1. Se evalueaz apoi expresia 0 | 1 a crei
valoare logic este 1. Aplicarea operatorului NU face ca rezultatul s fie 0.
Observaie. Este preferabil, pentru siguran, ca atunci cnd nu se cunoate cu certitudine ordinea de
prioritate a aplicrii operatorilor logici i relaionali s se recurg la folosirea parantezelor aa cum o
solicit ordinea operaiilor din aplicaia respectiv. Exemplu:
b=3; c=5; d=~(b= =c | c= =5) returneaz d=0 pe cnd b=3; c=5; d=~b= =c | c= =5 returneaz d=1.

CURS 3


5


1.1.3. Instruciunea if simpl
Instruciunea if poate fi implementat ca instruciune if simpl, sau poate include clauzele else
sau elseif. Forma general a unei instruciuni simple if este urmtoarea:
if expresie_logic
grup_de_instruciuni
end
Dac expresia_logic este adevrat, se execut grupul de instruciuni dintre instruciunea if i
instruciunea end. Dac expresia logic este fals, se trece la prima instruciune care urmeaz dup
instruciunea end.
Pentru o citire mai uoar, ct i pentru o urmrire a grupurilor de instruciuni care se execut,
se procedeaz la indentarea (deplasarea) acestora. Fie urmtoarea secven MATLAB:
if a<50
k=k+l
s=s+a
end
Dac a este un scalar i dac a< 50, k se incrementeaz cu 1 i apoi a este adunat cu s; altfel, cele
dou instruciuni sunt omise, s rmnnd cu valoarea cu care a fost iniializat nainte de a ajunge la
instruciunea if. Dac a este un vector sau o matrice, atunci k este incrementat cu 1 i a este nsumat cu
s, numai dac fiecare element al lui a este mai mic dect 50.
Instruciunea if poate fi inclus n interiorul unei alte instruciuni if, ca n exemplul urmtor:
if expresia_logic_1
grupul_de_instruciuni_A
if expresia_logic_2
grupul_de_instruciuni_B
end
grupul_de_instruciuni_C
end
grupul_de_instruciuni_D
CURS 3


6


Dac expresia_logic_1 este 1 (ADEVRAT), se execut ntotdeauna grupurile de instruciuni A i
C. Dac si expresia_logic_2 este 1 (ADEVRAT), se execut grupul de instruciuni B, naintea
executrii grupului de instruciuni C. Dac expresia_logic_1 este 0 (FALS), se trece la grupul de
instruciuni D. Indentarea este o operaie necesar la utilizarea instruciunilor if, deoarece pune n
eviden grupurile de instruciuni care se execut funcie de condiiile pe care le ndeplinesc.
Fie urmtorul exemplu de utilizare a instruciunilor condiionale if succesive:
if a<50
k=k+1
s=s+a
if b>a
b=0
end
end
Dac a i b sunt scalari i dac a < 50, se incrementeaz k cu 1 si se adun a la s. n schimb, dac b > a,
se seteaz b la zero. Dac a nu este mai mic dect 50, se trece la grupul de instruciuni care urmeaz
dup a doua instruciune end.
Dac a este un vector sau o matrice, condiia a<50 este adevrat numai dac fiecare element al lui a
este mai mic dect 50. Dac a i b sunt vectori sau matrice, atunci b>a numai dac fiecare pereche (b,
a) verific aceast condiie. Dac a sau b este scalar, comparaia se face ntre fiecare element al
matricei cu scalarul extins la o matrice.
1.1.4. Clauza else
Clauza else este utilizat pentru a executa un set de instruciuni, dac expresia logic este
ADEVRAT i un alt set de instruciuni, dac expresia logic este FALS. Forma general a
instruciunii if este combinat cu clauza else (numit uneori instruciunea if-else) ca n exemplul
urmtor:
if expresie_logic
grupul_de instruciuni_A
else
grupul_de_instruciuni_B
end
CURS 3


7


Dac expresia logic este adevrat se execut grupul de instruciuni A, iar dac este fals se execut
grupul de instruciuni B.
Exemplul. Pentru urmtoarea funcie:
( )
2
2 8 2
3 2
x daca x
f x
x daca x
+
=

>

descrierea MATLAB este:


if x <= 2
f=2*x+8
else
f=3*x^2
end
1.1.5. Clauza elseif
Dac funcia de calculat are mai multe nivele de instruciuni if-else, este dificil determinarea
expresiei logice adevrate, care selecteaz grupul de instruciuni ce urmeaz a fi executat, n acest caz,
se utilizeaz clauza elseif:
if expresia_logic_1
grupul_de_instruciuni_A
elseif expresia_logic_2
grupul_de_instruciuni_B
elseif expresia_logic_3
grupul_de_instruiuni_C
end
- dac expresia_logic_1 este adevrat, este executat numai grupul de instruciuni A;
- dac expresia_logic_1 este fals i expresia_logic_2 este adevrat, se execut numai
grupul_de_instruciuni_B;
- dac expresiile logice 1 i 2 sunt false, iar expresia logic 3 este adevrat, se execut numai
grupul de instruciuni C;
- dac mai multe expresii logice sunt adevrate, prima instruciune logic adevrat determin care
grup de instruciuni este executat prima dat;
CURS 3


8


- dac nici o expresie logic nu este adevrat, nu se execut nici un grup de instruciuni din
structura if.
Clauza elseif poate fi combinat cu clauza else ntr-o structur general de forma:
if expresia_logic_1
grupul_deinstruciuni_A
elseif expresia_logic_2
grupul_de_instruciuni_B
elseif expresia_logic_3
grupul_de_instruciuni_C
else
grupu_de_instruciuni_D
end
Dac nici o expresie logic dintre primele trei nu este adevrat, se va executa
grupul_de_instruciuni_D.
1.1.6. Instruciunea repetitiv for
Instruciunea for permite repetarea unui grup de instruciuni din corpul buclei, de un anumit numr de
ori; are urmtoarea structur general:
for index = expresie
grupul_de_instruciuni
end
unde:
- index este numele contorului;
- expresie este o matrice, un vector sau un scalar;
- grup_de_instruciuni este orice expresie MATLAB. n aplicaii, expresie este de cele mai multe ori
de forma:
k = iniial:pas:final unde:
iniial - este prima valoare a lui k,
CURS 3


9


pas - pasul (dac este omis, este considerat 1),
final - cea mai mare valoare pe care o poate lua k.
La fiecare pas de calcul index are valoarea unuia dintre elementele expresiei. Dac expresie este o
matrice, ciclarea se face pe coloane.
Pentru un ciclu for cu pasul negativ sau nentreg se genereaz mai nti un vector cu pasul i limitele
dorite si apoi se citesc valorile acestuia n cadrul buclei for.
La folosirea buclei for trebuie respectate urmtoarele reguli:
1. indexul buclei for trebuie s fie o variabil;
2. dac expresia este o matrice goal, bucla nu se execut. Se va trece la urmtoarea instruciune dup
instruciunea end;
3. dac expresia este un scalar, bucla se execut o singur dat, cu indexul dat de valoarea scalarului;
4. dac expresia este un vector linie, bucla se execut de attea ori cte elemente are vectorul, de
fiecare dat indexul avnd valoarea egal cu urmtorul element din vector;
5. dac expresia este o matrice, indexul va avea la fiecare iteraie valorile coninute n urmtoarea
coloan a matricei;
6. la terminarea ciclurilor for, indexul are ultima valoare utilizat;
7. dac se utilizeaz operatorul dou puncte (:) pentru a defini expresia, ca n exemplul:
for k= iniial:pas:final bucla se execut de:
1
final initial
n
pas
(
= +
(

ori, dac n este pozitiv, i nu exist dac n este negativ. Prin [] s-a notat
valoarea ntreag a numrului.

1.1.7. Instruciunea repetitiv while
Instruciunea while este o structur care se utilizeaz pentru repetarea unui set de instruciuni, atta
timp ct o condiie specificat este adevrat. Formatul general al acestei instruciuni de control este
urmtorul:
while expresie
grup_de_instruciuni
end
CURS 3


10


Grupul de instruciuni se execut ct timp expresie are toate elementele nenule. expresie este de
obicei sub forma:
expresie_1 condiie expresie_2
unde condiie este unul dintre operatorii relaionali: ==, <, >, <=, >=, ~=. Cnd condiia este
verificat (expresia este adevrat logic), se execut grupul de instruciuni. Dup ce se execut grupul
de instruciuni, condiia este retestat. Cnd condiia este din nou adevrat, grupul de instruciuni se
execut iar. Cnd condiia este fals, se trece la urmtoarea instruciune de dup instruciunea end.
Dac expresia este totdeauna adevrat logic (valoarea acesteia este diferit de zero), bucla devine
infinit; dintr-o bucl infinit se iese forat prin apsarea concomitent a tastelor [Ctrl]+[C].
1.1.8. Instruciunea break
Instruciunea break se utilizeaz pentru a iei dintr-o bucl nainte ca aceasta s se fi terminat. Se
recomand a fi utilizat dac o condiie de eroare este detectat n interiorul unei bucle. Instruciunea
break nceteaz execuia ciclurilor for i while. n cazul unor cicluri imbricate, break comand ieirea
din ciclul cel mai interior. Se apeleaz cu sintaxa: break.
1.1.9. Instruciunea return
Instruciunea return comand o ieire normal din fiierul-M ctre funcia care l-a apelat sau ctre
tastatur. Se apeleaz cu sintaxa: return.
Exemple de implementat la laborator (utilizarea operatorilor de comparaie i logici i a structurilor
de control logic)
1. S se genereze o matrice A, cu n linii i n+1 coloane, ale crei elemente sunt:
2
1 1
0
dacai j
A daca i j
inrest
=

= =


Cu secvena MATLAB:
n=4;
for i=1:n,
for j=1:n+1,
if i==j,
A(i,j)=2
elseif abs(i-j)==1,
CURS 3


11


A(i,j)=-1;
else
A(i,j)=0;
end
end
end
A
Se obine rezultatul:
2 1 0 0 0
1 2 1 0 0
0 1 2 1 0
0 0 1 2 1
A =







2. S se genereze o matrice Hilbert de ordinul 4, ale crei elemente sunt date de expresia:
( )
1
,
1
H i j
i j
=
+

Secvena MATLAB:
n=4
for i=1:n,
for j=1:n,
H(i,j)=1/(i+j-1);
end
end
H
CURS 3


12



VECTORIZAREA CALCULELOR
Deoarece operaiile cu vectori i matrici sunt executate n MATLAB mai repede cu un ordin de mrime
dect operaiile compilate/interpretate, se obine o vitez de lucru mai mare dac algoritmii nscrii n
fiierele-M sunt vectorizai. Oriunde este posibil, ciclurile for i while trebuie convertite n operaii cu
vectori sau matrici.
Spre exemplu, programul care calculeaz sinusul n 1000 de puncte (de la 1 la 10, cu pasul .01),
utiliznd bucla for.
t=0:0.01:10; N=length(t)
for i=1: N,
y(i)=sin(t(i)) ;
end
plot (t, y)
are versiunea vectorizat:
t=0:0 .01:10;
Y=sin(t);
plot (t, Y)
Primul exemplu necesit un timp de 10-15 ori mai mare dect cel de-al doilea.
n cazurile n care nu se poate vectoriza o parte din program, pentru a face ca ciclurile s fie executate
mai repede, se procedeaz la prealocarea unor vectori n care vor fi reinute rezultatele. De exemplu,
incluznd o prim instruciune de prealocare folosind funcia zeros, ciclul for urmtor se execut
semnificativ mai repede:
y=zeros (1,100);
for i=1:100
y(i)=det(x^i);
end
Explicaia const n faptul c dac nu se face prealocarea, interpretorul MATLAB trebuie s
redimensioneze vectorul y la o dimensiune mai mare, de fiecare dat cnd trece printr-o iteraie a
ciclului. Dac vectorul este prealocat, acest pas este eliminat si execuia este mai rapid.
CURS 3


13


Pentru lucrul cu matrici mari pe computere cu memorie limitat, prealocarea are un al doilea avantaj:
utilizarea memoriei mult mai eficient i lansarea programelor fr a depi memoria. Prealocarea ajut
inclusiv la reducerea fragmentrii memoriei; o memorie fragmentat n cursul sesiunii MATLAB poate
deveni insuficient ca spaiu continuu necesar memorrii variabilelor mari.

FUNCII MATEMATICE UZUALE UZUALE
1. APROXIMAREA NUMERELOR
Funciile MATLAB folosite pentru aproximarea numerelor sunt:
ceil returneaz un numr ntreg, rotunjit la cel mai apropiat ntreg spre plus infinit (+);
fix returneaz un numr ntreg, rotunjit la cel mai apropiat ntreg spre zero;
floor returneaz un numr ntreg, rotunjit la cel mai apropiat ntreg spre minus infinit (-);
round returneaz un numr ntreg, rotunjit la cel mai apropiat ntreg;
rem returneaz restul mpririi argumentelor;
rat returneaz aproximarea unui numr cu fracii raionale continue;
rats Returneaz aproximarea unui numr cu numere raionale;
sign returneaz semnul argumentului.
1.1. Aproximarea cu numere ntregi
Funciile MATLAB folosite pentru aproximarea cu numere ntregi sunt: fix, floor, ceil, round. Aceste
funcii opereaz asupra fiecrui element al unei matrice sau al unui vector i se apeleaz cu sintaxa:
nume_funcie(argument) unde:
- nume_funcie este numele uneia dintre funciile de mai sus, iar
- argument poate fi un scalar, un vector sau o matrice, ale cror elemente se doresc a fi rotunjite.
CURS 3


14


Dac elementele din argumentul funciei sunt numere complexe, funciile de mai sus opereaz
independent asupra fiecrei pri (real i imaginar).
Exemplul 10. S se rotunjeasc elementele vectorului: V=[0 2 2.3 4.7 -5.2 -7.8]
- la cel mai apropiat ntreg;
- la cel mai apropiat ntreg spre 0;
- la cel mai apropiat ntreg spre +;
- la cel mai apropiat ntreg spre -.
S se determine semnul elementelor vectorului V. Cu secvena de instruciuni:
V = [0 2 2.3 4,7 -5.2 -7.8 ] .; A =round (V); B = fix (V); C = ceil (V); D = floor(V); E = sign(V)
Exemplul 11. Acelai enun pentru o matrice cu elemente numere complexe [1,25+2,59i 7,3-5,3i; -
4,2+1,8i -2,6-1,4i]
1.2. Aproximarea cu numere raionale
Funcia MATLAB rats realizeaz aproximarea cu numere raionale; se apeleaz cu una dintre
sintaxele: y=rats(x) y=rats(x, 's')
Argumentul de intrare 's' determin afiarea rezultatului simbolic y ntr-o matrice ir.
Exemplul 12. S se aproximeze cu numere raionale, numerele: 1.25, 0.25, i 1.2596. Cu secvena:
X=[1.25 0.25 pi 1.2596]; Y=rats(X)
1.3. Aproximarea cu fracii continue
Funcia MATLAB rat aproximeaz un numr cu fracii continue; se apeleaz cu una dintre sintaxele:
y=rat(x) [a, b]=rat(x)
y=rat(x, tol) [a, b]=rat(x, tol)
CURS 3


15


unde:
x - este numrul care trebuie aproximat cu fracii continue;
tol - este tolerana care se accept ntre numrul x si numrul y (y-x<=tol); implicit, tol=10
-6
;
y - exprimarea lui x ca fracie continu;
a i b - numrtorul si numitorul fraciei care aproximeaz pe x cu tolerana tol.
Funcia rat aproximeaz fiecare element al vectorului x cu un numr de forma:
0
1
2
1
1
1
...
k
y d
d
d
d
= +
+
+ +

Exemplul 13. S se aproximeze cu fracii continue numerele: 0.25, 1.25, -2.25 si 1.343. Cu secvena
MATLAB rat([0.25 1.25 -2.25 1.343]) se obine rezultatul:
Exemplul 14. S se aproximeze prin fracii raionale numerele: 2.25, 3.5, 6.57, 10. Se nscriu aceste
numere ntr-un vector i se aplic funcia rat, ca n secvena de mai jos:
X = [2.25 3.5 6.57 10 ]; [A,B] =rat(X)
obinndu-se rezultatul:
X = [2.25 3.5 6.57 10] A = [9 7 657 10] B=[4 2 100 1]
1.4. Funcia rest
Funcia rem(X,Y) calculeaz restul mpririi lui X la Y, element cu element. Dac elementele
vectorului sau matricei sunt numere complexe, partea imaginar este ignorat. Argumentele X i Y
trebuie s fie matrice de aceeai dimensiune, sau unul dintre ele s fie scalar.
Exemplul 15. S se calculeze restul mpririi elementelor vectorului X la Y. Cu secvena de
instruciuni:
CURS 3


16


X = [l 3 -6]; Y = [2 3 4]; Z = rem(X,Y) se obine rezultatul:
Z = [1 0 -2]
Exemplul 16. S se determine restul mpririi unui vector la un scalar i al unui scalar la un vector. Cu
secvena MATLAB:
X= [2.5 6 -7]; Y=3;
Zl=rem(X,Y) Z2=rem(Y,X) se obin rezultatele:
Z1=[ 2.5000 0 -1.0000] Z2 = [ 0.5000 3.0000 3.0000]
1.5. Funcia semn
Funcia sign asociaz fiecrui element al vectorului X elementele -1, 0, 1, dup urmtoarea regul:
1, 0
sgn 0, 0
1, 0
daca x
x daca x
daca x
>

= =

<



1. DIVIZORI I MULTIPLI COMUNI
Pentru calculul divizorilor i al multiplilor comuni se folosesc funciile:
gcd calculeaz cel mai mare divizor comun a dou numere;
lcm calculeaz cel mai mic multiplu comun a dou numere.
1.1. Cel mai mare divizor comun
Funcia MATLAB gcd calculeaz cel mai mare divizor comun a dou numere ntregi; se apeleaz cu
sintaxa:
a=gcd(x,y)
CURS 3


17


Exemplul 1. S se determine cel mai mare divizor comun al numerelor 30 i 21. Cu secvena:
a=gcd(30,21) rezult: a=3
1.2. Cel mai mic multiplu comun
Funcia MATLAB lcm returneaz cel mai. mic multiplu comun a dou numere ntregi. Se apeleaz cu
sintaxa:
a=lcm(x,y)
Exemplul 2. S se determine cel mai mic multiplu comun al numerelor: 9 i 30.

2. NUMERE COMPLEXE
Operaiile cu numere complexe folosesc funciile:
abs Calculeaz valoarea absolut (modulul) a argumentului;
angle Calculeaz faza (unghiul) argumentului;
unwrap Calculeaz prile real i imaginar ale numerelor complexe exprimate n forma polar
conj Calculeaz conjugata complex a argumentului;
imag Extrage partea imaginar a argumentului;
real Extrage partea real a argumentului.
2.1. Definirea numerelor complexe n MATLAB
Numerele complexe sunt permise n toate operaiile i funciile din MATLAB. Acestea sunt introduse
utiliznd variabilele speciale i si j, ca n exemplele: 2 3 z i = + sau 2 3 z j = + . Pentru a defini matricea:
2 3 1
2
i
M
i i
+ (
=
(



CURS 3


18


exist dou metode:
- ca sum a dou matrice cu elemente numere reale, una reprezentnd partea real iar cealalt partea
imaginar;
M=[2 1; 0 2] +[3 0;-1 -1]*i
- ca o matrice cu elemente numere complexe.
M=[2+3*i 1; -i 2-i]
Prin al doilea procedeu trebuie evitat orice spaiu liber (blanc) ntre prile real si imaginar ale
aceluiai numr complex; astfel:
a=[2+3*i]
b=[2 +3*i] returneaz:
a=[2.0000+3.0000i]
b=[2.0000 0+3.0000i], notaia b reprezentnd dou numere separate.
Dac variabilele i sau j au fost deja utilizate n alte scopuri, pentru calculul cu numere complexe poate
fi declarat o nou unitate imaginar, n modul urmtor: i1=sqrt(-1)
2.2. Modulul i argumentul numerelor complexe
Un numr complex z se exprim sub una dintre formele:
- cartezian: z=x+iy
- polar: z=re
i
unde x i y sunt prile real i imaginar ale numrului complex z, iar r i sunt modulul i
argumentul numrului complex z.
Funcia abs determin modulul elementelor unui vector sau unei matrice; se apeleaz cu sintaxa:
CURS 3


19


r=abs(z)
Funcia angle calculeaz argumentul elementelor unui vector sau unei matrice, n radiani; se apeleaz
cu sintaxa:
fi=angle(z)
Funcia unwrap permite calculul prilor reale, cu sintaxa: x=unwrap(z) sau x=unwrap(real(y))
respectiv a prii imaginare, cu sintaxa: y= unwrap(imag(z)) Argumentul numrului complex trebuie s
fie exprimat n radiani.
Exemplul 3. S se scrie numrul complex z=1+i sub forma polar. Cu instruciunile:
x=l; y=l; z=x+i*y; r=abs(z); fi=angle(z) se obine rezultatul: r= 1.4142; fi=0.7854
Exemplul 4. S se scrie numrul complex z=4e
i / 4
sub forma cartezian. Cu instruciunile: r=sqrt(4);
fi=pi/4; z=r.*exp(i*fi).
Exemplul 5. Fie dat matricea cu numerele complexe exprimate sub forma polar:
4 4
2 2
2
1
i i
i i
e e
M
e e e

(
(
=
(
(


S se determine proieciile acestor numere pe axele real i imaginar, aplicnd funcia unwrap
2.3. Prile real i imaginar i conjugatul numerelor complexe
Partea real a unui numr complex poate fi determinat cu funcia real; se apeleaz cu sintaxa:
x=real(z)
iar partea imaginar poate fi determinat cu funcia imag ; se apeleaz cu sintaxa: y=imag(z)
Conjugatul z al unui numr complex se poate determina cu funcia conj; se apeleaz cu sintaxa:
conjugata=conj(z)
Exemplul 6. Fie dat matricea
CURS 3


20


4
1 2
4
i
i
M
i e

+ (
(
=
(


. S se determine partea real, imaginar i conjugatul elementelor acesteia.
3. FUNCIILE PUTERE, RADICAL, LOGARITM I EXPONENIAL
Funciile MATLAB pentru ridicarea la putere, extragerea radicalului, calculul logaritmului i al
exponenialei, sunt:
^ Ridic un numr a la puterea n (a
n
);
exp Calculeaz exponeniala (e
x
);
log Calculeaz logaritmul natural (ln);
log2 Calculeaz logaritmul n baza 2 (log
2
);
log10 Calculeaz logaritmul zecimal (log
10
);
nextpow2 Determin puterea N a numrului 2 care majoreaz modulul argumentului P
( 2
N
P );
pow2 Calculeaz valoarea numrului 2 la puterea n (2
n
);
sqrt Calculeaz radicalul de ordinul doi dintr-un numr.
Dac argumentul acestor funcii elementare sunt matrice, ele opereaz element cu element.
Argumentele funciilor pot fi i numere complexe.
3.1. Funcia putere
MATLAB-ul dispune de dou funcii pentru ridicarea la putere:
pow2 - pentru a ridica 2 la puterea n (2"),
^ - pentru a ridica un numr a la puterea n (x=a
n
). Se apeleaz cu sintaxele:
y=pow2(x) - calculeaz numrul y=2
x
. Dac x este o matrice, y va fi o matrice de aceleai
CURS 3


21


dimensiuni cu elementele calculate dup aceast regul, funcia acionnd element cu element
y=pow2(m,n) - calculeaz numrul y=m*2";
x=a^n - calculeaz puterea n a numrului a, x=a". Exponentul n poate avea orice valoare,
real sau complex. Pentru calculul radicalului de ordinul n dintr-un numr a, se utilizeaz funcia
putere sub forma: x=a
1/n
. Funcia nextpow2 avnd ca argument scalarul P, se apeleaz cu sintaxa:
N=nextpow2(P) i returneaz cei mai mic numr natural N astfel nct 2
N
P . Dac P este vector,
funcia returneaz scalarul N, astfel nct 2
N
majoreaz numrul de elemente ale vectorului.
Exemplul 7. S se calculeze: A = [2
3
2
5
2
13.5
].
Exemplul 8. S se efectueze aceleai calcule ca la punctul anterior, utiliznd operatorul de ridicare la
putere A. Cu secvena: A=[2^3 2^5 2^13.5] se obin aceleai rezultate.
Exemplul 9. S se calculeze:
3
125 x = .
Exemplul 10. S se determine puterile N ale lui 2 care majoreaz elementele vectorului A=[4 -8 17].
S se calculeze vectorul majorant P=2
N
.
3.2. Funcia radical
Calculul radicalului de ordinul 2 dintr-un numr, x a = , poate utiliza funcia putere, sau funcia sqrt,
apelat cu sintaxa: x=sqrt(a)
Argumentul a poate fi orice numr real sau complex. Dac numrul a este negativ sau complex,
rezultatul calculului este un numr complex.
Exemplul 11. S se calculeze radicalul fiecrui element al matricei: X =[1 2;4 -9]
3.3. Funcia logaritm
Calculul logaritmului natural al logaritmului n baza 2 sau al logaritmului n baza 10 al unui numr a
utilizeaz funciile log, log2 i respectiv log10, apelate cu sintaxele:
x=log(a) x=log2(a) x=log10(a)
CURS 3


22


Dac argumentul funciilor log i log10 este un numr negativ, sau complex, z=x+iy, rezultatul este
calculat cu relaiile:
log(z) = log(abs(z)) + i*atan2(y,x) i log10(z) = log10(abs(z)) + i*atan2(y,x) unde atan2 este funcia
MATLAB ce calculeaz arctangenta numrului complex.
Exemplul 12. S se calculeze logaritmul natural i zecimal din numerele e
2
i 100.
Exemplul 13. S se calculeze logaritmul n baz 2 al elementelor matricei: A = [4 2
3
8
2
10].
3.4. Funcia exponenial
Calculul exponenialei: x=e
a
, (unde e= 2.71828182845...) folosete funcia exp, apelat cu sintaxa:
x=exp(a)
Dac argumentul este numrul complex z=x+iy, rezultatul este calculat cu relaia:
e
z
= e
x
(cos(y) +i*sin(y))
Exemplul 14. S se calculeze: e , e
2
i e
-3
. Cu secvena:

4. FUNCIILE TRIGONOMETRICE
Funciile trigonometrice se apeleaz cu sintaxa:
x=nume_funcie(argument) unde:
- nume_funcie este numele uneia dintre funciile trigonometrice de mai jos;
- argument este valoarea pentru care se evalueaz funcia;
- x este variabila n care se returneaz rezultatul.
Dac argumentul este o matrice, funciile trigonometrice opereaz asupra fiecrui element.
4.1. Funciile trigonometrice directe
CURS 3


23


Funciile trigonometrice directe n MATLAB sunt:
sin Calculeaz sinusul argumentului;
cos Calculeaz cosinusul argumentului;
tan Calculeaz tangenta argumentului;
cot Calculeaz cotangenta argumentului;
sec Calculeaz secanta argumentului;
cosec Calculeaz cosecanta argumentului.
Pentru argumente numere complexe, z=x+iy, relaiile de calcul sunt: sin(z)=sin(x)cosh(y)+i*
cos(x)sinh(y); cos(z) = cos(x)cosh(y) i*sin(x)sinh(y); tan(z) = sin(z)/cos(z)
Exemplul 15. S se calculeze funciile trigonometrice directe ale elementelor
vectorului: [ ] / 4 3 / 4 5 / 4
4.2. Funciile trigonometrice inverse
Funciile trigonometrice inverse n MATLAB sunt:
asin Calculeaz arcsinusul argumentului;
acos Calculeaz arccosinusul argumentului;
atan Calculeaz arctangenta argumentului;
atan2 Calculeaz arctangenta unui argument complex;
acot Calculeaz arccotangenta argumentului;
asec Calculeaz arcsecanta argumentului;
acsc Calculeaz arccosecanta argumentului.
CURS 3


24


Exemplul 16. S se calculeze funciile trigonometrice inverse pentru elementele vectorului: X = [0 l
2 / 2 ]
4.3. Funciiie hiperbolice
Funciile hiperbolice se apeleaz cu sintaxa: x=nume_funcie(argument), unde:
- nume_funcie este numele uneia dintre funciile hiperbolice de mai jos;
- argument este valoarea pentru care se evalueaz funcia;
- x este variabila n care se returneaz rezultatul.
Dac argumentul este o matrice, funciile trigonometrice opereaz asupra fiecrui element.
4.3.1. Funciiie hiperbolice directe
Funciile hiperbolice directe n MATLAB sunt:
sinh Calculeaz sinusul hiperbolic al argumentului.
cosh Calculeaz cosinusul hiperbolic al argumentului.
tanh Calculeaz tangenta hiperbolic a argumentului.
coth Calculeaz cotangenta hiperbolic a argumentului.
sech Calculeaz secanta hiperbolic a argumentului.
csch Calculeaz cosecanta hiperbolic a argumentului.
4.3.2. Funciiie hiperbolice inverse
Funciile hiperbolice inverse n MATLAB sunt
asinh Calculeaz arcsinusul hiperbolic al argumentului;
acosh Calculeaz arccosinusul hiperbolic al argumentului;
CURS 3


25


atanh Calculeaz arctangenta hiperbolic a argumentului;
acoth Calculeaz arccotangenta hiperbolic a argumentului;
asech Calculeaz arcsecanta hiperbolic a argumentului;
acsch Calculeaz arccosecanta hiperbolic a argumentului.


Teme:
1) Se vor rula toate instruciunile i exemplele din cadrul cursului.
2) Fie matricea:
3
3
1 2 ln8
2 34
9 3 8
A e

(
=
(
(



Sa se scrie un program Matlab care realizeaza:
a) introducerea matricei A;
b) calculul matricei
22 23
32 33
a a
B
a a
(
=
(


c) calculul determinantului matricei B.

3) S se realizeze un program Matlab care calculeaz suma elementelor pare ale vectorului:
a=[1 2 4 6 7 9 10 11]
4) S se realizeze un program Matlab care calculeaz suma elementelor impare ale vectorului:
a=[1 2 4 6 7 9 10 11]

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