Kasutaja:Markhpedoson/MATLAB

Allikas: Vikipeedia

MATLAB (’’matrix laboratory’’) on multiparadigmaatiline arvutuskeskkond ja neljanda põlvkonna programmeerimiskeel. MathWorksi loodud ja patenditud programmeerimiskeel MATLAB toetab tehteid maatriksitega, funktsioonide ja andmete kujutamist graafikul, algoritmide realiseerimist, kasutajaliideste loomist ning liidestamist teiste keeltega, C , C++, Java, Fortran ja Python.

Ehkki MATLAB-i peamine eesmärk on numbriline arvutamine, kasutab lisatööriistakomplekt MuPAD sümboolse arvutuse mootorit, mis võimaldab kasutajal teostada algebralisi tehteid inimese jaoks loomulikul, sümboolsel kujul. Lisapakett Simulink sisaldab vahendeid erinevateks simulatsioonideks ning manus- ja dünaamiliste süsteemide mudelipõhiseks disainiks.

Aastal 2004 oli MATLAB-l umbes miljon tööstusliku ja akadeemilise taustaga kasutajat[1]. MATLAB-i kasutatakse eri valdkondades tehnikas, teaduses ja majandus.

Ajalugu[muuda | muuda lähteteksti]

Cleve Moler, New Mexico Ülikooli arvutiteaduse osakonna esimees, alustas MATLAB-i arendamist 70ndate lõpus[2]. Sihtrühmaks olid tema õpilased, kes saaksid seeläbi ligipääsu LINPACK ja EISPACK teekidele ilma selleks Fortranit õppimata. Varsti see levis teistesse ülikoolidesse ning sai tugevat vastukaja rakendusmatemaatikute seast. Jack Little, insener, tutvus tarkvaraga Moleri Stanfordi Ülikooli külaskäigu ajal aastal 1983. Nähes selle äripotentsiaali, ühines ta Moleri ja Steve Bangertiga. Nad kirjutasid MATLAB-i ümber C programmeerimiskeelde ning asutasid MathWorks aastal 1984, et jätkata selle arendamist. Ümberkirjutatud teegid said tuntuks kui JACKPAC[3]. Aastal 2000 kirjutati MATLAB ümber kasutamaks uuemat maatriksitega seotud teekide kogumikku, LAPACK[4].

MATLAB-i võtsid esimesena omaks automaatikateadlased ja –praktikud, Little’i erialalt, ent peagi levis see ka teistesse valdkondadesse. Tänapäeval kasutatakse seda ka hariduses, eriti lineaaralgebra ja numbrilise analüüsi õpetamisel, samuti on tarkvara populaarne pilditöötlusega seotud teadlaste seas[2].

Süntaks[muuda | muuda lähteteksti]

MATLAB rakendus on üles ehitatud MATLAB skriptimiskeelele. Levinud on käsuliidese kasutamine interaktiivse matemaatilise käsukestana või tekstifailide, mis sisaldavad MATLAB-i koodi, käivitamiseks[5].

Muutujad[muuda | muuda lähteteksti]

Muutujad defineeritakse omistusoperaatori = abil. MATLAB on nõrgalt tüübitud keel, sest tüüpe teisendatakse automaatselt[6]. Muutujaid võib kirja panna nende tüüpi deklareerimata, välja arvatud siis, kui muutujaid koheldakse kui objekte[7] ning nende tüüp võib muutuda. Väärtused võivad olla määratud konstantidega, teiste muutujate väärtustega teostatud arvutustehetega või funktsiooni väljundiga. Näiteks:

>> x = 17
x =
 17

>> x = 'hat'
x =
hat

>> y = x + 0
y =
       104        97       116

>> x = [3*4, pi/2]
x =
   12.0000    1.5708

>> y = 3*sin(x)
y =
   -1.6097    3.0000

Vektorid ja maatriksid[muuda | muuda lähteteksti]

Lihtne järjend defineeritakse koolonsüntaksiga: algus:juurdekasv:lõpp. Näiteks:

>> array = 1:2:9
array =
 1 3 5 7 9

defineerib järjendi (või omistab väärtuse olemasolevale järjendile) nimega array, mis koosneb väärtustest 1, 3, 5, 7 ja 9. See tähendab, et järjend algab 1-st (algus), suureneb iga sammu järel 2 võrra (juurdekasv) ning lõpeb jõudes (või vältides selle arvu ületamist) arvuni 9 (lõpp).

>> array = 1:3:9
array =
 1 4 7

