Sunteți pe pagina 1din 7

LABORATOR

Programarea în MATLAB
1.1. Fișiere MATLAB
Fișierele care conțin cod MATLAB sunt numite M-files sau fișiere .m . După cum s-a precizat în capitolul
de Fundamente ale programării în MATLAB, aceste fișiere pot fi funcții (functions) care acceptă
argumente de intrare și furnizează ieșiri, sau pot fi fișiere script care execută o serie de instrucțiuni
MATLAB. Pentru ca MATLAB-ul să recunoască un fișier ca fișier M-file trebuie ca numele acestuia să se
termine cu extensia .m.

Fișierul .m poate fi creat cu un editor de text și apoi poate fi folosit ca orice funcție sau comandă
MATLAB:

1. Se creează un fișier cu editorul function c = myfile(a,b)


din cadrul Matlab și se salvează cu c = sqrt((a.^2)+(b.^2))
numele myfile.m

2. Se apelează fișierul myfile.m de >> a=7.2;


la linia de comandă a Matlab-lui >> b=3.23;
sau din alt fișier .m >> c=myfile(a,b);
>> c=
7.8913

Caracteristicile celor două tipuri de fișiere sunt prezentate în tabelul următor:

Fișiere Script Fișiere Function


Nu acceptă argumente de intrare și nu Acceptă argumente de intrare și returnează
returnează ieșiri. ieșiri.
Operează cu datele din workspace. Variabilele interne ale funcției sunt locale
(implicit).
Utile pentru automatizarea unei serii de Utile pentru extinderea limbajului
pași care trebuie executați de multe ori. MATLAB pentru diverse aplicații.

Script-uri

Fișierele script sunt cele mai simple fișiere MATLAB, nu au argumente de intrare sau de ieșire și sunt
utile pentru executarea secvențială a unor calcule care altfel ar trebui executate în mod repetat de la
linia de comandă. Script-urile operează cu datele din workspace sau pot crea date noi. Aceste date
sunt disponibile după terminarea execuției fișierului.

Părțile componente ale unui fișier de tip function

O funcție .m are următoarele pârți componente:

• Linia de definire a funcției


• Linia de prim help H1
• Textul Help-ului
• Corpul funcției
• Comentarii
Linia de definire
Această linie informează MATLAB-ul că fișierul conține o funcție și specifică argumentele. Exemplu:


Linia H1
Linia H1 este o linie de comentariu care începe cu semnul "%" și furnizează prima linie text atunci când
utilizatorul tastează help function_name la prompterul MATLAB.

Textul Help-ului
Se poate crea un help online prin introducerea uneia sau mai multor linii de comentariu după linia H1,
fiecare linie începând cu "%".

Corpul funcției
Corpul funcției conține toate instrucțiunile în cod MATLAB care permit efectuarea calculelor și
asignează valori argumentelor de ieșire. Declarațiile din corp pot conține apelări de funcții, instrucțiuni
de salt, intrări/ieșiri interactive, calcule etc.

Comentarii
O linie de comentariu începe după cum s-a precizat cu semnul "%" și poate fi plasată oriunde într-un
fișier. Pot fi adăugate linii albe oriunde în fișier, acestea fiind ignorate.

1.2. Operatori în MATLAB


Operatorii MATLAB pot fi clasificați în trei categorii:

• Operatori aritmetici
• Operatori relaționali care compară operanzii cantitativ
• Operatori logici

Operatori aritmetici
+ Adunare : Operatorul două puncte
- Scădere .^ Putere
.* Înmulţire .' Transpusa
./ Împărţire la dreapta ' Transpusa complex conjugată
.\ Împărţire la stânga * Înmulţire de matrici
+ Plus unar / Împărţire matriceală la dreapta
- Minus unar \ Împărţire matriceală la stânga
^ Putere de matrice
Cu excepția unor operatori matriceali, operatorii aritmetici lucrează cu elementele corespondente ale
unor tablouri de dimensiuni egale. Pentru vectori și tablouri dreptunghiulare ambii operanzi trebuie să
aibă aceeași dimensiune, cu excepția situației în care unul dintre ei este scalar. În acest caz MATLAB
aplică scalarul fiecărui element al celuilalt operand (proprietatea de expansiune scalară).

Operatori relaționali
< Mai mic
<= Mai mic sau egal
> Mai mare
>= Mai mare sau egal
== Egal cu
~= Diferit de
Operatorii relaționali compară elementele corespondente ale unor tablouri de dimensiune egală.
Operatorii relaționali lucrează totdeauna element cu element. Exemplu:

» A = [2 7 6;9 0 5;3 0.5 6];


» B = [8 7 0;3 2 5;4 -1 7];

» A == B
ans =
0 1 0
0 0 1
0 0 0

