Sunteți pe pagina 1din 25

CURS 3

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
1

CURS 3

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:
2

CURS 3

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


C ( i, j ) =
0 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:


X=
1 1 1
1 1 0
0 0 0

Observaie. Funcia ones(3,3) returneaz o matrice 3*3 cu toate elementele egale cu 1.


Exemplul 2. Fie matricele:
i 0
i
i
1
1
A=
B=

2 i 0 1 + i
2 i 2 1 5i
S se realizeze comparaiile:

C=A>=B i D=A= =B cu A i B definite mai sus, se obin rezultatele

C=

D=
1 1 1
1 0 1

1 1 0
1 0 0

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

NU

&

SAU

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
D ( i, j ) =
0

daca A ( i, j ) < B ( i, j ) & ( B ( i, j ) < C ( i, j ) )


in rest

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

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
5

CURS 3

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
6

CURS 3

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 x + 8 daca x 2
descrierea MATLAB este:
f ( x) = 2
daca x > 2
3 x

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;
7

CURS 3

- 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


grupul_de_instruciuni_D.

dintre

primele

trei

nu

este

adevrat,

se

va

executa

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,


8

CURS 3

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:
final initial
n=
+ 1 ori, dac n este pozitiv, i nu exist dac n este negativ. Prin [] s-a notat
pas

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
9

CURS 3

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

A = 1
0

daca i = j
daca i j = 1
in rest

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,
10

CURS 3

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

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

1
i + j 1

Secvena MATLAB:

n=4
for i=1:n,
for j=1:n,
H(i,j)=1/(i+j-1);
end
end
H
11

CURS 3

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

CURS 3

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

CURS 3

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)


14

CURS 3

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;

- 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:

y = d0 +
d1 +

1
d 2 + ... +

1
dk

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

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:
15

CURS 3

X = [l

3 -6]; Y = [2

Z = [1

4]; Z = rem(X,Y) se obine rezultatul:

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

-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,

sgn x = 0,
1,

daca x > 0
daca x = 0
daca x < 0

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

CURS 3

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: z = 2 + 3i sau z = 2 + 3 j . Pentru a defini matricea:
1
2 + 3i
M =
2 i
i
17

CURS 3

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=rei

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:
18

CURS 3

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=4ei / 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:

1
M =
e 2

ei 2

i 2
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
19

CURS 3

1 2 + i
M =
. S se determine partea real, imaginar i conjugatul elementelor acesteia.
i 4ei 4

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 (an);

exp

Calculeaz exponeniala (ex);

log

Calculeaz logaritmul natural (ln);

log2

Calculeaz logaritmul n baza 2 (log2);

log10

Calculeaz logaritmul zecimal (log10);

nextpow2

Determin puterea N a numrului 2 care majoreaz modulul argumentului P


( P 2 N );

pow2

Calculeaz valoarea numrului 2 la puterea n (2n);

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=an). Se apeleaz cu sintaxele:

y=pow2(x)

- calculeaz numrul y=2x. Dac x este o matrice, y va fi o matrice de aceleai


20

CURS 3

dimensiuni cu elementele calculate dup aceast regul, funcia acionnd element cu element
y=pow2(m,n)
x=a^n

- calculeaz numrul y=m*2";


- 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=a1/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 2N majoreaz numrul de elemente ale vectorului.

Exemplul 7. S se calculeze: A = [23

25

213.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: x = 3 125 .


Exemplul 10. S se determine puterile N ale lui 2 care majoreaz elementele vectorului A=[4 -8 17].
S se calculeze vectorul majorant P=2N.

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

CURS 3

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 e2 i 100.


Exemplul 13. S se calculeze logaritmul n baz 2 al elementelor matricei: A = [4

23

82

10].

3.4. Funcia exponenial


Calculul exponenialei: x=ea, (unde e= 2.71828182845...) folosete funcia exp, apelat cu sintaxa:
x=exp(a)
Dac

argumentul

este

numrul

complex

z=x+iy,

rezultatul

este

calculat

ez = ex (cos(y) +i*sin(y))

Exemplul 14. S se calculeze: e , e2 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


22

cu

relaia:

CURS 3

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.

vectorului: [ / 4

se

calculeze

funciile

trigonometrice

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.


23

directe

ale

elementelor

CURS 3

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;


24

CURS 3

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:

A= 2
9

2 ln 8

e 3 34
3 3 8

Sa se scrie un program Matlab care realizeaza:


a) introducerea matricei A;
b) calculul matricei

a
B = 22
a32

a23
a33

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]

25

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