väärtuse juurdekasv võib jätta koodis kirjutamata (ning ühe selle kõrval oleva kooloni), kasutamaks vaikimisi väärtust 1.

>> ari = 1:5
ari =
 1 2 3 4 5

omistab järjendile nimega ari järjendi väärtustega 1, 2, 3, 4 ja 5, kuna juurdekasvuna kasutatakse vaikimisi väärtust 1.

Indekseerimine algab ühest[8], mis on tavapärane maatriksite käsitlusel matemaatikas erinevalt programmeerimiskeeltest nagu C, C++ ja Java.

Maatrikseid saab defineerida, eraldades rea elemendid tühiku või komaga ning lõpetades iga rea semikooloniga. Elementide loend peab olema ümbritsetud kandiliste sulgudega: [ ]. Ümarsulge: ( ) kasutatakse elementide ja alamjärjendite kättesaamiseks, samuti funktsiooni argumentide tähistamiseks.

>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A =
 16  3  2 13
  5 10 11  8
  9  6  7 12
  4 15 14  1

>> A(2,3)
ans =
 11

Indeksite hulki saab märkida näiteks avaldisega „2:4“, mis väärtustub massiiviks [2, 3, 4]. Näiteks Maatriksi A (vt ülalt) miinori ridadest 2-4 ning veergudest 3-4 võib kirja panna järgmiselt:

>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1

n-järku ühikmaatriksit saab genereerida kasutades funktsiooni eye ning igas suuruses nullmaatriksit või ainult ühtedest koosnevat maatriksit vastavalt funktsioonidega zeros ja ones.

>> eye(3,3)
ans =
 1 0 0
 0 1 0
 0 0 1

>> zeros(2,3)
ans =
 0 0 0
 0 0 0

>> ones(2,3)
ans =
 1 1 1
 1 1 1

Enamik MATLAB-i funktsioone aktsepteerib sisendina maatrikseid ning rakendab iseennast maatriksi igale elemendile. Näiteks mod(2*J,n) korrutab iga elemendi maatriksis J kahega ning seejärel leiab jäägi jagamisel arvuga n. MATLAB ei sisalda standardseid for- ja while-tsükleid, selle asemel (nagu ka teisteski sarnastes rakendustes, näiteks R) kasutab vektornotatsiooni, mille tulemusena toimib kood kiiremini. Alljärgnev kood, väljavõte funktsioonist magic.m, loob võluruudu M muutuja n paaritute väärtuste jaoks (Ruutmaatriksite I ja J, mis sisaldavad hulka 1:n, genereerimiseks kasutatakse MATLAB-i funktsiooni meshgrid)

[J,I] = meshgrid(1:n);
A = mod(I + J - (n + 3) / 2, n);
B = mod(I + 2 * J - 2, n);
M = n * A + B + 1;

Struktuurid[muuda | muuda lähteteksti]

MATLAB-l on olemas struktuuri-andmetüübid[9]. Kuna kõik MATLAB-i muutujad on järjendid, oleks adekvaatsem nimetus „struktuurijärjend“, kus järjendi igal elemendil on samad väljade nimed. Lisaks toetab MATLAB dünaamilisi väljanimesid [10](väljade otsimine nime järgi, väljade muutmine jne). Seevastu MATLAB JIT ei toeta MATLAB-i struktuure, mistõttu on erinevate muutujate pakkimisel struktuuriks oma hind, mis tähendab, et programmi jõudlus võib väheneda.[11].


Funktsioonid[muuda | muuda lähteteksti]

MATLAB-i funktsiooni loomisel peab failinimi ühtima selle faili esimese funktsiooniga. Lubatud funktsiooninimed algavad tähega ning võivad sisaldada tähti, numbreid või alakriipse.

Funktsioonilingid[muuda | muuda lähteteksti]

MATLAB toetab ka lambda-arvutusi, kasutades funktsioonilinke[12], või funktsiooniviiteid, mida rakendatakse kas .m failides või anonüümsetes[13]/pesastatud funktsioonides[14].

Klassid ja objektorienteeritud programmeerimine[muuda | muuda lähteteksti]

MATLAB-i objektorienteeritud programmeerimise võimalused sisaldavad endas klasse, pärimist, virtuaalset lähetamist, pakette, pass-by-value ja pass-by-reference semantikat[15]. Süntaks ja väljakutsumise tavad on aga teistest keeldest märgatavalt erinevad. MATLAB-s on väärtusklassid ja viiteklassid, sõltuvalt sellest, kas klass on handle (link) järgi super-klassi (viiteklassi jaoks) või mitte (väärtusklassi jaoks)[16].

