Sunteți pe pagina 1din 11

LUCRAREA 9

Operatori rela ionali i logici.

Operatorii rela ionali i logici sunt utiliza i la crearea expresiilor


logice necesare fluxului unui program scris în MATLAB. O
caracteristic comun a acestor operatori este tipul de date de intrare i de
ie ire.. Astfel ca date de intrare sunt acceptate doar datele numerice i
sunt interpretate astfel: orice num r diferit de 0 este interpretat drept
valoarea logic „adev rat” (A), iar valoarea 0 drept valoarea logic ‚fals’
(F). Datele de ie ire nu pot fi decât numerele 1 sau 0, interpretate ca fiind
valorile logice A, respectiv F.
În MATLAB sunt defini i 6 operatori rela ionali:

Operator rela ional Semnifica ie


< Mai mic
<= Mai mic sau egal
> Mai mare
>= Mai mare sau egal
== egal
~= diferit

Operatorii rela ionali pot fi folosi i pentru a compara:


a) Dou matrici de aceia i dimensiune. În acest caz rezultatul este
tot o matrice de aceia i dimensiune cu matricile de comparat.
Compararea se face element cu element. Dac elementele
corespunz toare verific aceast condi ie atunci î matricea
rezultat elementul corespunz tor va fi 1. Dac aceast condi ie nu
este verificat atunci elementul corespunz tor va fi 0.
b) O matrice cu un scalar. În acest caz rezultatul este tot o matrice
de dimensiunea matricii de comparat, iar compararea se face prin
compararea fiec rui element al matricii cu scalarul dat.
Vom considera matricile A i B definite prin:

>> A=[1 0 -2 10 0;-5 30 -10 0 1;2 0 1 1 1;-1 3 2 0 0]

1
A=
1 0 -2 10 0
-5 30 -10 0 1
2 0 1 1 1
-1 3 2 0 0

>> B=2*A
B=
2 0 -4 20 0
-10 60 -20 0 2
4 0 2 2 2
-2 6 4 0 0

Vom determina elementele pozitive ale lui A i elementele lui A egale cu


elementele lui B astfel:

>> A>0
ans =

1 0 0 1 0
0 1 0 0 1
1 0 1 1 1
0 1 1 0 0

>> A==B
ans =

0 1 0 0 1
0 0 0 1 0
0 1 0 0 0
0 0 0 1 1

In ambele matrici ce au rezultat pe pozi iile elementelor cu valoarea 1


sunt elemente ce verific aceste condi ii.
În lucrarea 2 am precizat faptul c indicii de accesare a unui
element dintr-o matrice pot fi nu numai scalari ci i vectori i chiar
matrici. Cum rezultatul unei compara ii cu operatorii rela ionali este o
matrice rezult c putem utiliza în principiu o compara ie pentru a accesa
elementele unei matrici. Acest tip de accesare se nume te indexare
logic . Rezultatul este un vector cu acele elemente ale matricii ce verific

2
aceast condi ie. De exemplu dac dorim s ob inem elementele lui A
mai mari ca 5 vom scrie:
>> A(A>5)

ans =

30
10
Doar dou elemente ale lui A sunt mai mari ca 5: 30 i 10.
Observa ie. Exist mai multe posibilit i pentru a accesa toate
elementele lui A. Prima ar fi s utiliz m o matrice cu toate elementele 1,
adic o condi ie adev rat pentru fiecare element, drept indice. De
exemplu s d m comanda A(A==A). Alta ar fi s utiliz m operatorul :
(revezi lucrarea 2)., A(:). Recomand m a doua metod ca fiind mai scurt
i mai rapid .
Operatorii logici constituie o cale de a defini expresii logice( cu
ajutorul operatorilor rela ionali) . Exist trei operatori logici:

Operatori logici Semnifica ie


& i (and)
| Ori (or)
~ Nu (not)

Mai exist un operator logic definit ca o func ie: xor(A,B)- sau


