Documente Academic
Documente Profesional
Documente Cultură
Curs 3 PDF
Curs 3 PDF
CURS 3
else
elseif
for
while
break
return
error
end
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
Operatorii relaionali
Semnificaia
<
mai mic
<=
>
mai mare
>=
==
identic
~=
diferit
CURS 3
2 i 0 1 + i
2 i 2 1 5i
S se realizeze comparaiile:
C=
D=
1 1 1
1 0 1
1 1 0
1 0 0
Pentru combinarea a dou sau mai multe expresii logice se utilizeaz operatorii logici din tabelul 2.
Tabelul 2.
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
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
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 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 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
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
dintre
primele
trei
nu
este
adevrat,
se
va
executa
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
CURS 3
pas
final
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
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.
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
rem
rat
rats
sign
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]
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)
[a, b]=rat(x)
y=rat(x, tol)
CURS 3
unde:
x
tol
- este tolerana care se accept ntre numrul x si numrul y (y-x<=tol); implicit, tol=10-6;
a i b
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]
CURS 3
X = [l
3 -6]; Y = [2
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
-7]; Y=3;
1,
sgn x = 0,
1,
daca x > 0
daca x = 0
daca x < 0
lcm
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:
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
angle
unwrap
Calculeaz prile real i imaginar ale numerelor complexe exprimate n forma polar
conj
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
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:
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
exp
log
log2
log10
nextpow2
pow2
sqrt
Dac argumentul acestor funcii elementare sunt matrice, ele opereaz element cu element.
Argumentele funciilor pot fi i numere complexe.
pow2
y=pow2(x)
CURS 3
dimensiuni cu elementele calculate dup aceast regul, funcia acionnd element cu element
y=pow2(m,n)
x=a^n
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.
25
213.5].
2^5
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.
23
82
10].
argumentul
este
numrul
complex
z=x+iy,
rezultatul
este
calculat
ez = ex (cos(y) +i*sin(y))
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.
cu
relaia:
CURS 3
sin
cos
tan
Exemplul
15.
vectorului: [ / 4
se
calculeze
funciile
trigonometrice
3 / 4 5 / 4]
asin
acos
atan
atan2
acot
asec
acsc
directe
ale
elementelor
CURS 3
2 /2]
4.3. Funciiie hiperbolice
cosh
tanh
coth
sech
csch
acosh
CURS 3
atanh
acoth
asech
acsch
Teme:
A= 2
9
2 ln 8
e 3 34
3 3 8
a
B = 22
a32
a23
a33
25