Sunteți pe pagina 1din 12

DEPI

Introducere în GNU Octave / MATLAB

1. Noțiuni teoretice
1.1. GNU Octave / MATLAB
Numele Matlab este o prescurtare a cuvintelor “matrix laboratory”. Aceasta deoarece,
inițial programul a fost destinat pentru calculul cu matrici. Limbajul a evoluat si a devenit un
standard în universități când este vorba de cursuri introductive sau avansate de matematică
sau inginerie. Funcțiile specifice unui anumit domeniu sunt grupate în colecții de funcții sau
“toolboxes”.
MATLAB (MATrix LABoratory) este un pachet de programe de înalta performanță
dedicat calculului numeric și a reprezentărilor grafice. SIMULINK-ul este parte integrantă a
acestui pachet soft. Simulink permite modelarea, simularea și analiza dinamică a sistemelor.
GNU Octave reprezintă o alternativă la popularul mediu de programare MATLAB.
Sintaxele celor două programe sunt în mare parte identice, iar formatul fișierelor salvate este
același (fișiere cu extensia .m). Avantajul GNU Octave este că acesta este oferit în mod
gratuit sub licență publică. Un neajuns al acestui program este lipsa unui echivalent pentru
Simulink.

1.2. Interpretorul de comenzi


Fereastra principală a programului permite accesul direct la interpretorul de comenzi.
Acesta este un instrument care execută o secvență de cod linie cu linie. Secvența de cod poate
fi introdusă direct de la tastatură, iar după fiecare linie se apasă tasta Enter sau poate fi scrisă
într-un fișier de tip text, care se salvează cu extensia “.M” si se execută prin simpla scriere a
numelui fișierului.
Limbajul Matlab respectă principiile programării structurale, astfel că există o foarte
mare asemănare între sintaxa si structurile sale cu cea a limbajului C.
Se consideră pentru exemplificare următoarea secvență de cod:

suma = 0;
for i=1:10
suma = suma + i;
a(i) = i;
end
suma = a
plot(a,'k*')

Prin scrierea acesteia linie cu linie la prompter se va obține următorul rezultat:

suma = 55
a = 1 2 3 4 5 6 7 8 9 10

precum si un grafic cu valorile vectorului “a”.


Se observă că în prima linie am definit o variabilă cu numele “suma” care va conține
în final suma numerelor de la 1 la 10. Structura de tip ”for” face ca variabila “i” să ia succesiv
valori de la 1 la 10. La fiecare iterație variabila “suma” este incrementată cu cantitatea “i”.
Vectorul “a” va avea pe fiecare poziție valoarea indicelui. Se pot desprinde imediat câteva
particularități importante: rezultatul fiecărei operații este afișat dacă operația nu se termină cu
simbolul “;”. Astfel pentru afișarea rezultatelor se scrie numele variabilei si se apasă Enter.

1.3. Variabile scalare


Declararea și efectuarea operațiilor cu scalari este foarte simplă:

x=2;
y=3;
z=x+y

1.4. Variabile predefinite


O serie de variabile și constante utilizate des în calcule sunt deja definite în GNU
Octave și MATLAB.

true #variabila booleana adevarat


false #variabila booleana fals

pi #constanta pi
e #constanta e

inf #reprezentare pentru infinit

i #radacina patrata a lui -1


j #radacina patrata a lui -1

1.5. Variabile vectoriale (vectori)


Declararea vectorilor se face astfel:

x=[1 2 3]
y=[4 5 6]
Pentru a selecta un anumit element dintr-un vector se folosește comanda x(n), unde n
reprezintă numărul elementului. Numărătoarea elementelor vectorilor începe de la 1. Ca o
continuare a exemplului de mai sus avem:

x(1) #returneaza primul element al vectorului x


y(3) #returneaza al treilea element al vectorului y

Dacă pentru vectorii de dimensiuni reduse nu este nicio problemă ca elementele lor să
fie definite individual, pentru vectorii lungi cu zeci sau sute de elemente această definiție nu
mai este practică. Pentru aceștia există următorul mod de definire:

x=[1:0.5:50] #vector cu primul element 1, ultimul element 50 si pas de 0.5


(99 de elemente)

Pasul folosit pentru a defini în acest fel vectorii este implicit 1. Din acest motiv, dacă
pasul dorit este 1, acesta nu mai trebuie menționat la definirea variabilei.