Meetodi väljakutse käitub nende kahe klassitüübi puhul erinevalt. Näiteks meetodi väljakutse

object.method();

saab muuta ükskõik millist objekti liiget ainult siis, kui objekt on viidatud klassi instants.

Lihtsama klassi näidis:

classdef hello
    methods
        function greet(this)
            disp('Hello!')
        end
    end
end

Kui panna see faili nimega hello.m, siis saab programmi esile kutsuda järgmiste käskudega:

>> x = hello;
>> x.greet();
Hello!

Graafika ja graafiline kasutaja liidese programmeerimine[muuda | muuda lähteteksti]

MATLAB toetab rakenduste arendust koos graafilise kasutaja liidese(GUI või graphical user interface) omadustega. MATLAB-s on GUIDE[17](GUI development environment ehk arendus keskkond), et graafiliselt disainida GUI-sid[18]. Ühtlasi on selles olemas kompaktselt integreeritud graafiku joonestamise võimalused. Näitena võib tuua funktsiooni plot, mida saab kasutada, et luua graafik kahest vektorist x ja y. Koodi näidis:

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

annab vastava joonise siinuse funktsioonist:

MATLAB-i programm on võimeline looma kolmedimensioonilist graafikut, kasutades funktsioone surf, plot3 või mesh.

[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
mesh(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})')
hidden off
   
[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
surf(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})')
See kood teeb valmis kolmedimensioonilise sõrestiku tavalisest kahedimensioonilisest siinuse funktsioonist:     See kood teeb valmis kolmedimensioonilise pealispinna tavalisest kahedimensioonilisest siinuse funktsioonist:
   

MATLAB-s saab graafilist kasutaja liidest programmeerida GUIDE tööriistaga[19].

Liidestumine teiste keeltega[muuda | muuda lähteteksti]

MATLAB on võimeline väljakutsuma funktsioone ja alamprogramme, mis on kirjutatud C programmeerimiskeeles ja Fortran-s[20]. Pakend funktsioon on loodud MATLAB-s, mis lubab erinevaid andmetüüpe edasi anda ja tagasi tuua. Dünaamiliselt laetavad objekt failid, mis on loodud kompileerides selliseid funktsioone, kannavad terminit "MEX-files"(MEX-failid ehk MATLAB executable)[21][22]. Alates 2014 on hakatud liidestumist looma Pythoniga. [23][24]

Teegid, mis on kirjutatud Perl, Java, ActiveX või .NET on võimalik otseselt välja kutsuda MATLAB-st[25][26] ja paljud MATLAB-i teegid(XML või SQL) on rakendatud pakenditena ümber Java või ActiveX teekide. MATLAB-i välja kutsumine JAVA-st on keeruline, kuid tehtav MATLAB-i tööriistapaketiga[27], mida müüakse eraldi MathWorksi poolt või kasutades dokumentideta mehanismi nimega JMI(Java-to-MATLAB interface)[28][29].

Alternatiivina MuPAD-l põhinevale Symbolic Math Toolbox-le, mis on saadaval MathWorksi poolt, on ka Maple või Mathematica[30][31].

Litsents[muuda | muuda lähteteksti]

MATLAB on patenditud toode MathWorksi poolt, mis tähendab, et toote kasutajad on sõltuvad müüjast ning teenusepakkuja vahetamine on tasuline[1][32]. Kuigi MATLAB Builder tooted on võimelised muutma MATLAB-i funktsioone teegi failideks nii, et neid oleks võimalik kasutada .NET-i[33] või Java rakendusehituse keskkonnas[34] , sellest hoolimata tuleviku arendus jääb siiski seotuks MATLAB-i keelega.

Iga tööriistapakett tuleb osta eraldi. Kui nõutakse kvaliteedilitsentsi, siis MathWorksi müügiosakond nõuab informatsiooni projekti kohta, milleks MATLAB-i kasutama hakatakse. Kui see antakse(mida tihti tehakse), siis antud litsents kehtib kaks kuni neli nädalat. Õpilase versioon MATLAB-st ja ka kodukasutus litsents MATLABI-le, SIMULINK ja ka alamosa MathWorksi tööriistapaketidest tunduvalt madalama hinnaga.