Operatori logici
& AND (ŞI)
| OR (SAU)
~ NOT (NU)
• O expresie care utilizează operatorul & este adevărată dacă ambii operanzi sunt adevărați. În
termeni numerici, expresia este adevărată dacă ambii operanzi sunt nenuli. Exemplu:

» u = [1 0 2 3 0 5];
» v = [5 6 1 0 0 7];
» u & v
ans =
1 0 1 0 0 1

• O expresie care utilizează operatorul | este adevărată dacă unul dintre operanzi este logic
adevărat sau dacă ambii operanzi sunt adevărați. În termeni numerici, expresia este falsă dacă
ambii operanzi sunt nuli. Exemplu:

» u | v
ans =
1 1 1 1 0 1

• O expresie care utilizează operatorul NOT, ~, neagă operandul. În termeni numerici, orice
operand nenul devine nul și orice operand nul devine unu. Exemplu:

» ~u
ans =
0 1 0 0 1 0
Operatorii logici lucrează cu elementele corespondente ale unor tablouri de dimensiuni egale. Pentru
vectori și tablouri dreptunghiulare ambii operanzi trebuie să aibă aceeași dimensiune, cu excepția
situației în care unul dintre ei este scalar. În acest caz, ca și la operatorii aritmetici, MATLAB-ul aplică
scalarul fiecărui element al celuilalt operand.

1.3. Instrucțiuni de control a execuției programelor MATLAB


Trebuie știut faptul că MATLAB nu este doar un program care execută numai pași secvențiali, operațiile
fiind realizate una după alta, ci pune la dispoziția utilizatorului și instrucțiuni repetitive a unui set de
instrucțiuni atâta timp cât o condiție este realizată sau a unui alt set de instrucțiuni dacă condiția nu
este realizată, sau repetarea unor instrucțiuni de un anumit număr de ori.

În MATLAB există mai multe tipuri de instrucțiuni de control al programelor, precum:

• if, împreună cu else și elseif execută un grup de instrucțiuni pe baza unei condiții
logice.
• switch, case și otherwise execută diverse grupuri de instrucțiuni în funcție de
valoarea unei anumite condiții logice.
• while execută un grup de instrucțiuni de un număr nedefinit de ori, pe baza unei condiții
logice.
• for execută un grup de instrucțiuni de un număr fixat de ori.
• break termină execuția pentru o buclă for sau while.
• try...catch schimbă controlul buclei dacă o eroare este detectată în timpul execuției.
• return provoacă întoarcerea la funcția care a apelat procedura.

Toate instrucțiunile de salt folosesc comanda end pentru a indica sfârșitul blocului respectiv.

Instrucțiunile condiționale if şi elseif sunt instrucțiuni folosite în luarea unei decizii sau pentru
luarea unor decizii multiple. Aceste instrucțiuni sunt condiționate de valoarea de adevăr a unei decizii.

Forma generală a instrucțiunii if este

if conditie
secventa instructiuni
end
unde:
• condiție = expresie logică ce se evaluează.
• secvența de instrucțiuni = secvența ce urmează a fi efectuată dacă condiția este adevărată.
Dacă condiția nu este adevărată atunci se execută comenzile de după end. Această
instrucțiune se poate asocia cu operatorii relaționali și logici pe care MATLAB-ul ii recunoaște.

Exemplu
if n < 0 % Dacă n este negativ afișează un mesaj de eroare.
disp('Intrarea trebuie sa fie pozitiva');
elseif rem(n,2)= =0 %Dacă n este pozitiv și par, împarte-l la 2.
A = n/2;
else
A = (n+1)/2; %Dacă n este pozitiv și impar incrementează și împarte la 2
end

O instrucțiune similară cu if-else atunci când avem secvențe imbricate complexe este instrucțiunea
switch-case.

switch expresie
case valoare 1
secventa 1 de comenzi
case valoare 2
secventa 2 de comenzi
..............................
otherwise valoare n
secventa n de comenzi

Instrucțiunea while. Această instrucțiune permite instrucțiuni atâta timp cât o condiție logică este
îndeplinită. Forma generala a instrucțiunii while este:

while conditie
instructiuni
end
unde : condiție este o condiție logică pe care instrucțiunea while o evaluează, iar instrucțiuni
reprezintă secvența de instrucțiuni ce se execută atâta timp cât condiția este îndeplinită În cazul
buclelor de tip while există posibilitatea ca pentru o condiție dată să se cicleze la infinit. Pentru a
evita acest lucru este bine să se introducă un număr maxim de iterații.

Exemplu: Să se determine primul număr întreg n, pentru care factorialul (n!) este un număr de 5 cifre:

n=1;
while prod(1:n)<1.e4
x=3 if x>5
x=x+1
else
n=n+1;
end
Dacă se dorește ieșirea forțată dintr-o buclă de tip for, while, sau din cor pul instr ucțiunii if, se
folosește instrucțiunea break. Această instrucțiune dă controlul la prima comandă de după end-ul
buclei.
Instrucțiunea repetitivă for. Această instrucțiune permite repetarea unui grup de instrucțiuni din
cadrul buclei, de un anumit număr de ori. O astfel de instrucțiune o putem numi si o structură iterativă
cu contor. Forma generală a unei bucle for este :

for variabila = start : pas : final


instructiuni
end
unde:

• variabila reprezintă variabila de contorizare a buclei;


• start reprezintă valoarea atribuită inițial variabilei de contorizare;
• pas reprezintă pasul de incrementare al variabilei de contorizare;
• final reprezintă valoarea finală atribuită variabilei de contorizare;
• instrucțiuni reprezintă o succesiune de una sau mai multe comenzi MATLAB;
• end marchează sfârșitul buclei for.

Exemplu:

for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1);
end
end

Exerciții propuse

1. În variabila lungime se află valoarea numerică a unei măsurători de lungime. Unitatea de


lungime cu care s-a făcut măsurătoarea poate fi: ‘ft’ pentru picior, ‘in’ pentru inci, ‘m’ pentru
metri si ‘mm’ pentru milimetru. Să se creeze o secvență switch-case care pune în
lungime_metri valoarea în metri ai măsurătorii.

inci-metru y = 0.0254*x

picior-metru y = 0.3048*x

milimetru-metru y = x/1000

2. Să se determine indicii (linie, coloană) ale elementului maxim și a celui minim dintr-o matrice.
3. Temperatura mediului ambiant și în același timp și temperatura unei sticle de răcoritoare este
de 30°. Dacă în interiorul unui frigider avem temperatura de 10°, în cât timp reusim să răcorim
lichidul din sticlă la 14°. Notăm cu 𝑇' temperatura din frigider și dacă considerăm că 𝑇( este
temperatura lichidului la momentul 𝑡( , atunci temperatura 𝑇(*+ la momentul 𝑡(*+ este dată de
relația :

𝑇(*+ = 𝑇( + 𝐾(𝑡(*+ − 𝑡( )(𝑇' − 𝑇( )

unde K este coeficientul de conducție al căldurii =0.05. Considerăm că unitățile de măsură a


timpului sunt minute 𝑡(*+ − 𝑡( = 1.
4. Se dă funcția

2𝑥 + 8, 𝑥≤0
𝑓 𝑥 =
3𝑥 8 , 𝑥>0

Să se creeze un fișier .m care modelează această funcție.

5. Să se calculeze media aritmetică a primelor 10 numere naturale.

6. Să se genereze o matrice A, cu n linii și n coloane, ale cărei elemente sunt definite de relația:

2, 𝑑𝑎𝑐ă 𝑖 = 𝑗
𝐴 = −1, 𝑑𝑎𝑐ă 𝑖 − 𝑗 = 1
0, î𝑛 𝑟𝑒𝑠𝑡

7. Să se calculeze valorile funcției f pentru toate valorile întregi pentru care este definită prin
relația:

2𝑥 + 3, 𝑥 ∈ [−10,2)
𝑓 𝑥 =
2𝑥 8 − 𝑎, 𝑥 ∈ [2,20]

8. Să se calculeze în MATLAB valorile funcției y definită de relația

sin (𝑡), 𝑎≤𝑡<𝑏 ∪ 𝑐≤𝑡≤𝑑


𝑦 𝑡 =
cos (5𝑡), 𝑏≤𝑡<𝑐

pentru a=-10, b=-4, c=4, d=10.

9. Să se calculeze suma elementelor vectorului x, până când întâlnește un număr mai mare ca 10

𝑥 = 8,3, −9, −10,11,9, −1

10. Să se scrie un fișier funcție, denumit „funcție1”, în care să se calculeze următoarea funcție:

𝑥 U + 𝑦 U , 𝑝𝑒𝑛𝑡𝑟𝑢 0 ≤ 𝑥 − 𝑦 ≤ 10
𝑓 𝑥 = 𝑥 + 𝑦 8 , 𝑝𝑒𝑛𝑡𝑟𝑢 𝑥 − 𝑦 < 0 ș𝑖 𝑦 ≥ 0
8

(𝑥 − 𝑦)8 , 𝑝𝑒𝑛𝑡𝑟𝑢 𝑐𝑒𝑙𝑒𝑙𝑎𝑙𝑡𝑒 𝑐𝑎𝑧𝑢𝑟𝑖.

Această funcție se va implementa în două moduri:

Folosind instrucțiunea if-else.


Folosind instrucțiunea if-elseif.

Să se calculeze următoarele valori: f(1,3), f(1,-3), f(-3,1), f(-4,-1).

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