Uporaba programov Matlab / Octave za izračun in izris grafov
1. Matlab/Octave/Scilab
Matlab (Mathworks, ZDA)je visoko zmogljiv programski paket, ki se v inženirstvu zelo pogosto uporablja. V osnovi je bil namenjen predvsem reševanju sistemov enačb, torej delu z matrikami, dandanes pa je nepogrešljiv tudi pri analizi in obdelavi signalov, numerični simulaciji, itd. Program je plačljiv, zato se pogosto za osnovne potrebe uporablja prosto dostopne programe, ki uporabljajo praktično enako sintakso in bodo v našem primeru v celoti zadostovali za naše potrebe. Najpogosteje se kot alternativo Matlabu uporablja Octave.
Obstaja zelo veiiko spletnih strani, kjer se lahko naučite uporabljati Matlab/Octave. Nekaj naslovov je navedenih na koncu poglavja. Matlab/Octave se lahko uporablja z vpisovanjem ukazov direktno v ukazni vrstici, v kolikor pa se ukazi ponavljajo ali pa jih je potrebno izvršiti več hkrati, pa se zažene ukaze, ki jih vpišemo v določeno dadoteko. Ta je tekstovna, zato lahko uporabimo za njeno urejevanje poljuben tekstovni editor. Velja opozoriti na to, da se ukazna vrstica nanaša na določeno mapo (direktorij) in da se morajo dadoteke, ki jih zaganjamo iz ukazne vrstice, nahajati v tej mapi. Drugi način je, da programu "povemo" v kateri mapi naj išče dadoteke ali pa se z ukazno vrstico pomaknemo v ustrezno mapo. V te namene se uporabi že nekoliko starejše DOS ukaze (npr. cd, mkdir, dir, ...). Matlab omogoča tudi grafičen način spreminjanja t.i. delovne mape.
2. Primer uporabe za izračun funkcije in izris
Spodnji primer izriše funkcijo
na
določenem intervalu. Funkcijo zapišemo v Matlabu/Octave v obliki
i=I0*exp(-t/Tau).*sin(omega*t). t zapišemo kot vektor vrednosti časa od
nekega začetnega do končnega časa z določenim časovnim korakom. Spodnja slika
prikazuje izrisano krivuljo. (Ukazne vrstice v spodnjem primeru lahko kopirate v
dadoteko in jo v programu Matlab/Octave zaženete iz ukazne vrstice)
Lahko tudi izrišemo več krivulj na istem grafu. Če izbrišemo ukaz break v spodnjem primeru kode, dobimo poleg prvega še en graf na katerem pa imamo izrisane tri krivulje hkrati.
Zamik krivulj v t osi lahko dosežemo tako, da določimo novo spremenljivko za čas, ki je od osnovnega zamaknjen za določeno vrednost, npr: t2=t-0.2. Če izbrišemo drugi ukaz break v spodnjem primeru dobimo sledeč rezultat:
%% PRIMER IZRISA ANALITIČNE FUNKCIJE v MATLABU / OCTAVE
% Želimo izrisati krivuljo toka kot funkcijo časa v obliki enačbe i(t)=I0*exp(-t/Tau)*sin(omega*t)
% kjer so I0, Tau in omega konstante, t pa čas
% Določitev konstant in opis enot
I0= 10 % tok v [A]
Tau=0.2 % časovna konstanta v [s]
omega=20 % kotna frekvenca v [1/s]
% Določitev časovnih točk, kjer bomo računali funkcijo
tzac=0 % začetni čas
tkon=1 % končni čas
Nkorakov=100 % korak
t=linspace(tzac,tkon,Nkorakov); % generiram vektor časa v [s]
% po potrebi glej help linspace za nastavitve
% Določitev funkcije toka v Matlab sintaksi.
% Bodi pozoren na dodajanje pike "." pred simboli za množenje in deljenje vektorjev
i=I0*exp(-t/Tau).*sin(omega*t);
% Izris funkcije
plot(t,i,'Linewidth',1.5)
xlabel('Cas /s')
ylabel('Tok /A')
% Za izpis tabele i in t
[t;i]' % kreiramo matriko z dvema kolonama
%% Dodatne možnosti izrisa, odkomentiraj in preiskusi
% plot(t,i,'-*') % s simbolom in polno črto
% plot(t,i,'g*') % z zelenimi simboli
% grid % doda mrežo
% title('Tok v odvnisnosti od časa, prehodni pojav')
break % komentiraj to vrstico, če želiš izvršiti program do konca
%% Dodatni izris dveh krivulj za različne parametre
figure; % kreiram nov graf
i1=1*exp(-t/0.2).*sin(20*t);
i2=2*exp(-t/0.5).*sin(20*t);
i3=3*exp(-t/0.2).*sin(10*t);
plot(t,i1,t,i2,t,i3)
% Prikaz s črticami, glej help plot za druge moznosti
plot(t,i1,'--',t,i2,'.',t,i3,'.-')
xlabel('Cas /s')
ylabel('Tok /A')
legend('i1','i2','i3') % izris legende
% premaknitev krivulj v t osi (abscisi)
break
t2=t-0.2;
t3=t+0.3;
i2=1*exp(-t2/0.2).*sin(20*t2);
i3=1*exp(-t3/0.2).*sin(20*t3);
plot(t,i1,t,i2,t,i3)
legend('i1','i2','i3') % izris legende
Primeri programčkov v Matlabu:
- zgornji primer za izris grafov: izris.m
- programa za izris polja v ravnini tanke tuljave: oe2_labvaja1_polje_precno.m in polje.m
Nekaj spletnih virov:
Matlab in Octave, osnovna stran:
http://www.mathworks.com/products/matlab/
http://www.gnu.org/software/octave/
Primerjava Matlab/Octave/Scilab:
http://www.dedoimedo.com/computers/scientific.html
http://userpages.umbc.edu/~gobbert/papers/SharmaGobbertTR2010.pdf
Učenje Matlaba/Octave:
http://userpages.umbc.edu/~gobbert/papers/SharmaGobbertTR2010.pdf
http://volga.eng.yale.edu/sohrab/matlab_tutorial.html
http://www-mdp.eng.cam.ac.uk/web/CD/engapps/octave/octavetut.pdf
http://www.math.tamu.edu/~comech/tools/octave-basics/
http://lbm.fe.uni-lj.si/dejan/OE/MATLAB/Mlab_oe1.html