x=[1:50] #vector cu primul element 1, ultimul element 50 si pas implicit de


1 (50 de elemente)

Se poate, de asemenea specifica ce rând de valori ale lui x sunt definite:

x(51:100) = [50:-1:1] #se observa ca am definit elementele 51-100 ale


vectorului in completarea celor deja existente

Dacă se dorește definirea unui vector cu un anumit număr de elemente, aflate la


distanță egală unul față de celălalt, se poate folosi următoarea comanda linspace(x1,x2,n),
unde x1 și x2 reprezintă primul, respectiv ultimul element al vectorului, iar n numărul total de
elemente din vector.

y=linspace(0,50,25) #vector de 25 de elemente cu primul element 0 si cu


ultimul element 50

Numărul implicit de elemente dintr-un vector astfel definit este 100. Prin urmare, dacă
se dorește definirea unui vector cu 100 de elemente, este suficient să se menționeze doar
primul și ultimul element din vector.

y=linspace(0,200) #vector de 100 de elemente cu primul element 0 si cu


ultimul element 200
În ceea ce privește operațiile matematice ce pot fi efectuate asupra vectorilor:

a=3; #definire scalar


x=[5 3 9]; #definire vector
y=[4 7 5];

z=x+y #suma a doi vectori

u=a*x #produsul unui vector cu un scalar

v=dot(x,y) #produsul scalar al vectorilor x si y

w=cross(x,y) #produsul vectorial al vectorilor x si y

1.6. Variabile matriceale (matrici)


Deoarece vectorii sunt doar un caz particular al matricilor, definiția și operațiile
efectuate asupra lor sunt similare.

A=[1 2 3; 4 5 6; 7 8 9] #definirea unei matrici cu 3 linii si 3 coloane.

Operațiile matematice ale ce pot fi efectuate cu matrici în GNU Octave / MATLAB:

A=[1 2 3; 4 5 6; 7 8 9]; #definirea unei matrici cu 3 linii si 3 coloane.


s=5; #definire scalar

B=A' #matricea B este egala cu transpusa matricei A.

C=A+B #suma a doua matrici

D=A*B #produsul a doua matrici

E=s*A #produsul unei matrice cu un scalar

x=det(A) #x este egal cu determinantul matricei A

Există comenzi și pentru definirea matricilor speciale:

A=ones(3,4) #matrice cu 3 randuri si 4 coloane cu toate elementele 1

B=zeros(4,5) #matrice cu 4 randuri si 5 coloane cu toate elementele 0

I=eye(3,3) #matrice unitate cu 3 randuri si coloane

v=[1 -9 5 -6 12] #definire vector


D=diag(v) #matrice diagonala cu elementele vectorului v pe diagonala
principala

1.7. Reprezentări grafice


GNU Octave și MATLB pun la dispoziția utilizatorilor posibilitatea de a genera,
personaliza și salva grafice.
Una dintre cele mai utilizate funcții pentru reprezentare grafică este funcția plot (x,y),
unde x reprezintă valorile de pe axa Ox (valorile în funcție de care se face reprezentarea
funcției), iar y reprezintă valorile de pe axa Oy (valorile funcției). Rularea acestei comenzi
deschide o nouă fereastră cu reprezentarea grafică solicitată.

t=[0:0.1:10]; #definire vector timp


x=sin(t); #definirea functiei x(t)
plot(t,x) #generarea unui grafic al funcției x(t)

Graficele generate pot fi salvate prin comanda saveas(gcf,’nume_fișier.extensie’). De


exemplu, dacă se dorește salvarea graficului generat de exemplul anterior:

saveas(gcf,'Grafic.png')

Graficul salvat este prezentat mai jos (Figura 1). Locația implicită de salvare a
graficelor este C:\Users\Nume_utilizator. Graficele pot fi salvate ca .png, .jpg, .gif și .pdf.

Grafic generat cu funcția plot

Dacă dorim să reprezentăm mai multe curbe pe același grafic trebuie să ne folosim de
funcția hold on, care menține deschisă fereastra deja existentă cu graficul.
t=[0:0.1:10]; #definire vector timp
x=sin(t); #definirea functiei x(t)
y=cos(t); #definirea functiei x(t)
plot(t,x) #generarea unui grafic al functiei x(t)