exclusiv-. Prezent m acum tabelul de defini ie al operatorilor logici ( 1
reprezint adev rat (A), iar zero reprezint valoarea logic fals (F)).:

A B A&B A|B ~A xor(A,B)


0 0 0 0 1 0
1 0 0 1 0 1
0 1 0 1 1 1
1 1 1 1 0 0

Putem acum construi exemple mai complexe de determinare a unor


elemente a le unor matrici. Astfel ca s determin m elementele lui A
(matricea din exemplul de mai sus) din intervalul (1,20) trebuie s d m
comanda A((A>1)&(A<20)) Si ob inem elementele 2, 3, 2, 10. Apari ia
elementelor este în ordinea coloanelor matricii A. Pentru ob inerea
elementelor ce sunt în afara acestui interval avem dou posibilit i: fie
utiliz m expresia logic de mai sus i ad ug m în fa a ei operatorul ~

3
adic d m comanda A(~((A>1)&(A<20))) , fie utiliz m operatorul | i
d m comanda A((A<=1)|(A>=20)).
Exist mai multe func ii numite func ii rela ionale i logice. Ele
au caracteristic faptul c au ca r spuns numai numerele 0 (A) sau 1
(F).Le vom prezenta pe scurt pe fiecare,
any(v) R spunde cu 1 dac vectorul v are cel pu in un element nenul
i cu 0 dac toate elementele sunt 0.
all(v) R spunde cu 1 dac toate elementele lui v sunt nenule i cu 0
dac exist cel pu in un element nul.
Fiind cele mai utilizate func ii pentru clarificare prezent m un exemplu.
Fie vectorii [0 1 2], [1 2 3] i [0 0 0]. Atunci:

vector v any(v) all(v)


[0 1 2] 1 0
[1 2 3] 1 1
[0 0 0] 0 0

fiind(x) R spunde cu un vector con inând indicii elementelor nenule


ale lui x.
isnan(x) R spunde cu un vector de aceia i dimensiune cu x ale c rui
elemente sunt 1 sau 0 dup cum elementul corespunz tor al lui x este
NaN sau nu.
isfinite(x) R spunde cu un vector de aceia i dimensiune ca x ale c rui
elemente sunt 1 sau 0 dup cum elementul corespunz tor al lui x este
finit sau nu. NaN este considerat nefinit.
>> v=[1 NaN inf -inf]
v=
1 NaN Inf -Inf

>> isfinite(v)
ans =
1 0 0 0

4
APLICA II

1. Fie vectorii x = [1 5 2 8 9 0 1] i y = [5 2 2 6 0 0 2]. Executa i i


explica i rezultatele urm toarelor comenzi:

a) x > y
b) y < x
c) x == y
d) x <= y
e) y >= x
f) x | y
g) x & y
h) x & (~y)
i) (x > y) | (y < x)
j) (x > y) & (y < x)

2.Fie vectorii x = 1:10 i y = [3 1 5 6 8 2 9 4 7 0]. Execut i


interpreteaz urm toarele comenzi de indexare logic :

a) x((x > 3) & (x < 8))


b) x(x > 5)
c) y(x <= 4)
d) x( (x < 2) | (x >= 8) )
e) y( (x < 2) | (x >= 8) )
f) x(y < 0)

3. Fie x=[3 15 9 12 -1 0 -12 9 6 1]. Determina i comanda care:

a) define te vectorul a ob inut din x prin schimbarea elementelor pozitive


cu 0;
b) define te vectorul b ob inut din x prin schimbarea elementelor ce se
divid cu 3, cu valoarea 1;
c) define te vectorul c ob inut din x prin schimbarea elementelor pare cu
valoarea lor multiplicat cu 5;
d) define te vectorul d ce va con ine doar acele elemente ale lui x ce sunt
mai mari ca 10;
e) define te vectorul e ob inut din x prin schimbarea elementelor ce sunt
mai mici ca media elementelor lui x, cu 0;

