Sunteți pe pagina 1din 12

Laborator 1 – INSTRUCȚIUNI ȘI FUNCȚII DE CONTROL

Cerințe disciplină:

- 2 ore de curs, 2 ore de laborator – săptămânal


- Examen – 4 credite
- Nota finală: 50% nota de laborator, 50% examen practic
- Prezență la laborator – minim 9 prezențe
- Nota de laborator se calculează ca media aritmetică a notelor obținute pentru temele de
laborator transmise

Operatori relaționali

a < b True if a is less than b

a <= b True if a is less than or equal to


b

a > b True if a is greater than or equal


to b

a >= b True if a is greater than or equal


to b

a == b True if a is equal to b

a ∼= b True if a is not equal to b

Operatori logici

and(a,b) a & b Logical AND

or(a,b) a | b Logical OR

not(a) ∼a NOT

xor(a,b) Logical exclusive OR

Tabela de adevăr a operatorilor logici:


Scrieți următoarele secvențe logice în MATLAB:

1. ((x>1) & (x<2)) | (x>=4), unde x = [1, 2, 0, 3]


a = and(x>1,x<2);
b = (x>=4);
c = or(a,b)

Instrucțiunea condițională IF simplă

if expresie_logica

instrucțiuni

end

Instrucțiunea condițională IF simplă

if expresie_logica_1

instrucțiuni_1

if expresie_logica_2

instructiuni_2

end

instructiuni_3

end

instructiuni_4

Clauza ELSE

if expresie_logica

instrucțiuni_1
else instrucțiuni_2

end

Clauza ELSEIF

if expresie_logica_1

instructiuni_1

elseif expresie_logica_2

instructiuni 2

elseif expresie_logica_3

instructiuni_3

end

Instrucțiunea repetitivă FOR

for i = 1:n

instructiuni

end

Executați în MATLAB și analizați următoarele secvențe de cod:

str = ‘ times seven is’

for j = 1:10

x=7*j

disp([int2str(j) str int2str1(x)])

end

for i = 1:20

disp([i factor(i)])

end

1
int2str – convertirea unui întreg în string
r = 1:3:19;

for ii = r

disp(ii)

end

fact = 1;

for i = 2:6

fact = fact * i;

end

Însumare de serii
𝑁

∑ 𝑖2
𝑖=1

N – trebuie introdus de la tastatură

În cazul în care N = 4, ne dorim să însumăm:


4

∑ 𝑖 2 = 1 + 4 + 9 + 16
𝑖=1

ceea ce în limbajul Matlab se traduce astfel:

N = input(‘Introduceti numarul de termini N: ’);

s = 0;

for i = 1:N

s = s + iˆ2;

end

disp([’Sum of the first ’ int2str(N) ...

’ squares is ’ int2str(s)])
Pentru a afla rezultatul 𝐼𝑁 , unde 𝐼𝑁 = ∑𝑁 2
𝑖=1 𝑓(𝑖), iar 𝑓(𝑖) = 𝑖 , vom proceda astfel:
1

𝐼1 = ∑ 𝑖 2 = 1
𝑖=1

𝐼2 = ∑ 𝑖 2 = 1 + 4
𝑖=1

𝐼3 = ∑ 𝑖 2 = 1 + 4 + 9
𝑖=1

𝐼4 = ∑ 𝑖 2 = 1 + 4 + 9 + 16
𝑖=1

Din calculul anterior, rezulta faptul că 𝐼2 = 𝐼1 + 22 , 𝐼3 = 𝐼2 + 23 , 𝐼4 = 𝐼3 + 24 . Dacă


generalizăm expresia, va rezulta:

𝐼𝑁 = 𝐼𝑁−1 + 𝑁 2

Dacă seria de mai sus se implementează în Matlab, devine:

maxN = input(Valoarea maxima a lui N: ’);

I(1) = 1ˆ2;

for N = 2:maxN

I(N) = I(N-1) + Nˆ2;

end

disp([’Values of I_N’])

disp([1:N; I])
𝑖𝜋
Pentru însumarea unei serii mai complexe, cum ar fi 𝐼𝑁 = ∑𝑁
𝑖=1 sin , vom proceda
4
astfel:

Creați scriptul f.m, care va returna coeficienții pe care dorim să-i însumăm. În cadrul
script-ului creat, scrieți codul:

function [value] = f(inp) – indica faptul că avem o funcție care așteaptă ca intrare o variabilă inp
și care va returna variabila value

value = inp * sin (inp * pi/4)


Tastați acum codul următor și evaluați rezultatul pentru N = 5:

maxN = input(‘N= ’);

I(1) = f(1);

for N=2:maxN

I(N) = I(N-1) + f(N);

end

disp([’Values of I_N’])

disp([1:N; I])

Sume de serii de tipul ∑𝑵 𝒑


𝒋=𝟏 𝒋 , 𝒑 ∈ ℕ

Pentru a calcula suma seriei 𝑆𝑁 = ∑𝑁 𝑝


𝑗=1 𝑗 folosind MATLAB, se introduce codul:

N = input(’Introduceti nr maxim de termeni’);

p = input(’Introduceti puterea’);

sums = 0;

for j = 1:N

sums = sums + jˆp;

end

disp([’Suma primelor’ int2str(N) ...

’ numere intregi ridicate la puterea ’ ...

int2str(p) ’ este ’ int2str(sums)])

Sume de serii infinite

Seria Taylor pentru o funcție f (x) despre un punct x = a este dat de