hold on; #mentine deschisa fereastra cu graficul reprezentat


plot(t,y) #adauga graficului existent reprezentarea functiei y(t)

Graficul rezultat este prezentat în Figura 2.

Grafic cu două funcții reprezentate


Graficelor generate li-se pot adăuga diferite elemente suplimentare.

title('Reprezentare grafica') #Titlul graficului


xlabel('Timp (s)') #Text axa Ox
ylabel('f(t)') #Text axa Oy
legend({'sin(t)','cos(t)'},'fontsize',14,'location','southwest') #adauga
legenda cu font de marime 14 in stanga jos

Graficul completat cu elemente suplimentare


Aspectul curbelor reprezentate poate fi și el modificat.

t=[0:0.1:10]; #definire vector timp


x=sin(t); #definirea functiei x(t)
y=cos(t); #definirea functiei x(t)

plot(t,x,'linewidth',3,'color','red') #generarea unui grafic al functiei x(t)


cu o grosime de 3 si de culoare rosie
hold on;
plot(t,y,'.','color','blue','markersize',10) #generarea unui grafic al
functiei y(t) de tip linie punctata albastra cu marcatori de dimensiune 10

title('Reprezentare grafica')
xlabel('Timp (s)')
ylabel('f(t)')
legend({'sin(t)','cos(t)'},'fontsize',14,'location','southwest')

Graficul generat în urma rulării secvenței de cod anterioare

Un alt tip de grafic, potrivit pentru reprezentarea datelor discrete, poate fi generat prin
comanda stem(x).

v=[1:20]; v(21:30)=[19:-1:10]; v(31:50)=linspace(12,25,20); #definire vector

stem(v)
Grafic de generat cu funcția stem
Titlul graficului, textele axelor și legenda se definesc în același mod pentru graficele
stem(x), ca pentru cele plot (x).

Exemplu1. Analiza unui circuit RLC derivatie – regim tranzitoriu


Să se calculeze şi să se reprezinte grafic răspunsul în frecvenţă al circuitului RLCdin figura ştiind că:
R=10 kΩ, C=1,12 µF şi L =5H. Studiati care este efectul modificarii valorii rezistentei R,
dacaaceastava lua valoarea de 100Ω.

d2U C d UC
- Se scriu ecuatiile de functionare ale circuitului: LC 2
+ RC +U C =U i ( t ) ; uC ( 0 ) =O
dt dt
- Se detrmina expresia functiei de transfer:
R
p
U ( p) R pRC L
H ( p )= 0 = = 2 =
U i ( p) 1 p LC + pRC +1 p2 + p R + 1
R+ pL+
pC L LC
R1=R, R2=100.

>>L=5; C=1.25e-6; R1=10000; R2=100;


num1=[R1/L 0];
den1=[1 R1/L 1/(L*C)];
w=logspace(1, 4);
f=w/(2*pi);
h1=freqs(num1,den1,w);
mag1=abs(h1);
phase1=angle(h1)*180/pi;
num2=[R2/L 0];
den2=[1 R2/L 1/(L*C)];
h2=freqs(num2,den2,w);
mag2=abs(h2);
phase2=angle(h2)*180/pi;
subplot(221),
loglog(f,mag1,'+'),title('Raspunsul amplitudine pt.R=10k'),ylabel('Amplitudinea')
subplot(222),loglog(f,mag2,'--'),title('Raspunsul amplitudine pt.R=0.1k'),ylabel('Amplitudinea')
subplot(223),semilogx(f,phase1,'--'),title('Raspunsul faza pt. R =10k'),
xlabel('Frecventa (Hz)'),ylabel('Unghiul de faza (grade)')
subplot(224),semilogx(f,phase2),title('Raspunsul faza pt. R =0.1k'),
xlabel('Frecventa (Hz)'),ylabel('Unghiul de faza (grade)')

Stabilitatea sistemelor

A. Criteriul de stabilitate Nyquist este un criteriu frecvenţial care permite studiul stabilităţii
sistemului în circuit închis din Fig. 6 cu funcţia de transfer

H 0 (p)  1  G (p) (1)


H d(p)

doar pe baza informaţiilor furnizate de funcţia de transfer în buclă deschisă, H(p) –