5
f) define te vectorul f ob inut din x prin schimbarea elementelor ce sunt
mai mari decât media elementelor lui x cu diferen a dintre valoarea lor i
medie.

4. a) Crea i vectorul x=randperm(35) (func ia randperm(n) genereaz o


permutare aleatoare a numerelor naturale de la 1 la 35). Evalua i func ia:

2 daca x < 6
y ( x) = x − 4 daca 6 <= x <= 20
36 − x daca 20 <= x <= 35
utilizând indexarea logic . Verifica i r spunsul desenând graficul lui
y(x).
b) Desena i graficul func iei de semnal sinusoidal discontinuu :

sin(t ) daca sin(t ) > 0


x (t ) = pentru t=1,…,10s,
0 daca sin(t ) ≤ 0
utilizând indexarea logic .

5. Problema evit rii opera iilor neconvenabile. În unele situa ii avem un


vector cu unele elemente0.Dac cu acest vector facem diverse calcule
putem ajunge ca s efectu m opera ii interzise ca de exemplu împ r iri cu
0. De exemplu:

>> x=[7 3 0 5 -2 0 -1 0 pi]


x=
7.0000 3.0000 0 5.0000 -2.0000 0 -1.0000 0 3.1416
>>y= sin(x)./x
Warning: Divide by zero.
y=
0.0939 0.0470 NaN -0.1918 0.4546 NaN 0.8415 NaN 0.0000

Se observ faptul c unde am avut elemente 0 la rezultat avem NaN fapt


ce va conduce la rezultate eronate dac , de exemplu, vom dori s
calcul m suma elementelor vectorului y. Cum ie im din aceast situa ie?

6. O problem de balistic . În l imea i viteza unui proiectil lansat cu


viteza ini ial v0 i cu un unghi θ sunt date de:
1
h ( t ) = v0t sin θ − gt 2
2

6
v ( t ) = v02 − 2v0 gt sin θ + g 2t 2
Unde g este accelera ia gravita ional . Proiectilul va atinge solul când
h(t)=0 , ceea ce conduce la timpul de revenire t g = 2 ( v0 / g ) sin θ (se
egaleaz cu 0 prima ecua ie). Pentru θ = 40o , v0=20 m/s, i g=9.81 m/s2 ,
determina i timpul când în l imea h nu este mai mic de 6m iar viteza
este simultan cel mult 16 m/s.

Indica ii

3.
>> x = [3 15 9 12 -1 0 -12 9 6 1]
x=
3 15 9 12 -1 0 -12 9 6 1
a)>> a=x;a(x>0)=0
b)Se va utiliza func ia rem(x,n), x un vector de numere întregi, iar n un
num r natural. Func ia ne d un vector în care elementele sunt restul
împ r irii fiec rui element al lui x la n. În situa ia noastr rem(x,3) ne va
da resturile împ r irii la 3. Dar pe noi ne intereseaz ca în acest vector pe
pozi ia în care este 0, adic elementul se împarte exact la 3, s avem
valoarea 1( adic adev rat) i 0 în rest (adic fals, nu se împarte exact la
3),\.Acest lucru se ob ine pur i simplu aplicând operatorul ~ (not) la
func ie. Deci
>> b=x;b(~rem(x,3))=5
c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))
d) >> d=x(x>10)
e)media elementelor unui vector este dat de func ia mean(x). Deci
>> e=x;e(x<mean(x))=0
f) >> f=x;f(x>mean(x))=f(x>mean(x))-mean(x)

4. a) Mai întâi cre m vectorul x:


>> x=randperm(35)
Apoi vom crea vectorul y de aceia i dimensiune cu x. Dimensiunea lui x
este dat de size(x). x=randperm(35)om crea vectorul y numai cu cifra 1:
>> y=ones(size(x))
Acum putem calcula valorile reale ale lui y utilizând indexarea logic :
>> y(x<6)=2
>> y((x >= 6) & (x < 20))=x((x >= 6) & (x < 20))-4
>> y((x >= 20) & (x <= 35))=36-x((x >= 20) & (x <= 35))
Acum putem trasa graficul lui y în func ie de x cu comanda:

