Documente Academic
Documente Profesional
Documente Cultură
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:
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
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.
• 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 == 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.
• 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.
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 :
Exemplu:
for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1);
end
end
Exerciții propuse
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 :
2𝑥 + 8, 𝑥≤0
𝑓 𝑥 =
3𝑥 8 , 𝑥>0
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]
9. Să se calculeze suma elementelor vectorului x, până când întâlnește un număr mai mare ca 10
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