deci fără calculul poliilor (rădăcinile numitorului) lui H0(p). Pentru ca rezultatele să
reflecte şi stabilitatea internă a sistemului rezultant, funcţia de transfer H(p) – în formă
primară – trebuie să fie ireductibilă.

x(t) y(t)
H(p)
-

Fig. 6. Sistem în circuit închis prin reacţie negativă unitară

Criteriul Nyquist: “Condiţia necesară şi suficientă pentru ca sistemul liniar şi invariant în


timp descris prin funcţia de transfer să fie stabil intrare–ieşire şi/sau intern asimptotic stabil
este
ca variaţia argumentului vectorului cu originea în punctul critic (1,0) al planului complex
ReH(j ), ImH(j ) şi vârful pe ramurile continue ale semihodografului caracteristicii de

frecvenţă H(j) când  variază crescător în intervalul [0,) să fie:

  2N 
p
 N0  (2)
2
unde: Np - reprezintă numărul polilor lui H(p) situaţi în semiplanul complex pozitiv;
N0 - reprezintă numărul polilor lui H(p) situaţi pe axa imaginară.
Un sistem automat este la limita de stabilitate dacă semihodograful trece prin punctul critic
(1,0) . Dacă nu sunt îndeplinite aceste condiţii sistemul este instabil.

Hodograful lui H(jω) se obţine în MATLAB cu comanda nyquist avand una dintre urmatoarele
sintaxe:
nyquist(sys)
nyquist(sys,w) nyquist(sys1,sys2,...,sysN)
nyquist(sys1,sys2,...,sysN,w)
[re,im,w] = nyquist(N,D)
[re,im] = nyquist(N,D,w)

nyquist(sys) – traseaza hodograful Nyquist al unui sistem liniar şi invariant în timp cu


modelul sys. Pentru un sistem descris prin funcţie de transfer, vom avea: sys=tf(N,D) unde
cei doi parametri reprezintă scrierea in MATLAB a polinoamelor zerourilor si polilor – adică
sunt vectori linie care conţin coeficienţii celor două polinoame ale funcţiei raţionale, în ordine
descrescătoare a puterilor variabilei.
Exemplul 2
2( p+3)
Pentru sistemul cu funcţia de transfer în buclă deschisă H ( p )=
p 2+2 p+3
hodograful caracteristicii de frecvenţă în buclă închisă se obţine astfel:

h=tf([2 6],[1 2 3]);


nyquist(h)

Fig.
Hodograful
Nyquist

Fig.8. Hodograful functiei


Se observă în Fig. 8 reprezentarea în culoare roşie a punctului critic (1,0) şi cele doua
ramuri, simetrice faţă de abscisa, ale hodografului. Deoarece sistemul dat este stabil în
bucla deschisă, variatia  din (2) trebuie sa fie nulă, ceea ce se observă uşor în graficul din
Fig. 8.
 nyquist(sys,w) specifică explicit şi frecventele pentru care au fost calculate valorile
graficului.
 nyquist(sys1,sys2,...,sysN) si nyquist(sys1,sys2,...,sysN,w)
reprezinta în aceleasi axe de coordonate hodografurile mai multor sisteme.
 [re,im,w] = nyquist(N,D) afişează valorile componentei reale şi, respectiv, a celei
imaginare ale caracteristicii de frecvenţă, precum şi frecvenţele w; în acest caz semihodograful se
va afisa cu comanda plot(re,im).
 [re,im] = nyquist(N,D,w) permite definirea de către utilizator a frecvenţelor pentru care
se doreşte evaluat răspunsul; în acest caz vectorul în scară logaritmică al frecvenţelor w
(radiani/secundă) va fi generat cu comanda logspace.
Comanda logspace utilizată pentru generarea unui vector de valori egal spaţiate, în
scară logaritmică, între valorile 10a şi 10b – are una dintre sintaxele:
w = logspace(a,b) – generează un vector cu 50 de elemente
w = logspace(a,b,n) – generează un vector cu n elemente
w = logspace(a,pi) – generează un vector cu valori între 10a şi 10, utilizat
în general în prelucrarea numerică a semnalelor.
Să se studieze cu criteriul Nyquist stabilitatea sistemului din Fig. 1 când func ţia de
transfer pe calea directă are, pe rând, una din expresiile de mai jos:

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