Viited[muuda | muuda lähteteksti]

  1. 1,0 1,1 Goering, Richard (4. oktoober 2004). "Matlab edges closer to electronic design automation world". EE Times.
  2. 2,0 2,1 Cleve Moler (detsember 2004). "The Origins of MATLAB". Vaadatud 15. aprill 2007.
  3. "MATLAB Programming Language". Altius Directory. Vaadatud 17. detsember 2010.
  4. Moler, Cleve (jaanuar 2000). "MATLAB Incorporates LAPACK". Cleve's Corner. MathWorks. Vaadatud 20. detsember 2008.
  5. "MATLAB Documentation". MathWorks. Vaadatud 14. august 2013.
  6. "Comparing MATLAB with Other OO Languages". MATLAB. MathWorks. Vaadatud 14. august 2013.
  7. "Create Symbolic Variables and Expressions". Symbolic Math Toolbox. MathWorks. Vaadatud 14. august 2013.
  8. "Matrix Indexing". MathWorks. Vaadatud 14. august 2013.
  9. "Structures". MathWorks. Vaadatud 14. august 2013.
  10. "Generate Field Names from Variables". MathWorks. Vaadatud 14. august 2013.
  11. Considering Performance in Object-Oriented MATLAB Code, Loren Shure, MATLAB Central, 26. March 2012: "function calls on structs, cells, and function handles will not benefit from JIT optimization of the function call and can be many times slower than function calls on purely numeric arguments"
  12. "Function Handles". MathWorks. Vaadatud 14. august 2013.
  13. "Anonymous Functions". MathWorks. Vaadatud 14. august 2013.
  14. "Nested Functions". MathWorks.
  15. "Object-Oriented Programming". MathWorks. Vaadatud 14. august 2013.
  16. "Comparing Handle and Value Classes". MathWorks.
  17. "Create a Simple GUIDE GUI". MathWorks. Vaadatud 14. august 2014.
  18. "MATLAB GUI". MathWorks. 30. aprill 2011. Vaadatud 14. august 2013.
  19. Smith, S. T. (2006). MATLAB: Advanced GUI Development. Dog Ear Publishing. ISBN 978-1-59858-181-2.
  20. "Application Programming Interfaces to MATLAB". MathWorks. Vaadatud 14. august 2013.
  21. "Create MEX-Files". MathWorks. Vaadatud 14. august 2013.
  22. Spielman, Dan (10. veebruar 2004). "Connecting C and Matlab". Yale University, Computer Science Department. Vaadatud 20. mai 2008.
  23. "MATLAB Engine for Python". MathWorks. Vaadatud 13. juuni 2015.
  24. "Call Python Libraries". MathWorks. Vaadatud 13. juuni 2015.
  25. "External Programming Language Interfaces". MathWorks. Vaadatud 14. august 2013.
  26. "Call Perl script using appropriate operating system executable". MathWorks. Vaadatud 7. november 2013.
  27. "MATLAB Builder JA". MathWorks. Vaadatud 7. juuni 2010.
  28. Altman, Yair (14. aprill 2010). "Java-to-Matlab Interface". Undocumented Matlab. Vaadatud 7. juuni 2010.
  29. Kaplan, Joshua. "matlabcontrol JMI".
  30. Germundsson, Roger (30. september 1998). "MaMa: Calling MATLAB from Mathematica with MathLink". Wolfram Research. Wolfram Library Archive.
  31. rsmenon; szhorvat (2013). "MATLink: Communicate with MATLAB from Mathematica". Vaadatud 14. august 2013.
  32. Stafford, Jan (21. mai 2003). "The Wrong Choice: Locked in by license restrictions". SearchOpenSource.com. Vaadatud 14. august 2013.
  33. "MATLAB Builder NE". MathWorks. Vaadatud 14. august 2013.
  34. "MATLAB Builder JA". MathWorks. Vaadatud 14. august 2013.
  • Gilat, Amos (2004). MATLAB: An Introduction with Applications 2nd Edition. John Wiley & Sons. ISBN 978-0-471-69420-5.
  • Quarteroni, Alfio; Saleri, Fausto (2006). Scientific Computing with MATLAB and Octave. Springer. ISBN 978-3-540-32612-0.
  • Ferreira, A.J.M. (2009). MATLAB Codes for Finite Element Analysis. Springer. ISBN 978-1-4020-9199-5.
  • Lynch, Stephen (2004). Dynamical Systems with Applications using MATLAB. Birkhäuser. ISBN 978-0-8176-4321-8.

Välised lingid[muuda | muuda lähteteksti]

  • www.mathworks.com/products/matlab