(𝑥 − 𝑎)𝑛 (𝑛)
𝑓(𝑥) = 𝑓(𝑎) + ∑ 𝑓 (𝑎).
𝑛!
𝑛=0

Putem folosi acest lucru pentru a aproxima sin x printr-o serie infinită în x astfel:
𝑁
𝑥 2𝑛+1
𝑛
sin 𝑥 = lim ∑(−1)
𝑁→∞ (2𝑛 + 1)!
𝑛=0

Deoarece folosim computerul pentru calcule, N nu poate fi infinit, deci consideram N =


10 și să evaluăm seria în punctele 0, 0.1, 0.2, 0.3, 0.4, 0.5, folosind codul:

v = 0.0:0.1:0.5 – vectorul v de la 0 la 0.5 cu pas de o zecime

sinx = zeros(size(v)); - crearea unui vector de zerouri de dimensiunea vectorului v

N = 10; range = 0:N; - N = 10 și vecrotul range cu valori de la 0 la N

ints = 2*range+1; - expresia matematică 2n + 1 pentru toate elementele vectorului range


și le introduce în ints.

for n = range - buclă repetitivă pentru n egal cu toate elementele vectorului range

sinx = sinx + (-1) ^ n*v.^ints(n+1)/(factorial(ints(n+1))); - evaluează subiectul


însumării ca funcție de n. (Observați compensarea necesară atunci când faceți referire la
elementele de ints, de exemplu ints (1) se referă la valoarea atunci când n = 0). De asemenea, se
utilizează .ˆ atunci când operează pe v, deoarece acesta este un vector.

end

sinx

Însumarea seriilor folosind comenzi MATLAB


10

∑ 𝑖2
𝑖=1

i = 1:10;

i_squared = i.ˆ2;

value = sum(i_squared)
𝑁
2
∏(1 + )
𝑛
𝑛=1

n = 1:10;

f = 1+(2)./n;
pr = prod(f)

Instrucțiuni repetitive în instrucțiuni repetitive

for i = 1 : 3

for j = 1 : 3

a(i, j) = i + j;

end

end

Instrucțiunea repetitive WHILE

while expresie

Instrucțiuni

end

Să se scrie un program, utilizând o bulcă while, care calculează suma elementelor


vectorului x = [5 2 -9 10 -1 9 -1], până când întâlnește un număr mai mare ca 8.

x = [ 5 2 -9 10 -1 9 -1];

sum = 0;

k = 1;

while (x(k) <= 8) & (k <= length(x))

sum = sum + x (k)

k = k+1

end

Instrucțiunea BREAK

Break

Exemplu:

x = 1;

while 1 == 1
x = x + 1;

if x > 10

break

end

end

SWITCH command

switch expresie

case expresie_1

Instrucțiuni

case {expresie_2, expresie_3}

Instrucțiuni

otherwise

Instrucțiuni

end

Exemplu:

Scrieți și evaluați următoarea secvență în Matlab:

msg = ‘introduceti primele 3 litere ale lunii: ’;

luna = input (msg, ‘s’); %‘s’ indică faptul că va primi un string ca input

luna = luna(1:3);

if lower(luna) == ‘feb’ % lower() converteste majusculele in minuscule

bisect = input (‘Este un an bisect (y/n): ’, ‘s’);

end

switch lower(luna)

case {‘sep’, ‘apr’, ‘jun’, ‘nov’}

days = 30;
case ‘feb’

switch lower(bisect)

case ‘y’

days = 29;

otherwise

days = 28;

end

otherwise

days = 31;

end

Instrucțiunea error

error (‘mesaj’)

Exemplu:

function test(x,y)

if nargin ~= 2

error(‚Numărul argumentelor de intrare greșit’)

end

Funcții de control logic

exist Verifica daca variabilele sau functiile argument sunt definite

any Testeaza daca cel putin un element al unei matrice verifica conditie logica

all Testeaza daca toate elementele unei matrice verifica o conditie logica

find Returneaza indicii elementelor diferite de zero

isnan Testeaza daca elementele unei matrice sunt NaN


isinf Testeaza daca elementele unei matrice sunt infinite
finite Testeaza daca elementele unei matrice sunt infinite
Exemplu:
X = [0 2 Nan -89 Inf Nan]

i = find(isnan(X));

X(i) = zeros(size(i))

X = [0/0 0/1 2 1/0]

ax = isnan(X)

bx = finite(X)

cx = isinf(X)

Temă de laborator

1. Calculați expresia: ((x>=4) & (x<9)) | (x>=4), unde x = [5, 4, 6, 7]

2. Implementați în MATLAB următoarele funcții:

2𝑥 + 8, 𝑑𝑎𝑐𝑎 𝑥 ≤ 2
𝑓(𝑥) = {
3𝑥 2 , 𝑑𝑎𝑐𝑎 𝑥 > 2
0, 𝑥<0
𝑥, 0≤𝑋≤1
𝑔(𝑥) = {
2 − 𝑥, 1<𝑥≤2
0, 𝑥>2

3. Calculați următoarele însumări de serii folosind MATLAB :


6

∑ 2𝑛
𝑛=1

∑ 𝑖3
𝑖=3

4. Calculați suma următoare pentru n =10:


∑ 𝑒 −𝑛
𝑛=0

5. Să se genereze o matrice Hilbert de ordinal n=4, ale cărei elemente sunt date de expresia:
1
𝐻(𝑖, 𝑗) =
𝑖+𝑗−1

6. Calculați valoarea 𝑥 2 pentru toate valorile întregi pozitive ale lui 𝑥, atâta timp cât 𝑥 3 <
2000.

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