7
>> plot(x,y,'or'
)
b) Mai întâi definim timpul t:
>>t=0:0.1:10;
Apoi definim func ia x(t):
>> x=sin(t);
Punem valoarea 0 în locul valorilor negative ale lui x:
>> x=x.*(x>0);
Facem graficul i punem etichetele:
>> plot(t,x)
>> axis([0 10 -0.1 1.1])
>> xlabel('Timpul [s]' )
>> ylabel('Amplitudinea' )
>> title('
Semnal sinusoidal discontinuu')

5. Definim x ca în problem :
>> x=[7 3 0 5 -2 0 -1 0 pi]
Ideea este c vom utiliza în locul valorii 0 cea mai mic valoare relativ
pozitiv pe care calculatorul o poate reprezenta. Aceasta este:
eps= 2−52 ≈ 2.2204e-016
Comanda de înlocuire este:
>> x=x+(x==0)*eps
Acum putem calcula:
>> sin(x)./x

6. Definim datele ini iale:


>> v0=20;g=9.81;theta=40*pi/180;
Calcul m acum timpul de revenire al proiectilului tg, ceea ce ne d i
intervalul de defini ie al timpului unde problema are sens:
>> tg=2*v0*sin(theta)/g
Definim acum intervalul de timp i calcul m vitezele i în l imile pe
acest interval:
>> t=0:0.01:tg;
>> v=sqrt(v0^2-2*v0*g*sin(theta)*t+g^2*t.^2);
>> h=v0*t*sin(theta)-0.5*g*t.^2;
Determin m acum când în l imea nu este mai mic decât 6m i viteza nu
este mai mare decât 16 m/s :
>> u=find(h>6&v<16)
In vectorul u se afl rangurile elementelor din v i h ce verific aceast
condi ie. Evident rangurile corespunz toare din t ne dau timpii în care
condi iile sunt îndeplinite . Ace ti timpi apar in unui interval dat de

8
primul rang i ultimul rang din u. Determin m capetele acestui interval
astfel:
>> t1=t(u(1))
>> t2=t(u(end))
Solu ia problemei este intervalul [t1,t2]

Solu ii

1.
a) >> x > y
ans =
0 1 0 1 1 0 0
Vectorul rezultat are 1 pe pozi ia în care elementul lui x este mai mare
decât elementul lui y i 0 unde elementul lui x este mai mic sau egal cu
elementul corespunz tor al lui y.
Analog pentru restul comenzilor.

2.
a) >> x((x > 3) & (x < 8))
ans =

4 5 6 7
Analog pentru restul comenzilor.

3.

a) a =
0 0 0 0 -1 0 -12 0 0 0
b) b =
5 5 5 5 -1 5 5 5 5 1
c) c =
3 15 9 60 -1 0 -60 9 30 1
d) d =
15 12
e) e =
0 15 9 12 0 0 0 9 6 0
f) f =
3.0000,10.8000,4.8000,7.8000,-1.0000,0,-12.0000,4.8000,1.8000, 1.0000

4. a) x =

9
Columns 1 through 15
24 31 8 21 25 15 27 30 26 2 29 22 16 19 10
Columns 16 through 30
33 7 35 4 28 3 11 14 32 6 12 23 9 5 20
Columns 31 through 35
18 13 34 17 1

y=
Columns 1 through 15
12 5 4 15 11 11 9 6 10 2 7 14 12 15 6
Columns 16 through 30
3 3 1 2 8 2 7 10 4 2 8 13 5 2 16
Columns 31 through 35
14 9 2 13 2

10
b)

5. x =
7.0000 3.0000 0.0000 5.0000 -2.0000 0.0000 -1.0000
0.0000 3.1416
>> sin(x)./x
ans =
0.0939 0.0470 1.0000 -0.1918 0.4546 1.0000 0.8415
1.0000 0.0000

6. [0.85, 1.78]

11

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