Professional Documents
Culture Documents
Matlab For Windows
Matlab For Windows
Matlab For Windows
PREDGOVOR Ova knjiga je nastala kao pedagokom i istraivakom radu MATLAB. Namijenjena je irokom studentima, inenjerima, profesorima i matematikih i tehnikih nauka. rezultat iskustva autora u sa programskim paketom krugu italaca, a posebno naunim radnicima prirodnih,
Knjiga je dopuna knjige PC-MATLAB sa elementima MS DOSa koja je napisana 1991. Naime u me|uvremenu znaajnu prednost nad MS DOS okruenjem uzela su grafika okruenja posebno Windows. Tako se danas intenzivno koriste verzije MATLAB za Windows. Koncepcija knjige u sutini ostala je ista. Dopune se prije svega odnose na grafiko okruenje, brojne nove funkcije i mogunosti grafikog prikaza, kao i sloene mogunosti upravljanja graficima i grafikim okruenjem. Posebne napomene se odnose na promjene u semanatici samog MATLAB-a koje nijesu znatne. Knjiga je zamiljena kao udbenik i kompletan prirunik za upoznavanje i rad sa MATLAB for Windows. Zbog toga su dati prilozi sa osnovnim elementima Windowsa i Notepada. Autori se unaprijed izvinjavaju za eventualne propuste i bie zahvalni na primjedbama i sugestijama koje bi doprinijele poboljanju knjige. Podgorica, april 1998. Autori
SADR@AJ
PREDGOVOR .................................................................................i SADR@AJ .................................................................................... iii UVOD............................................................................................ xi KAKO PO^ETI RAD U MATLAB-u ................................................ 1 GLAVA PRVA OSNOVNE FUNKCIJE .................................................................. 5
1.1 1.2 1.3 UNO[ENJE PODATAKA ......................................................................... 5 FORMATIRANJE MATRICE SPECIJALNE STRUKTURE .................... 7 FUNKCIJE OP[TE NAMJENE ................................................................ 9 1.3.1 Operatori za pomo} pri radu....................................................... 9 1.3.2 Informacije o varijablama i fajlovima........................................ 11 1.3.3 Brisanje i ~uvanje podataka..................................................... 14 1.3.4 Informacije o sistemu ............................................................... 16 ISKAZI I VARIJABLE ............................................................................ 17 BROJEVI I ARITMETI^KI IZRAZI ......................................................... 19 KOMPLEKSNI BROJEVI I MATRICE ................................................... 20 IZLAZNI FORMAT................................................................................. 22 GENERISANJE VEKTORA POMO]U KARAKTERA : (DVIJE TA^KE) ..................................................................................... 24 INDEKSI I MANIPULACIJA VRSTAMA I KOLONAMA ........................ 27
2.11
2.10.2 Funkcije za zaokru`ivanje ........................................................ 53 2.10.3 Eksponencijalna, logaritamska, stepena i funkcija kvadratnog korjena .................................................................. 55 2.10.4 Trigonometrijske, hiperbolne i njima inverzne funkcije ............ 57 2.10.5 Besselove, beta, gama i funkcije gre{ke .................................. 60 2.10.6 Specifi~ne numeri~ke funkcije................................................. 63 FUNKCIJE ZA MANIPULACIJU MATRICAMA..................................... 66
3.2
6.5
6.6 6.7
6.4.5 Tekstualni objekat - text ......................................................... 167 GRAFI^KE KONTROLE...................................................................... 168 6.5.1 Frame kontrola....................................................................... 168 6.5.2 Text kontrola .......................................................................... 169 6.5.3 Edit kontrola ........................................................................... 169 6.5.4 Popupmenu kontrola.............................................................. 171 6.5.5 Radio kontrola........................................................................ 171 6.5.6 Check kontrola ....................................................................... 172 6.5.7 Slider kontrola ........................................................................ 172 6.5.8 Pushbutton kontrola ............................................................... 173 UIMENU .............................................................................................. 173 INTERAKTIVNI PROGRAM ZA CRTANJE 2-D CRTE@A ................ 175 6.7.1 Program d2crtez.m ................................................................ 176 6.7.2 Program za prora~un i crtanje - crtanje.m ............................. 180 6.7.3 Pomo}ni prozor - pomocni.m ................................................. 183 6.7.4 Potprogram - funk.m .............................................................. 184
7.2
vi
8.13
10.3 10.4
11.4
PRILOG TRE]I NOTEPAD ................................................................................. 279 PRILOG ^ETVRTI NEKE MOGU]NOSTI VERZIJE MATLAB 5............................... 283 LITERATURA ............................................................................ 285 INDEKS ..................................................................................... 287
ix
UVOD
MATLAB je vii programski jezik razvijen sredinom 80-tih. Prva verzija pisana je u Fortranu, a kao osnova su uzeti paketi LINPACK i EISPACK. Nove verzije MATLAB-a (1987 i 1989) napisane su u jeziku C, a distribuira ga softverska kompanija The Math Works Inc. MATLAB je, za relativno kratko vrijeme, postao standardni programski paket na vodeim univerzitetima i istraivakim institutima. Koristi se u uvodnim kursevima linearne algebre i numerike analize kao i u kursevima ostalih matematikih i tehnikih disciplina. U industriji se koristi za izraunavanja pri rjeavanju praktinih i istraivakih problema. Problemi i rjeenja se izraavaju na slian nain kao i u standardnim matematikim formulacijama i to bez potrebe za tradicionalnim programiranjem. Na taj nain se numeriki problemi rjeavaju za samo djeli vremena koje bi bilo potrebno za pisanje programa u nekom od niih jezika (Fortran, Basic, C). Zbog velike popularnosti, razvijene su razliite verzije MATLAB-a prilago|ene pojedinim raunarskim sistemima. Ovdje predstavljamo verziju MATLAB for Windows (grupa verzija 4) koja se koristi u Windows operativnim sistemima, kako onim pod MS DOS-om (Windows 3.1x), tako i modernijim (NT i 95). Osnovni elementi svih prethodnih verzija MATLAB-a su identini, a me|usobno se razlikuju po broju raspoloivih funkcija i po sistemskim ogranienjima. U ovoj knjizi je prezentiran MATLAB for Windows, ije poznavanje omoguava direktno korienje i svih ostalih implementacija MATLAB-a jer se njihove dodatne mogunosti i ogranienja jednostavno otkrivaju. MATLAB prua izvanredne mogunosti kreiranja novih funkcija za specijalizovane oblasti primjene. Takve funkcije se obino grupiu u posebne pakete, takozvane Toolbox-ove. Neke od njih nudi i sam proizvo|a MATLAB-a: SIGNAL PROCESSING, CONTROL, OPTIMIZATION, IDENTIFICATION, SYMBOLIC MATH i sl. ^itaocima preporuujemo da kreiraju sopstvene Toolboxove. Sastavni dio MATLAB-a kao posebni modul je i SIMULINK koji slui za simulaciju dinamike sistema. Napomenimo da postoje verzije MATLAB-a prilagodjene irokom opsegu kompjuterskih sistema: Apple Macintosh, Sun, Apollo, HP, DECstations i DEC VAX, Stardent Titan, Convex, kao i za Alliant i Cray superkompjutere.
xi
Kako poeti
Slika 3: Komandni MATLAB-ov prozor Pored ovih pojmova uvedimo jo{ jedan neophodan pojam. To je grafiki prozor. Kada se crta neki grafik, otvara se grafiki prozor, na primjer kao na slici 4.
Kako poeti
glava prva
OSNOVNE FUNKCIJE
Osnovni objekat nad kojim se vre razne operacije u MATLAB-u ini niz brojeva (array of numbers) pore|an u m vrsta i n kolona, koji emo uslovno zvati pravougaona (m x n) matrica. Naime, ovako ure|eni brojevi mogu predstavljati neki linearni operator, dakle matricu u uobiajenom smislu, ali ih MATLAB moe interpretirati i kao tabelarni prikaz nekih podataka koje treba obraditi na odre|eni nain. Fleksibilnosti MATLAB-a znatno doprinose i sljedee osobine: (1) Ne sadri iskaze za odre|ivanje dimenzije ili tipa matrice, ve se odre|eni prostor pridruuje automatski, sve do iznosa ogranienog svakim pojedinanim raunarom. (2) Svi specijalni sluajevi pravougaone matrice (m=n>1-kvadratna matrica, m=1-vektor vrsta, n=1-vektor kolona, m=n=1-skalar) prirodno slijede pravila za opti sluaj, osim u nekim operacijama kada je za vektore i skalare odre|eno specijalno znaenje. Zato emo, ukoliko nije posebno naglaeno, pod pojmom "matrica" podrazumijevati bilo koji od navedenih sluajeva. (3) Elementi matrice mogu biti realni ili kompleksni. Operacije i iskazi u MATLAB-u piu se, kadgod je to mogue, na prirodan nain kao to bi ih pisali na papiru.
Osnovne funkcije A= 1 -2 4 5 -6 8 7 -4 2 Matrica A smjetena je u radnu memoriju za kasniju upotrebu. Isti rezultat imaemo i unoenjem A=[1,-2,4;5,-6,8;7,-4,2] ili A=[ 1 -2 4 5 -6 8 7 -4 2] Ovaj zadnji nain unoenja je pogodan jer imitira pisanje matrice na papiru, a koristan je i kada imamo posla sa velikim matricama koje moemo razvui na vie ulaznih linija. Primjer 1.1.2 Unoenje C=[123.0934 -24.934 -33.7634 945.3452 -345.8734 -39.246 -24.78 0.357 -45.98 -2.7 23.13 2] rezultira u C= 123.0934 -24.9340 -33.7634 945.3452 -345.8734 -24.7800 0.3570 -45.9800 -2.7000 23.1300 -39.2460 2.0000
Ukoliko elemente jedne vrste nije mogue smjestiti u jednoj ulaznoj liniji, unoenje moemo nastaviti u narednoj, pri emu sa ... naznaimo prenoenje na sljedeu liniju. Primjer 1.1.3 Unoenje B=[245.268 -0.6592 -35.9643 27.2754 -965.346 -345.723 ... -34.97 54.678 35.28] rezultira u B= Columns 1 through 7 245.2680 -0.6592 -35.9643 27.2754 -965.3460 -345.7230 -34.9700 Columns 8 through 9 54.6780 35.2800 6
MATLAB for Windows Ukoliko unosimo "rijetke" (sparse) matrice, tj. one kod kojih je relativno velik broj elemenata jednak nuli, pogodno je definisati nenulte elemente pojedinano, sa indeksima unutar malih zagrada ( ). Primjer 1.1.4 Unoenje D(1,1)=2;D(1,4)=-3;D(3,5)=7 rezultira u D= 2 0 0 0 0 0 0 0 0 -3 0 0 0 0 7
Gornji primjer ilustruje pomenutu osobinu MATLAB-a da se dimenzije matrice automatski prilago|avaju. Pored toga, vidimo da se vie iskaza moe napisati u jednoj liniji. Ukoliko su iskazi razdvojeni zarezima, rezultati e biti prikazani na ekranu, dok znak ; poslije iskaza slui za suspendovanje prikazivanja rezultata. Napomenimo da MATLAB raspolae sa skupom funkcija za rad sa rijetkim matricama sa kojima emo se sresti u narednim poglavljima.
Primjeujemo da MATLAB sam kreira veliinu po imenu ans (answer=odgovor, rezultat), ukoliko joj ve nijesmo dodijelili ime operacijom pridruivanja (znak=). Naravno, u radnom prostoru e ostati samo zadnja veliina pod tim imenom. Naredba hilb(n) formira kvadratnu matricu dimenzija (n x n) iji su elementi vezani sa indeksima, po formuli 1/(i+j-1). Naredba pascal(n) formira kvadratnu matricu dimenzija (n x n) kojoj elementi normalni na glavnu dijagonalu ine Paskalov trougao
1 1 1 1 3 1 1 2 3 1 1 1 4 6 4 1 5 10 10 5 1
MATLAB for Windows ..... Primjer 1.2.2 Unoenjem E=hilb(4),pascal(5) dobijamo E= 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 ans = 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 Pored navedenih, matrice se mogu unositi i na druge naine: - generisanjem pomou iskaza i funkcija, - kreiranjem u M-fajlovima, - unoenjem iz spoljnih fajlova sa podacima. O ovim mogunostima MATLAB-a bie rijei kasnije.
Osnovne funkcije Primjer 1.3.1 Korienjem naredbe help pribaviemo informacije o nainu upotrebe same komande help, kao i o skupu naredbi dde i komande abs. Unoenje help help,help dde,help abs daje
HELP On-line documentation. HELP, by itself, lists all primary help topics. Each primary topic corresponds to a directory name on MATLABPATH. "HELP topic" gives help on the specified topic. The topic can be a command name or a directory name. If it is a command name, HELP displays information on that command. If it is a directory name, HELP displays the Table-Of-Contents for the specified directory. It is not necessary to give the full pathname of the directory; the last component, or last several components, are sufficient. For example, "help general" and "help matlab/general" both list the Table-Of-Contents for the directory toolbox/matlab/general. LOOKFOR XYZ looks for the string XYZ in the first comment line of the HELP text in all M-files found on MATLABPATH. For all files in which a match occurs, LOOKFOR displays the matching lines. MORE ON causes HELP to pause between screenfuls if the help text runs to several screens. See also LOOKFOR, WHAT, WHICH, DIR, MORE.
DDE Toolbox. Version 1.0 1-Dec-93 Copyright (c) 1984-94 by The MathWorks, Inc.
DDE Client Functions. ddeadv - Set up advisory link. ddeexec - Send string for execution. ddeinit - Initiate DDE conversation. ddepoke - Send data to application. ddereq - Request data from application. ddeterm - Terminate DDE conversation. ddeunadv - Release advisory link. ABS Absolute value and string to numeric conversion. ABS(X) is the absolute value of the elements of X. When X is complex, ABS(X) is the complex modulus (magnitude) of the elements of X. See also ANGLE, UNWRAP. ABS(S), where S is a MATLAB string variable, returns the numeric values of the ASCII characters in the string. It does not change the internal representation, only the way it prints. See also SETSTR.
Pored ovakvog help-a MATLAB posjeduje help organizovan u obliku hiperteksta. Naime u liniji menija osnovnog MATLAB prozora postoji opcija Help koja se moe pozvati tasterskom kombinacijom Alt+H ili klikom mia. Izborom opcije Table of Contents otvara se prozor za pregledom oblasti koje 10
MATLAB for Windows MATLAB obuhvata. Nazivi oblasti su istaknuti iz ostalog teksta, i klik mia na naziv oblasti daje pregled svih naredbi koje oblast obuhvata. Klikom na odgovarajuu naredbu dobijaju se osnovne informacije o njoj. Tokom itanja helpa pritiskom na Back moemo se vratiti na prethodnu temu help-a ili sa History na neku temu koju ste tokom te sesije pokrenuli. Postoji i Index koji obuhvata abecedni spisak svih naredbi MATLAB-a. Za ilustrovanje mogunosti MATLAB-a, prire|eni su uzorci raznih programa, koji se mogu pozvati naredbama demo expo Programi koji su obuhvaeni ovim demo programima predstavljaju dobru kolu za svakog MATLAB programera. Zato se obavezno treba upoznati sa tekstovima samih programa o kojima moete itati u oblasti help demos. MATLAB poetnicima preporuujemo da startuju i uvodni program intro
Pored ovih, MATLAB posjeduje i pojedine konstante uvedene da bi potpomogle jednostavniji rad i da bi pratile uobiajeni nain matematike notacije. Veliina eps koristi se kao tolerancija pri nekim proraunima kao to su odre|ivanje singularnosti ili ranga matrice. Njena poetna vrijednost je rastojanje izme|u 1.0 i sljedeeg veeg realnog broja sa pokretnim zarezom. U IEEE aritmetici koja se koristi na veini personalnih raunara, uzima se da je eps=2-52 to priblino iznosi 2.22*10-16. Ukoliko je to neophodno, korisnik moe ovoj promjenljivoj dati bilo koju vrijednost, ukljuujui i nulu. 11
Osnovne funkcije Veliina pi je ustvari Ludolfov broj , koji se unaprijed izrauna na neki od moguih naina. Veliina inf predstavlja skraenicu od infinity (beskonano) i koristi se na veoma malom broju sistema i raunarskih jezika. Na nekim raunarima omoguena je IEEE aritmetikom, implementiranom na matematikom koprocesoru. Na drugim raunarima koristi se softver sa pokretnim zarezom za simuliranje matematikog koprocesora. Neki od naina da se generie inf su s=1/0, s1=-1/0 to daje s= Inf s1= -Inf Warning:divide by zero Na mainama sa IEEE aritmetikom dijeljenje sa nulom ne dovodi do prekida izvravanja ili greke. Ispisuje se poruka upozorenja i specijalna veliina koja se ponaa korektno u kasnijim izraunavanjima. Veliina NaN je IEEE broj koji je povezan sa Inf, ali ima razliito znaenje. Dolazi od izraza Not a Number (nije broj) i moe se generisati sa inf/inf ili 0/0. Promjenljive pi, eps, NaN, Inf su stalne promjenljive a, pored ovog, MATLAB podrava koncepciju globalnih promjenljivih. Globalne promjenljive su one veliine koje vae u svim fajlovima. Podatke o definisanim globalnim promjenljivim moemo vidjeti naredbom who global Detaljnije informacije o veliinama iz tekueg radnog prostora mogu se dobiti naredbom whos odnosno whos global, koja daje ne samo imena varijabli ve i njihove dimenzije i indikaciju prisustva kompleksnih elemenata. Tako|e ovom naredbom dobijamo informaciju o gustini matrice. Za matrice koje nijesu rijetke ova je gustina Full dok je za rijetke matrice data u procentima koji predstavljaju procenat nenultih elemenata matrice. Za prikazivanje liste direktorijuma M, MEX i MAT-fajlova, moe posluiti naredba what. Tako naredba what prikazuje sadraj tekueg direktorijuma a 12
MATLAB for Windows what ime_direktorijuma prikazuje sadraj direktorijuma specificiranog imenom. Naredba which ime_funkcije trai poziciju na disku specificirane MATLAB funkcije iz M ili MEX fajlova. Za provjeru postojanja neke veliine ili fajla koristi se naredba exist. Tako unoenje exist('A') daje 1 ako je A veliina iz radnog prostora, 2 ako je A.M ime nekog fajla na disku, 3 ako je A.MEX ime funkcije na disku, 4 ako je A prevedena Simulink funkcija, 5 ako je A ugra|ena funkcija i 0 ako A ne postoji. Naglasimo da ime varijable ili fajla mora biti izme|u navodnika. Primjer 1.3.3 Provjerimo da li postoje D, cos i acosh. Unoenjem exist('D'),exist(cos),exist('acosh') dobijamo ans= 1 ans= 5 ans= 2 to znai da postoji varijabla D i fajl acosh.m i da je cos ugra|ena funkcija. Za odre|ivanje dimenzija pojedinih veliina slui naredba size. Postoje etiri varijante ove naredbe koje moemo generalno predstaviti kao: s=size(X), [m,n]=size(X), m=size(X,1) i n=size(X,2). U prvom sluaju kao izlazni argumant dobijemo vektor vrstu (oznaen proizvoljno sa s) sa dva elementa koji pokazuju broj vrsta i kolona veliine X, respektivno. Ukoliko elimo da dimenzije varijable X (proizvoljno oznaene sa m i n) dobijemo posebno, koristiemo drugu verziju koja ima dva izlazna argumenta. Trea i etvrta varijanta naredbe size daju nam broj vrsta i kolona matrice X respektivno. Za odre|ivanje duine (dimenzije) vektora koristi se naredba length. Tako l=length(y) daje skalar l koji pokazuje broj elemenata vektora y, bilo da se radi o vektoru vrsti ili koloni. U sluaju da je y matrica, l predstavlja vei od broja redova i broja kolona. Primjer 1.3.4 Odrediti dimenzije promjenljive D i duinu vektora B. Unoenjem size(D),ll=length(D),size(X,1),[m,n]=size(D),d=length(B) dobijamo 13
MATLAB for Windows trajnog uvanja podataka na disku za neku kasniju upotrebu, koristimo naredbu save. Tako unoenjem save upisujemo sve tekue varijable u unaprijed odre|eni MAT-fajl sa imenom matlab.mat. Naredbom save ime upisujemo sve tekue veliine iz radnog prostora u fajl ime.mat (ime je, naravno, proizvoljno), dok naredbom save ime x Y Z upisujemo u fajl ime.mat samo veliine x, Y i Z. Poto smo sauvali na disku veliine koje nas interesuju, moemo zavriti sesiju MATLAB-a. Za prekid rada koriste se ravnopravno tri naina, naredbama exit quit ili izborom opcije Exit iz menija File. Prekid uzrokuje gubitak veliina iz radnog prostora i izlazak iz MATLAB-a. Kada se ponovo ukljuimo u MATLAB, radni prostor moe se popuniti ranije sauvanim podacima. Ovo se postie naredbom load, koja predstavlja inverznu operaciju od save. Naime, load unosi u radni prostor podatke iz fajla matlab.mat, dok load ime puni radni prostor podacima iz fajla ime.mat. Napomenimo da naredbe save i load moemo koristiti za smjetanje i uitavanje podataka iz ASCII fajlova, o emu e biti vie rijei kasnije. Prekid rada, ali bez izlaska iz MATLAB-a, moe se izvriti upotrebom <Ctrl>-<C> ili <Ctrl>-<Break>, tj. istovremenim pritiskom na tipke <Ctrl> i <C> odnosno <Ctrl> i <Break>.
15
Osnovne funkcije
1 2 4 Primjer 1.3.6 Unijeti vektore x=[1 -2 3], y=[-3 4 -6] i matricu Z= . 2 4 6 Sauvati ove podatke u fajl sa imenom podaci, i po zavretku rada unijeti sa diska veliine x, y i Z.
0.0070
0.0210
0.0510
0.0087
16
MATLAB for Windows ans = 15.3800 Vidimo da je trenutak izrade ovog primjera bio 07.09.1996 u 21h 51minut i 8.7 sekundi i da je izme|u prve i tree naredbe proteklo 15.38 sekundi.
- izraz - var=izraz
- [var1,var2,..]=izraz pri emu je var skraenica za ime varijable (veliine, promjenljive). Izrazi su sainjeni od operatora, specijalnih karaktera (znakova), funkcija i imena varijabli. Izraunavanje izraza proizvodi matricu, koja se nakon toga pojavljuje na ekranu i vezuje za neku varijablu radi kasnije upotrebe. Ako se ime varijable i znak pridruivanja (=) izostave, automatski se kreira varijabla sa imenom ans, ije ime potie od answer (odgovor, rezultat). Iskaz se normalno zavrava tipkom <Enter>. Ako je, me|utim, zadnji karakter iskaza semicolon (;), prikazivanje na ekranu se suspenduje iako su operacije definisane iskazom izvrene u raunaru. Imena varijabli i funkcija moraju poeti slovom, iza koga moe slijediti proizvoljan broj slova, cifara ili podvuenih crta( znak _), ali se samo prvih 19 karaktera iz imena pamti. MATLAB razlikuje velika i mala slova. Tako, na primjer, a i A nijesu iste varijable. Opte je pravilo da se ugra|ene MATLAB funkcije moraju pisati malim slovima dok se funkcije koje se nalaze na disku u formi fajlova mogu pisati i malim i velikim slovima. Tako je cos(A) funkcija a COS(A) vraa poruku undefined function (nedefinisana funkcija) dok acosh(A) i AcOsH(A) vraaju isti rezultat. Primijetimo da je MATLAB veoma fleksibilan, u smislu da kao argument operatora mogu posluiti veoma sloeni izrazi sastavljeni od niza funkcija i operatora. Pri tome je redosljed izvravanja pojedinih operacija u okviru jednog iskaza naznaen obinim zagradama ( ). 17
Ranije smo napomenuli da se podaci mogu unositi u vie ulaznih linija. Analogan postupak moe se primijeniti i na unoenje sloenih izraza. Naime, ukoliko je izraz toliko sloen da ga ne moemo unijeti u jednoj ulaznoj liniji, moemo ga prenijeti na sljedeu ulaznu liniju korienjem ... (nekoliko taaka) i tipke <Enter>. Primjer 1.4.2 Izraz s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 ... + 1/9 - 1/10 + 1/11 - 1/12; izraunava parcijalnu sumu alternativnog reda i pridruuje je varijabli s, ali je ne prikazuje na ekranu. Napomenimo da ovakvu sumu moemo i elegantnije izraunati, o emu e kasnije biti rijei. Izrazi u MATLAB-u mogu imati vie izlaznih argumenata (varijabli) i to u sluajevima kada to prirodno proizilazi iz namjene samog osnovnog operatora ugra|enog u MATLAB (vidjeli smo ranije [m,n]=size(a), sa izlaznim argumentima m i n) ili kada se posebno kreiraju funkcije u M-ili MEX-fajlovima.
MATLAB for Windows Izrazi se prave korienjem uobiajenih aritmetikih operacija: + sabiranje, - oduzimanje, * mnoenje, / dijeljenje sdesna, \ dijeljenje slijeva, ^n stepenovanje sa n i niza elementarnih funkcija ugra|enih u MATLAB, kao to su sin, log, sqrt, tan, itd. Kasnije emo dati kompletnu listu ugra|enih funkcija kao i mogunosti kreiranja novih, pomou M-fajlova. Napomenimo da dva operatora za dijeljenje daju isti rezultat kada operiemo sa obinim brojevima (skalarima), a njihovo uvo|enje je bilo motivisano potrebom koja proizilazi iz operacija sa matricama, o emu e kasnije biti vie rijei. Primjer 1.5.2 Izrazi 1/4,4\1,inv(4)*1 svi daju isti rezultat ans= 0.25
Osnovne funkcije Primjer 1.6.1 Unoenje z=4+5*i rezultira u z =4.0000 + 5.0000i dok izraz w=5*exp(2.5*i) daje w =-4.0057 + 2.9924i Postoje najmanje dva naina za unoenje kompleksne matrice: -elementi se unose kao kompleksni, i -posebno se unose realni i imaginarni dio. Primjer 1.6.2 Za unoenje matrice sa 1 + 5i 2 6i Z = 3 + 7i 4 + 8i moemo ravnopravno koristiti sljedee izraze: a=[-1,2;3,4],b=[5,-6;7,8],Z=a+b*i to daje a= -1 2 3 4 b= 5 -6 7 8 Z= -1.0000 + 5.0000i 2.0000 - 6.0000i 3.0000 + 7.0000i 4.0000 +8.0000i ili Z1=[-1+5*i 2-6*i;3+7*i 4+8*i] sa istim rezultatom: Z1 = -1.0000 + 5.0000i 2.0000 - 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i MATLAB za Windows dozvoljava proizvoljan broj bjelina (blenkova i tabova) izme|u tokena (naziva varijabli i znakova aritmetikih operacija) to nije 20 kompleksnim elementima
MATLAB for Windows bio sluaj sa ranijim verzijama MATLAB-a. Ova osobina omoguava posebno pregledno pisanje programa. Primjer 1.6 3 Izrazi w=[-1+4*i 2+5*i],w1=[-1 + 4 * i 2 +5 * i],w2=[-1 + 4 * i 2 + 5 * i] daju w= -1.0000 + 4.0000i 2.0000 + 5.0000i w1 = -1.0000 + 4.0000i 2.0000 w2 = -1.0000 + 4.0000i 2.0000 + 5.0000i Vidimo da je MATLAB prvu i treu matricu protumaio na isti nain a da je izostanak blenka ispred broja 5 u drugoj matrici protumaio kao poseban broj. ^est je programerski manir, na koji ovdje upozoravamo, da se pojedine (obino brojake promjenljive) nazivaju i i j. Prilikom rada sa kompleksnim brojevima to moe da rezultira neoekivanim potekoama, kao u sljedeem primjeru Primjer 1.6.4 Z nije kompleksna veliina jer su i i j uzeli realne vrijednosti. i=2;j=1; z=3+5*i z = 13 0 + 5.0000i
Osnovne funkcije x= -1 0 2 Ukoliko najmanje jedan element matrice nije cio broj, postoje nekoliko moguih izlaznih formata. Standardni format naziva se format short, a pokazuje 5 znaajnih cifara. Koristi se automatski (by default) ukoliko se ne specificira neki drugi format. Ostali formati prikazuju vie znaajnih cifara ili koriste eksponencijalnu notaciju. Razne oblike prikazivanja izlaznih veliina ilustrovaemo na sljedeem primjeru. Primjer 1.7.1 Unesimo vektor od dva elementa y=[4/3 1.2345e-6]; Razliiti mogui formati i rezultujue reprezentacije vektora su: format short y y = 1.3333 0.0000 format short e y y = 1.3333e+000 1.2345e-006 format long y =1.33333333333333 0.00000123450000 format long e y =1.333333333333333e+000 1.234500000000000e-006 format hex y = 3ff5555555555555 3eb4b3fd5942cd96 format + y = ++ format bank y =1.33 0.00 format + predstavlja kompaktan nain prikazivanja velikih matrica, gdje se simboli +, - i prazni prostori (blenkovi) koriste za pozitivne, negativne i nulte elemente matrice, respektivno. format bank se koristi kod prikazivanja finansijskih izvjetaja, gdje se iznosi zaokruuju na dvije decimale (dinari i pare, dolari i centi, itd.). Kod format long zadnja cifra moe izgledati netana, ali je izlaz ustvari tana decimalna reprezentacija binarnih brojeva smjetenih u raunaru.
22
MATLAB for Windows Ako koristimo format short ili format long, a najvei element matrice je vei od 1000 ili manji od 0.001, tada se obino rezultati prikazuju sa obinim formatom skalirani sa eksponencijalnim faktorom. Primjer 1.7.2 Unoenje c=[21346 0.01] rezultira u c = 1.0e+004 * 2.1346 0.0000 dok promjenom formata sa format long imamo sljedeu izlaznu reprezentaciju c = 1.0e+004 * 2.13460000000000 0.00000100000000 Primjer 1.7.3 Unoenjem format rat a=[0.234 1/pi] dobijamo a= 117/500 113/355
jer format rat vri predstavljanje brojeva u obliku racionalnih razlomaka. Pomenimo jo dva formata: format compact i format loose koji se koriste kod prikazivanja veih matrica. Kod drugog formata prikazivanje pojedinih redova podataka se odvaja praznim redom dok kod prvog formata to nije sluaj. Alternativno, se moe mijenjati format upotrebom menija MATLAB-ovog komandnog prozora. Aktiviranjem opcije Numeric format u meniju Options otvara se meni u kojem se pregledno moe izabrati traeni format.
23
Osnovne funkcije Karakter : je veoma pogodan i esto korien u MATLAB-u. Najvie se upotrebljava za generisanje vektora sa ekvidistantnim elementima. Naime, izraz oblika x=i:k k>i i, k-cijeli brojevi generie vektor vrstu x=[i i+1 i+2 ... k-1 k] dok izraz y=(i:k)' k>i generie vektor kolonu koja u stvari predstavlja transponovani vektor x. Primjer 1.8.1 Izrazi x=3:8 y=(1:4)' daju x= 3 y= 1 2 3 4 U dobijenim vektorima prirataj je jednak +1. Ukoliko elimo proizvoljnu realnu vrijednost prirataja (koraka), opti oblik izraza za generisanje vektora vrste je x=xmin:xk:xmax pri emu su: xmin, xmax - minimalna i maksimalna vrijednost x-a xk - prirataj Vektor kolona se dobija prostom transpozicijom ovako dobijenog vektora vrste. Primjer 1.8.2 Izrazi a=1.4:2:11 b=-pi:0.6:pi daju 24 xmin<xmax 4 5 6 7 8
MATLAB for Windows a= 1.4000 3.4000 5.4000 7.4000 9.4000 b= Columns 1 through 7 -3.1416 -2.5416 -1.9416 -1.3416 -0.7416 -0.1416 Columns 8 through 11 1.0584 1.6584 2.2584 2.8584 dok izrazi c1=0;c2=8.6;c=c1:(c2-c1)/5:c2 generiu vektor c= 0 Primjer 1.8.3 d=10:-1:5 f=pi:-pi/4:0 daju d= 10 f= 3.1416 2.3562 1.5708 0.7854 0 Ukoliko je xmax < xmin, a prirataj pozitivan, rezultat je prazna matrica [ ]. Isto vai za sluaj xmin < xmax i negativan prirataj. Primjer 1.8.4 p1=5:2:1 p1 = [] p2=6:-1:9 p2 = [] Karakter : moe se koristiti za jednostavno generisanje tabela. Primjer 1.8.5 Izrazi 25 9 8 7 6 5 1.7200 3.4400 5.1600 6.8800 8.6000 Vektori se mogu generisati i sa negativnim priratajem.
0.4584
Osnovne funkcije x=[0:0.2:1.6]'; [x sin(x) cos(x)] daju ans = 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000 1.6000 0 1.0000 0.1987 0.9801 0.3894 0.9211 0.5646 0.8253 0.7174 0.6967 0.8415 0.5403 0.9320 0.3624 0.9854 0.1700 0.9996 -0.0292
Treba pomenuti da MATLAB posjeduje funkcije (bie opisane u treoj glavi) za generisanje vektora slinih mogunosti kao operator :.
Vidimo da se promijenio samo element (3,3) dok ostali elementi i ime matrice ostaju nepromijenjeni. x=[-1 3 6 -3 4] x= -1 3 6 -3
Sada emo element (3,3) nove matrice A zamijeniti sa etvrtim elementom vektora x. A(3,3)=x(4) A= 1 2 3 4 5 6 7 8 -3 U MATLAB-u i vektor moe igrati ulogu indeksa. Ako su x i y vektori, tada izraz x(y) znai: [x(y(1)) x(y(2)) ...x(y(n))] gdje je n=length(y). Primjer 1.9.2 Za vektor x iz prethodnog primjera i y=[1 3 2] izraz x(y) daje ans = -1 6 3 Ako definiemo vektor y1=[-1 2 3] izraz x(y1) daje poruku o greci Index into matrix is negative or zero jer vektor koji se koristi kao indeks ne smije imati elemente koji su negativni ili su jednaki nuli. Napomenimo da bi se poruka o greci javila kod izraza x(y) i u svim sluajevima kada je m<ym, gdje je m=length(x) a ym je maksimalni element vektora y. Na primjer, 27
Osnovne funkcije x=[-1 2 3];y=[1 5]; x(y) daje Index exceeds matrix dimensions Vektori mogu preuzeti ulogu indeksa i u matricama, to omoguava pristup susjednim i nesusjednim vrstama i kolonama i manipulaciju sa njima. U optem sluaju, ako su vektori v i w vektori sa cjelobrojnim elementima, izraz B=A(v,w) generie novu matricu od elemenata matrice A kao
L L O L
1 2 3 A=4 5 6 7 8 3
izraz
B= 2 8 3 -3
Neka je X matrica dimenzije (10x10). Tada izraz
X(1:4,5)
definie submatricu dimenzije (4x1), tj. vektor kolonu, koja se sastoji od prva etiri elementa pete kolone matrice X. Na slian nain, izraz
X(1:5,7:10)
28
MATLAB for Windows daje submatricu dimenzije (5x4) sainjenu od elemenata iz prvih pet vrsta i zadnje etiri kolone matrice X. Provjeriti ove izraze na proizvoljnoj matrici X! Ukoliko elimo iz neke matrice izvui sve vrste ili kolone, na mjestu predvi|enom za indekse vrste ili kolone koristimo karakter :.
Primjer 1.9.4 Izrazi
b=A(:,3) b1=A(2,:)
daju treu kolonu i drugu vrstu matrice A, tj.
b= 3 6 -3 b1 = 4
dok izraz
B=A(:,:)
daje matricu B jednaku samoj matrici A. Veoma sloeni efekti postiu se upotrebom vektorskog indeksiranja sa obije strane znaka jednakosti.
Primjer 1.9.5 Za X i Y definisane izrazima
X=zeros(4,5);Y=rand(4,4)
koji daju matrice: X dimenzije (4x5) iji su svi elementi nule i Y dimenzije (4x4) iji su elementi sluajni brojevi izme|u 0 i 1 (o ovoj funkciji bie vie rijei kasnije)
X(:,[1 3 5])=Y(:,1:3)
daje
29
Osnovne funkcije
0 0 0 0
0 0 0 0
tj. vri zamjenu prve, tree i pete kolone matrice X sa prvom, drugom i treom kolonom matrice Y, respektivno.
Primjer 1.9.6 Ilustrovaemo jo jednu mogunost korienja karaktera : i vektorskog indeksiranja. Za ranije definisanu matricu A, izraz
A1=A(:,3:-1:1)
daje
A1 = 3 6 -3
2 5 8
1 4 7
ime smo izokrenuli redosljed kolona u matrici A. Karakter : moe se upotrijebiti i za preoblikovanje matrice. Naime, izraz A(:) koji se nalazi sa desne strane znaka jednakosti, pravi dugi vektor kolonu koji se sastoji od "nadovezanih" kolona matrice A. Napomenimo da za ovakvu upotrebu karaktera : matrica A mora biti prethodno definisana.
Primjer 1.9.7 Izrazi
b= 1 3 5 2 4 6
Ako izraz A(:) upotrijebimo sa lijeve strane znaka jednakosti, dobijamo matricu iste dimanzije kao A, ali sa novim sadrajem definisanim na desnoj strani izraza.
30
y=12:-2:2 y = 12 10
tada izraz
A(:)=y
daje
A= 12 10 8 6 4 2
to znai da je matrici A promijenjen sadraj. Tako|e treba rei da novi MATLAB ima razvijen niz funkcija za manipulaciju vrstama i kolonama matrice sa kojima emo se sresti u narednom poglavlju. Broj operacija sa pokretnim zarezom, koji raunar izvri u jednoj sesiji, dobija se naredbom flops. Ako elimo da dobijemo broj operacija koje raunar izvri prilikom rjeavanja odre|enog problema, onda se prije poetka rada na tom problemu broja operacija resetuje sa flops(0). Zavriemo ovo poglavlje sa jednom korisnom napomenom. Ukoliko, za vrijeme duih sesija u MATLAB-u, raunar poalje poruku Out of memory, to znai da vie nema mjesta u memoriji za nove varijable i da moramo, prije nastavka rada, relaksirati memoriju. Jedan od naina za osloba|anje prostora u memoriji bio bi brisanje nepotrebnih varijabli pomou komande clear. Drugi, veoma pogodan, nain je unoenje komande pack, koja "sabija" podatke u memoriji, otvarajui time nove slobodne blokove. Ovo se vri tako to se sve varijable prvo sauvaju na disku, memorija se potpuno oisti a zatim se "prepakovane" varijable ponovo vrate, ali sada tako da zauzimaju manji prostor u memoriji. Za korisnike koji se slue PC raunarima pod Windows-om (a to smo, htjeli ne htjeli, veina nas) a posjeduju osrednji raunar dobra je preporuka poveavanje swap prostora na disku to se postie (naravno van MATLAB-a) u Control panelu vaeg Windowsa u sekciji 386 Enhanced klikom na opciju Virtual memory i odgovarajuim podeavanjima u ovom dialog box-u.
31
glava druga
2.1 TRANSPONOVANJE
Transpozicija (zamjena vrsta i kolona) matrice sa realnim elementima vri se pomou znaka '. U specijalnim sluajevima, kada se radi o skalaru, vektoru vrsti ili vektoru koloni, operacija transpozicije daje skalar, vektor kolonu ili vektor vrstu, respektivno. Primjer 2.1.1 Iskazi A=[-1 2 4;2 -3 1;-4 -5 -6],B=A' rezultiraju u A= -1 2 4 2 -3 1 -4 -5 -6 B= -1 2 -4 2 -3 -5 33
Elementarne operacije sa matricama i poljima brojeva 4 1 -6 dok iskazi a=[5.2]',x=[-1 3 8]',y=[-1;-2;4]' daju a= 5.2000 x= -1 3 8 y= -1 -2 4 Ukoliko operaciju transpozicije primijenimo na matricu sa kompleksnim elementima Z moramo voditi rauna o jednoj specifinosti MATLAB-a. Naime, Z' vri tzv. konjugovanu transpoziciju, tj. transponuje matricu i konjuguje svaki njen element. Primjer 2.1.2 Izrazi Z=[-1+2*i,2+3*i;-3+4*i,5-2*i], W=Z' daju Z= -1.0000 + 2.0000i 2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 - 2.0000i W= -1.0000 - 2.0000i -3.0000 - 4.0000i 2.0000 - 3.0000i 5.0000 + 2.0000i Za dobijanje transponovane kompleksne matrice moemo ravnopravno koristiti jedan od izraza datih u narednom primjeru: Primjer 2.1.3 Unoenjem Y=Z.',W=conj(Z') dobijamo isti rezultat Y= 34
MATLAB for Windows -1.0000 + 2.0000i 2.0000 + 3.0000i W= -1.0000 + 2.0000i 2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 - 2.0000i -3.0000 + 4.0000i 5.0000 - 2.0000i
Elementarne operacije sa matricama i poljima brojeva kao konstantna matrica sa dimenzijom prilago|enom matrici koja se sabira (ili oduzima). Primjer 2.2.3 Za matrice B, x i skalar a, definisane u primjeru 2.1.1, izrazi G=B+a,G1=x-a daju G= 4.2000 7.2000 1.2000 7.2000 2.2000 0.2000 9.2000 6.2000 -0.8000 G1 = -6.2000 -2.2000 2.8000 iako, po pravilima matrinog rauna, nijesu korektni. Primjer 2.2.4 Provjerimo rezultate iz prethodnog primjera matematiki korektnim izrazima G=B+a*ones(B),G1=x-a*ones(x) sa rezultatom G= 4.2000 7.2000 1.2000 7.2000 2.2000 0.2000 9.2000 6.2000 -0.8000 G1 = -6.2000 -2.2000 2.8000 uz upozorenje da e ovakav nain rada biti izbaen u kasnijim verzijama MATLAB-a This usage of ones(X) is obsolete and will be eliminated in future versions. Please use ones(size(X)) instead. Dakle moraemo koristiti naredbu ones(size(X)). Sva navedena pravila, ukljuujui i ono o kompatibilnosti skalara i matrice pri sabiranju i oduzimanju, vae za matrice i skalare sa kompleksnim elementima. 36
MATLAB for Windows Primjer 2.2.5 Izrazi z=1+2*i;N=z+Z pri emu smo kompleksnu matricu Z ranije definisali u primjeru 2.1.2, daju N= 0 + 4.0000i 3.0000 + 5.0000i -2.0000 + 6.0000i 6.0000
c=x*y',c1=y*x' daju isti rezultat, tj. skalarni proizvod dva vektora c= 5 c1 = 5 Spoljni proizvodi rezultirae iz izraza D=x'*y,D1=y'*x D= 1 2 3
-1 -2 -3
2 4 6
x*y daje poruku greke: ??? Error using ==> * Inner matrix dimensions must agree. Matrica ili vektor prirodno se mnoi sa skalarom. Primjer 2.3.3 Sa prethodno definisanim A i x (primjeri 2.1.1 i 2.3.2), izrazi A*pi,6.3*x rezultiraju sa ans = -3.1416 6.2832 12.5664 6.2832 -9.4248 3.1416 38
MATLAB for Windows -12.5664 -15.7080 -18.8496 ans = 6.3000 12.6000 18.9000
Elementarne operacije sa matricama i poljima brojeva g= 1 -2 6 g1 = -2 -4 -6 Vidimo da ukoliko je jedan od inilaca skalar, rezultat primjene operatora .* e biti isti kao obinog matrinog mnoenja *, tj. svaki element matrice ili vektora mnoi se sa skalarom.
matricama
iz
prethodnog
primjera
provjeriti
relaciju
40
MATLAB for Windows det(A*B)-det(A)*det(B) ans = 0 Inverzna matrica X kvadratne nesingularne matrice X, dobija se primjenom operatora inv(X). Primjer 2.5.3 Za matrice A i B iz primjera 2.5.1, izrazi Ai=inv(A),Bi=inv(B) daju Ai = -0.0179 0.5536 -0.1607 0.0893 0.2321 -0.1964 0.0714 -0.2143 0.1429 Bi = -0.0836 - 0.2719i 0.2241 + 0.1897i -0.0915 - 0.0597i 0.0663 + 0.0650i 0.2586 + 0.1034i -0.0464 - 0.0955i -0.0371 - 0.1764i 0.1552 - 0.1379i 0.1260 - 0.0265i U MATLAB-u ne postoji posebni operator za izraunavanje adjungovane matrice ali je, na osnovu definicije inverzne matrice, oigledno da izraz adjA=inv(A)*det(A) daje adjungovanu matricu matrice A adjA = 2.0000 -62.0000 18.0000 -10.0000 -26.0000 22.0000 -8.0000 24.0000 -16.0000
41
Elementarne operacije sa matricama i poljima brojeva Znaenje ovih operatora razmotriemo, za sada, samo za specijalni sluaj kada se radi o kvadratnim nesingularnim matricama. Neka je, naime, matrica A kvadratna i nesingularna. Tada izraz: X=A\B odgovara mnoenju matrice B s lijeva sa A-1, tj. X=A-1B, dok izraz: X=B/A odgovara mnoenju matrice B s desna sa A-1, tj. X=BA-1, pri emu se primjenom operatora \ i / rezultati dobijaju direktno, bez raunanja inverzne matrice. Dijeljenje s lijeva A\B definisano je samo u sluaju kada je broj vrsta varijabli A i B isti. Primjer 2.6.1 Za matrice A i B iz prethodnog primjera i b=[1 2 3]', izrazi x=A\b,X=A\B imaju smisla i daju x= 0.6071 -0.0357 0.0714 X= 0.3393 - 0.5893i 1.0893 - 0.4464i -0.0893 + 0.3750i 0.3036 - 0.0536i 0.5536 - 0.7679i -0.5536 + 0.1250i -0.3571 + 0.3571i -0.3571 + 0.2857i 0.3571 - 0.0000i dok za c=2 i d=b', izrazi x=A\c,X=A\d nijesu definisani i rezultirae porukom o neslaganju dimenzija. Izraz za dijeljenje s desna B/A moe se izraziti preko dijeljenja s lijeva kao B/A=(A'\B')', i ima smisla samo ako je broj kolona varijabli A i B isti. Primjer 2.6.2 Za veliine iz prethodnog primjera, izrazi y=d/A,Y=B/A imaju smisla, i daju rezultate 42
MATLAB for Windows y= 0.3750 0.3750 -0.1250 Y= 0.1071 - 0.1429i -0.3214 + 0.4286i -0.0357 + 0.2143i 0.2500 + 0.0893i 0.2500 - 0.7679i -0.2500 + 0.3036i 0.3214 + 0.3393i -1.9643 + 0.4821i 0.8929 - 0.4464i dok izrazi y=c/A b/A nijesu definisani i rezultirae porukom o neslaganju dimenzija matrica koje se "dijele". Napomenimo ovdje da izraz X=A\B predstavlja rjeenje za AX=B, dok izraz X=B/A predstavlja rjeenje za XA=B. O operatorima \ i / bie vie rijei u osmom poglavlju, gdje emo razmotriti njihovu upotrebu pri rjeavanju skupa linearnih jednaina u optem sluaju.
Elementarne operacije sa matricama i poljima brojeva A= 1 0 -2 -1 2 0 B= -3 0 4 0 2 -1 C=A./B Warning: Divide by zero C= -0.3333 NaN -0.5000 -Inf 1.0000 0 D=B./A Warning: Divide by zero D= -3 NaN -2 0 1 -Inf Poto A i B iz primjera sadre neke elemente jednake nuli, dobijamo poruku o dijeljenju sa nulom, a u rezultatu se javlja Inf ili NaN. Primjer 2.7.2 Za a=2 i polja A i B iz prethodnog primjera, izraunati a./A i B./a. Unoenjem A1=a./A dobijamo Warning: Divide by zero A1 = 2 Inf -1 -2 1 Inf dok B1=B./a daje B1 = -1.5000 0 2.0000 0 1.0000 -0.5000 Vidimo da je efekat isti kao da smo koristili naredbe: A1=a*ones(size(A))./B, odnosno 44
MATLAB for Windows B1=B./(a*ones(size(B))) Postoji jedna znaajna razlika ove verzije MATLAB-a u odnosu na DOS verzije u pogledu dijeljenja skalara poljem brojeva. Naime u MATLAB-u for Windows izraz: 4./A je korektan i rezultira Warning: Divide by zero ans = 4 Inf -2 -4 2 Inf dok bi u prethodnim verzijama MATLAB-a rezultirao grekom. Uzrok ovoga je bio taj to je "stari" MATLAB taku tumaio kao decimalni zarez pa matrine dimenzije nijesu odgovarale. Obino se primjenjivao trik da se prethodni izraz zapisivao u obliku 4../A gdje prva taka i dalje oznaava decimalni zarez a druga operaciju na polju brojeva.
Elementarne operacije sa matricama i poljima brojeva B=A^2 B= 8 6 5 -5 12 6 9 2 11 C=A^0 C= 1 0 0 0 1 0 0 0 1 Ukoliko p nije cio broj, ve proizvoljan realan broj, operacija stepenovanja kvadratne matrice A ima razliito znaenje i vri se po drugaijem pravilu. Ap je definisano preko sopstvenih vrijednosti i vektora (za definiciju ovih pojmova vidi osmo poglavlje) kao Ap=VDpV -1, gdje je D dijagonalna matrica koja sadri sopstvene vrijednosti matrice A na glavnoj dijagonali, a V je matrica sainjena od odgovarajuih sopstvenih vektora matrice A. Samo stepenovanje D jednostavno se vri stepenovanjem pojedinih skalarnih elemenata sa glavne dijagonale. Ukoliko A sadri kompleksne sopstvene vrijednosti, A e tako|e biti kompleksna matrica. Primjer 2.8.2 Za matrice A= 2 -2 3 1 1 1 1 3 -1 B= -2 2 3 2 -2 1 2 4 2 nai matrine stepene A2.6 i B-1.56. A1=A^2.6 A1 = 9.1993 + 0.0000i -0.4674 + 4.2285i 8.6667 - 4.2285i 8.1993 + 0.0000i 2.4483 + 0.3844i 6.7510 - 0.3844i 8.1993 - 0.0000i 4.3218 - 5.3817i 4.8775 + 5.3817i B1=B^(-1.56) B1 = 46
MATLAB for Windows -0.0730 - 0.0000i -0.0176 + 0.0000i 0.1023 + 0.0000i 0.3043 - 0.0000i -0.0086 - 0.0000i -0.1376 + 0.0000i -0.1464 + 0.0000i 0.0935 + 0.0000i 0.1493 - 0.0000i Na slian nain, izraz pA, gdje je p skalar a A kvadratna matrica, rauna se preko sopstvenih vrijednosti i vektora. Primjer 2.8.3 Za matrice A i B iz prethodnog primjera nai (2)A i (-3.6)B. A1=2^A A1 = 5.0000 -0.6833 3.6833 3.0000 2.4833 2.5167 3.0000 2.2333 2.7667 B1=(-3.6)^B B1 = 1.0e+002 * 0.0825 + 0.5963i 0.1176 + 0.8498i 0.1482 + 1.0736i 0.0470 + 0.3472i 0.0684 + 0.4958i 0.0870 + 0.6259i 0.1458 + 1.0508i 0.2070 + 1.4985i 0.2613 + 1.8939i Izraz AB, gdje su A i B matrice, nije korektan i ukoliko pokuamo da stepenujemo matricu sa matricom, dobiemo poruku greke. Raunar e javiti greku i u svim sluajevima kada pokuamo raunati matrini stepen a matrica nije kvadratna.
Elementarne operacije sa matricama i poljima brojeva 1.0000 1.0000 1.0000 1.0000 81.0000 1.0000 C= 4.0000 0.2500 27.0000 2.0000 -2.0000 1.0000 2.0000 64.0000 0.5000 Za vektor x=[1 -2 3], izraz A.^x daje poruku ??? Error using ==> .^ Matrix dimensions must agree. Specijalni sluajevi generalnog izraza C=AB nastupaju kada je u osnovi ili eksponentu skalar. Tako izrazi C=A.^p i D=p.^A, gdje je p skalar a A matrica proizvoljne dimenzije, u MATLAB-u imaju smisla a elementi C i D raunaju se kao c(i,j)=a(i,j)p i d(i,j)=pb(i,j) Primjer 2.9.2 Za x=[-1 -2 2] i y=[0.5 2 3] imamo (-3).^x ans = -0.3333 0.1111 9.0000 y1=y.^3 y1 = 0.1250 8.0000 27.0000 3.^y ans = 1.7321 9.0000 27.0000 Primjetimo da bi posljedni izraz u ranijim verzijama MATLAB-a bio protumaen kao greka (zbog toga to bi taka bila okarakterisana kao decimalni zarez) dok je ovdje potpuno korektan.
MATLAB for Windows Elementarne matematike funkcije Kompleksne funkcije abs angle conj apsolutna vrijednost ili moduo real fazni stav imag konjugovanje Numerike funkcije fix floor ceil gcd rat zaokruivanje prema nuli zaokruivanje prema - zaokruivanje prema najvei zajedniki djelilac racionalna aproksimacija round rem sign lcm rats zaokr. ka najbl. cijelom broju ostatak pri dijeljenju funkcija znaka (signum) najmanji zajedniki sadralac racionalni rezultat realni dio imaginarni dio
Trigonometrijske funkcije sin asin cos acos tan atan atanh sech csc acsc cot acot sinus arkus sinus kosinus arkus kosinus tangens arkus tangens arkus tangens hiperbolni sekans hiperbolni kosekans arkus kosekans kotangens arkus kotangens sinh asinh cosh acosh tanh atan2 sec asech csch acsch coth acoth hiperbolni sinus arkus sinus hiperbolni kosinus hiperbolni arkus kosinus hiperbolni tangens hiperbolni arkus tangens etiri kvadranta sekans arkus sekans hiperbolni kosekans hiperbolni arkus kosekans hiperbolni cotangens hiperbolni arkus kotangens hiperbolni
Eksponencijalne funkcije 49
Elementarne operacije sa matricama i poljima brojeva exp log10 expint pow2 eksponencijalna funkcija log logaritam sa osnovom 10 sqrt eksponencijalna integralna f-ja log2 stepen dvojke prirodni logaritam kvadratni korijen logaritam sa osnovom 2
Beselove, beta, gama i eliptike funkcije besselj besseli bessel beta betaln
c
bessely Beselova funkcija druge vrste betainc nekompletna beta funkcija gamma gama funkcija gammaln logaritam gama funkcije ellipke kompletna eliptika funkcija
modifik. Beselova f-ja prve vrste besselk modif. Besel. f-ja druge vrste
Beselova f-ja komplex. argum. beta funkcija logaritam beta funkcije gammain nekompletna gama funkcija ellipj Jakobijeva eliptika funkcija
Funkcija greke erf erfcx funkcija greke erfc skalirana komplem. f-ja greke erfinv komplementarna f-ja greke inverzna funkcija greke
Ako sa f(X) oznaimo generalnu matematiku funkciju, moemo sumirati neke osnovne osobine ove grupe operatora: 1) Zadati argument X (koji moe biti skalar, vektor ili matrica) tretira se kao polje brojeva, tj. za
X 11 X 21 X = M X m1 imamo
X 12 X 22 M
L L O
X m2 L
X 1n X 2n M X mn
50
f ( X 11 ) f (X ) 21 f (X) = M f ( X m1 )
f ( X 12 ) L f ( X 22 ) L M O f ( X m2 ) L
f ( X 1n ) f ( X 2n ) M f ( X mn )
2) X moe imati realne ili kompleksne elemente. 3) Sloeni izrazi i nove funkcije grade se pomou elementarnih funkcija i operacija za manipulaciju sa poljima brojeva +,-,.*,./,.\,.^.
Z= -1.0000 + 2.0000i 1.0000 - 3.0000i 3.0000 + 4.0000i 2.0000 - 6.0000i izraz az=abs(Z) daje az = 2.2361 3.1623 5.0000 6.3246 tj. apsolutne vrijednosti elemenata polja Z. Izraz an=angle(Z) daje an = 2.0344 -1.2490 0.9273 -1.2490 tj. uglove (fazne stavove) elemenata Z izraene u radijanima. Ukoliko elimo dobiti njihove vrijednosti u stepenima, primijeniemo
51
Elementarne operacije sa matricama i poljima brojeva an*180/pi to daje ans = 116.5651 -71.5651 53.1301 -71.5651 Izraz Re=real(Z) daje realni dio polja (ili matrice) Z, tj. Re = -1 1 3 2 a na slian nain: Im=imag(Z) daje imaginarni dio Im = 2 -3 4 -6 dok se konjugovana matrica (polje) dobija pomou izraza Zc=conj(Z) Zc = -1.0000 - 2.0000i 1.0000 + 3.0000i 3.0000 - 4.0000i 2.0000 + 6.0000i
-2
-1.5
52
-2
-1.5
-1
-0.5
0.5
1.5
-2
-1.5
-1
-0.5
0.5
1.5
ceil(x) zaokruivanje prema + Primjer 2.10.2 Neka je matrica (ili polje brojeva) data sa
A= -3.5600 5.2300 2.6700 -1.2400 Primjena pojedinih operatora za zaokruivanje daje: R=round(A) R= -4 5 3 -1 F=fix(A) F= -3 5 2 -1 C=ceil(A) C= -3 6 3 -1 F1=floor(A) F1 = -4 5 2 -2 53
Elementarne operacije sa matricama i poljima brojeva Kompleksni brojevi se zaokruuju tako to se posebno zaokrue realni i imaginarni djelovi. Ako uzmemo Z iz prethodnog primjera, izraz Z1=Z*2*pi daje Z1 = -6.2832 +12.5664i 6.2832 -18.8496i 18.8496 +25.1327i 12.5664 -37.6991i pa operatori za zaokruivanje round i ceil daju round(Z1) ans = -6.0000 +13.0000i 19.0000 +25.0000i ceil(Z1) ans = -6.0000 +13.0000i 19.0000 +26.0000i
MATLAB for Windows ans = -0.1531 + 0.3345i -2.6911 - 0.3836i -13.1288 -15.2008i 7.0948 + 2.0646i log(X) daje prirodne logaritme elemenata polja X. Ukoliko je z=rej negativan ili kompleksan broj, izraz log(z) rauna kompleksni prirodni logaritam, po formuli ln z= ln r+ i. Logaritam za osnovu 10 od elemenata polja X definisan je sa operatorom log10(X).
Primjer 2.10.4 Za polja A i Z iz prethodnog primjera, dobijamo:
log(A) ans = 1.2698 + 3.1416i 1.6544 0.9821 0.2151 + 3.1416i log(Z) ans = 0.8047 + 2.0344i 1.1513 - 1.2490i 1.6094 + 0.9273i 1.8444 - 1.2490i log10(A) ans = 0.5514 + 1.3644i 0.7185 0.4265 0.0934 + 1.3644i log10(Z) ans = 0.3495 + 0.8835i 0.5000 - 0.5425i 0.6990 + 0.4027i 0.8010 - 0.5425i Operator sqrt(X) daje kvadratni korijen elemenata matrice X, pri emu se kompleksni rezultat dobije za negativne elemente, po definiciji
z = r [cos( / 2 + k ) + i sin( / 2 + k )], k = 0,1 .
Elementarne operacije sa matricama i poljima brojeva ans = 0.7862 + 1.2720i 1.4426 - 1.0398i 2.0000 + 1.0000i 2.0402 - 1.4705i Specifine funkcije ove grupe su log2 i pow2. log2 kao funkcija jednog argumenta log2(X) daje logaritam sa osnovom 2 elemenata matrice. pow2(X), funkcija jednog argumenta daje matricu iji su elementi 2x. Za matrice sa realnim argumentima moe se zahtjevati da funkcija log2(X) ima dva izlazna argumenta: [f,e]=log2(X) Vrijednost matrice f su brojevi izme|u 0.5 i 1 takvi da vai X=f 2e. Funkcija x=pow2(f,e) ima suprotan efekat.
Primjer 2.10.6 Nai logaritam sa osnovom 2 matrice A koriene u prethodnim primjerima, etvrti stepen broja 2 i na nizu brojeva od 1 do 16 demonstrirati ostale mogunosti naredbi log2 i pow2. log2(A) ans = 1.8319 + 4.5324i 2.3868 1.4168 0.3103 + 4.5324i x=pow2(4) x= 16 [f,e]=log2(1:16) f= Columns 1 through 7 0.5000 0.5000 0.7500 0.5000 0.6250 0.7500 0.8750 Columns 8 through 14 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 Columns 15 through 16 0.9375 0.5000 e= Columns 1 through 12 1 2 2 3 3 3 3 4 4 4 4 4 Columns 13 through 16 4 4 4 5 x=pow2(f,e) x= Columns 1 through 12
56
Operatori asin(X), acos(X), atan(X), acot(X), asec(X) i acsc(X) daju inverzne trigonometrijske funkcije u radijanima. Za realne vrijednosti x, takve da je abs(x)<1, funkcije asin(x) i acos(x) daju vrijednosti u opsegu [0, ] i [-/2, /2], respektivno, dok atan(x) i acot(x) daje vrijednosti u opsegu [-/2, /2], za realne vrijednosti x. Za x1 asec(x) i acsc(x) daje vrijednosti u opsegu [0, ] i [-/2, /2] respektivno. Za realne x, sa abs(x)>1, kao i za kompleksne vrijednosti x, acos(x) i asin(x) daju kompleksne vrijednosti po pravilu
tan 1 ( x) = i ln i + x 2 i x
cot 1 ( x) = i ln ix + 1 2 ix 1
Funkcija atan2(Y,X) daje tzv. etvorokvadrantni arkus tangens. Vidimo da zahtijeva dva ulazna argumenta, jer vrijednosti Y i X odre|uju kvadrant u kome se pridruena varijabla X+iY nalazi, tako da za raunanje arkus tangensa nije dovoljno poznavati samo odnos Y/X. Rezultat se dobija u opsegu [-, ]. 57
Elementarne operacije sa matricama i poljima brojeva U m-fajlu postoje i hiperbolne funkcije sinh, cosh, tanh, coth, sech i csch kao i inverzne hiperbolne funkcije asinh, acosh, atanh, acoth, asech i acsch.
Primjer 2.10.7 Za polja A i Z iz primjera 2.10.3, ilustrovaemo pojedine od navedenih elementarnih matematikih funkcija:
sin(A),sin(A+2*pi),sin(Z),sin(Z+2*pi) ans = 0.4063 -0.8690 0.4543 -0.9458 ans = 0.4063 -0.8690 0.4543 -0.9458 ans = 1.0e+002 * -0.0317 + 0.0196i 0.0847 - 0.0541i 0.0385 - 0.2702i 1.8342 + 0.8394i ans = 1.0e+002 * -0.0317 + 0.0196i 0.0847 - 0.0541i 0.0385 - 0.2702i 1.8342 + 0.8394i asin(Z) ans = -0.4271 + 1.5286i 0.3076 - 1.8642i 0.6340 + 2.3055i 0.3181 - 2.5426i tan(Z), cot(A), 1./tan(A) ans = -0.0338 + 1.0148i 0.0045 - 1.0021i -0.0002 + 0.9994i 0.0000 - 1.0000i ans = -2.2489 -0.5694 -1.9609 -0.3434 ans = -2.2489 -0.5694 -1.9609 -0.3434 atan2(imag(Z),real(Z)) ans = 2.0344 -1.2490 58
MATLAB for Windows 0.9273 -1.2490 angle(Z) ans = 2.0344 -1.2490 0.9273 -1.2490 sec(A), sec(A),1./cos(A) ans = -1.0944 2.0210 -1.1225 3.0789 ans = -1.0944 2.0210 -1.1225 3.0789 ans = -1.0944 2.0210 -1.1225 3.0789 sinh(A) ans = -17.5674 93.3937 7.1854 -1.5831 Vidimo da za Z=X+iY operatori angle(Z) i atan2(Y,X) daju isti rezultat.
59
Elementarne operacije sa matricama i poljima brojeva poznata kao gama funkcija, za koju vai znaajna osobina gamma(n+1)=n! za n cijeli broj. gammaln(x) predstavlja logaritam gama funkcije. Nekompletna gama funkcija se rauna (operator gammainc(x,a)) po sljedeoj formuli
1 ( x , a ) = t a 1e t dt
0 x
Beta funkcija se rauna operatorom beta(x,y) a njen logaritam operatorom betaln(x,y). Beta funkcija je data sljedeim izrazom
( x , y ) = t x 1 (1 t ) y 1 dt
0
U teoriji vjerovatnoe veoma se esto koristi pojam funkcije greke. Funkcija greke (operator erf(x)) je data kao
2 erf( x) = 2 e t dt 0
Operator komplemantarne funkcije greke je erfc(x)=1-erf(x) dok se inverzna funkcija greke dobija operatorom y=erfinv(x) (gdje je x=erf(y) i y(,) i x(-1,-1)). Primjer 2.10.8 Nacrtati Beselovu funkciju prve i druge vrste prvog reda za x=0:0.25:10.
x=0:.25:10; figure(1),plot(x,besselj(1,x)) y=0:.25:20; figure(2),plot(y,bessely(1,y)) Dakle prilikom crtanja se otvaraju dva grafika prozora u kojima se crtaju Besselova funkcija prve i druge vrste. O funkcijama plot i figure bie vie rijei u narednom poglavlju.
0.6 0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 0 2 4 6 8 10 -1.5 -2 -2.5 -3 0 5 10 15 20 0.5 0 -0.5 -1
60
x=0.02:.02:1; plot(x,gammainc(x,2*ones(size(x))))
0.3 0.25 0.2 0.15 0.1 0.05 0
0.2
0.4
0.6
0.8
Slika 2.2: Nekompletna gama funkcija Primjer 2.10.10 Nai beta funkciju argumenata 3 i 2 i provjeriti funkciju betaln.
beta(3,2) ans = 0.0833 betaln(3,2),log(beta(3,2)) ans = -2.4849 ans = -2.4849 Primjer 2.10.11 Nacrtati funkciju greke i komplementarnu funciju greke za argumente x=-3:0.1:3. Demonstrirati inverznu funciju greke za argumenta od -1 do 1. plot(-3:.1:3,erf(-3:0.1:3)) plot(-3:.1:3,erfc(-3:0.1:3)) x=erfinv(-1:.2:1) x= Columns 1 through 7 -Inf -0.9062 -0.5951 -0.3708 -0.1791 61
0.1791
Elementarne operacije sa matricama i poljima brojeva Columns 8 through 11 0.3708 0.5951 0.9062
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -3 -2 -1 0 1 2 3
Inf
2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 -3 -2 -1 0 1 2 3
a)
b)
a / b x greska x
Ako se argument greska izostavi, njegova se vrijednost uzima po pravilu opisanom u help-u. Druga naredba za racionalnu aproksimaciju je rats(x,l) koja vraa prosti razlomak koji aproksimira broj x (odnosno svaki element matrice x) a l predstavlja mjeru tanosti sa kojom e se aproksimacija izvriti. Ako se l izostavi podrazumjeva se vrijednost l=13, za bolju preciznost treba uzeti vee l.
Primjer 2.10.12 Demonstrirati naredbe rat i rats.
Unoenje
rat(0.234), rat(pi) rezultira sa 0 + 1/(4 + 1/(4 + 1/(-3 + 1/(11)))) 3 + 1/(7 + 1/(16)) Dakle vai priblina relacija:
62
= 3+
1 7+ 1 16
[a,b]=rat(pi) a= 355 b= 113 to znai da je 355/113. Isti izraz sa zadatom veom tanou daje [a,b]=rat(pi,2^(-52)) a= 245850922 b= 78256779 Unoenje rats(1.234) rezultira sa ans = 617/500 dok sa poveanom ili smanjenom tanou dobijamo rats(pi,20) ans = 312689/99532 rats(pi,2) ans = 3 Tako|e su veoma znaajne funkcije gcd (najvei zajedniki djelilac), lcm (najmanji zajedniki sadralac), rem (ostatak pri dijeljenju) i sign (znak broja). Funkcija gcd(a,b) za cijele brojeve a i b nalazi najmanji zajedniki djelilac (broj sa kojim se mogu podijeliti oba broja bez ostatka). Oblik ove naredbe [A,B,C]= gcd(a,b) daje A najmanji zajedniki djelilac B i C tako da vai: A=aB+bC. Funkcija lcm(a,b) za cijele brojeve a i b daje broj u kojem se a i b sadre bez ostatka. 63
G=gcd(17,6) G= 1 G=gcd(25,35) G= 5 [G,C,D]=gcd(25,35) G= 5 C= 3 D= -2 GCD(0,0) ans = 0 Dakle brojevi 17 i 6 su uzajamno prosti. Po definiciji se usvaja da je gcd(0,0)=0. Demonstrirajmo i funkciju lcm: lcm(23,34), lcm(12,42) ans = 782 ans = 84
Odredimo ostatak pri dijeljenju 23 i 3, 234 i 3, pa demonstrirajmo funkciju sign.
Unoenjem
Elementarne operacije sa matricama i poljima brojeva 11 12 13 14 21 22 23 24 31 32 33 34 Za rotaciju u smjeru suprotnom kazaljki na satu koristimo rot90(A,-1) ans = 31 21 11 32 22 12 33 23 13 34 24 14 Demonstrirajmo naredbe flipud i fliplr. Unoenjem flipud(A),fliplr(A) dobijamo ans = 31 32 33 34 21 22 23 24 11 12 13 14 ans = 14 13 12 11 24 23 22 21 34 33 32 31 Uoimo da dobijene matrice imaju iste dimenzije kao poetna matrica. flipud moemo realizovati pomou operatora: A(size(A,1):-1:1,:) ans = 31 32 33 34 21 22 23 24 11 12 13 14 Naredbi fliplr odgovara A(:,size(A,2):-1:1)
66
glava trea
GRAFIKA
MATLAB posjeduje mogunost dobrog grafikog predstavljanja funkcija jedne promjenjive, kao i izuzetno jednostavnog i kvalitetnog predstavljanja funkcija dvije promjenjive. U rudimentarnom obliku, koliko to dozvoljava povrina ekrana, MATLAB je u stanju da predstavi i funkcije tri promjenljive. Predstavljanje funkcija dvije promjenljive moe biti u obliku "trodimenzionih (mreastih) crtea", 2-D obojenih povrina, kolornih mapa i putem izo linija. U okviru ove glave dat je pregled grafikih mogunosti MATLAB-a kao i opcije za grafiko procesiranje. "Upravljanje" grafikim okruenje, kao i samim graficima opisano je u estoj glavi.
3.1 GRAFI^KO PREDSTAVLJANJE MATRICA, VEKTORA I FUNKCIJA JEDNE PROMJENJIVE 3.1.1 OSNOVNI OBLIK
Najjednostavniji oblik predstavljanja vektora vrste ili vektora kolone je korienjem naredbe plot. Primjer 3.1.1 Nacrtati y=[1 2 4 8 16 32] Postupak je sljedei: y=[1 2 4 8 16 32]; plot(y)
16 14 12 10 8 6 4 2 0 1 1.5 2 2.5 3 3.5 4 4.5 5
Slika 3.1. Grafik vektora vrste Sa slike 3.1. moemo zapaziti da je za nezavisno promjenjivu uzet redni broj elementa u vektoru y. Ako nezavisno promjenljivu oznaimo sa x onda je 69
Grafika raunar uzeo x=[1 2 3 4 5 6] i nacrtao grafik spajajui take (1,y(1)), (2,y(2)), (3,y(3)), (4,y(4)), (5,y(5)) i (6,y(6)). U optem sluaju sa plot(y) se crta grafik spajajui take (i,y(i)) za i=1,2,3...,N, gdje je N duina vektora y. Vektor y moe biti i vektor kolona. Provjeriti da se dobija isti grafik ako zadamo y1=y' i nacrtamo plot(y1). Prilikom crtanja grafika, otvara se grafiki prozor za koji vae opta pravila svih Windows prozora. Na komandni prompt se mogue vratiti na vie naina, a od njih pominjemo dva: pritisnuti Alt, a zatim pritiskati Tab dok se ne pojavi natpis MATLAB Command Window; nakon toga se otpuste oba tastera. Na isti nain moemo se vratiti u grafiki prozor. Za prelazak u otvoreni grafiki prozor pored kombinacije Alt+Tab moe posluiti opcija Window MATLAB-ovog komandnog prozora. Nezavisno promjenljiva moe biti zadata posebno. U tom sluaju se crtanje vektora y u zavisnosti od x vri sa plot(x,y). Primjer 3.1.2 Ako su pri nekom mjerenju za vrijednosti nezavisno promjenljive x=[-2 -1 0 1 3 4 7 6] dobijene vrijednosti koje su zapisane odgovarajuim redom u y=[-1 -0.5 0 1 3 6 9 8], nacrtati y(x). x=[-2 -1 0 1 3 4 7 6]; y=[-1 -0.5 0 1 3 6 9 8]; plot(x,y)
9 8 7 6 5 4 3 2 1 0 -1 -2 0 2 4 6 8
Slika 3.2. Grafik funkcije y(x) Grafik se u ovom sluaju dobija spajanjem taaka (x(i),y(i)) za i=1,2,...,N, gdje je N broj elemenata vektora x i y. Ukoliko broj elemenata u x i y nije isti umjesto grafika dobiemo poruku greke da se dimenzije ne slau. Vektori x i y ne
70
MATLAB for Windows moraju oba biti vektori vrste ili vektori kolone, ve jedan moe biti kolona a drugi vrsta, i obrnuto. Probati plot(x,y'). Posebno je znaajna primjena operatora plot za crtanje grafika funkcija sa jednom promjenljivom y=f(x). Primjer 3.1.3 Nacrtati grafik funkcije y=xsin2(x) u intervalu -4x4. x=-4:.1:4; y=x.*sin(pi*x).^2; plot(x,y)
4 3 2 1 0 -1 -2 -3 -4 -4 -3 -2 -1 0 1 2 3 4
71
Grafika
1 1 3 2 3 0 2 5 1 y= 4 2 5 1 3 0 1 2 2
y=[1 -1 3;2 3 0;2 5 -1;.5 4 -2 0; -1 3 0;-2 2 1]; plot(y) Vidimo da je svaka kolona predstavljena razliitim tipom, odnosno bojom linije. Kao nezavisno promjenljiva uzet je redni broj elementa u koloni. Tako je prvi grafik dobijen spajanjem taaka (i,y(i,1)) za sve vrijednosti i.
5 4 3 2 1 0 -1 -2 1 2 3 4 5 6
Slika 3.4. Grafiko predstavljanje matrice po kolonama I u ovom sluaju je mogue predstaviti sve kolone u funkciji nezavisno promjenljive x. Primjer 3.1.5 Nacrtati grafik pojedinih kolona matrice y u funkciji vrijednosti x.
72
x=[1 2 4 5 7 8]; y=[1 -1 3;2 3 0;2 5 -1;5 4 -2; -1 3 0;-2 2 1]; plot(x,y) Duina vektora x i kolona matrice y mora biti ista. Ako to nije sluaj, onda e raunar provjeriti da moda duina vrsta u matrici y nije ista kao i duina vektora x. Ukoliko jeste, onda e nacrtati vrste matrice y u funkciji od x, a ako nije, javie greku da se dimenzije ne slau.
5 4 3 2 1 0 -1 -2 1 2 3 4 5 6 7 8
Slika 3.5. Grafik matrice y(x) Prethodni postupak se moe iskoristiti za crtanje vie funkcija na istom grafiku. Primjer 3.1.6 Nacrtati funkcije y=x2 i y=x3 u intervalu -1x1. x=-1:0.02:1; y1=x.^2; y2=x.^3; y=[y1;y2]'; plot(x,y) 73
Grafika
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1
Slika 3.6. Dvije funkcije na istom grafiku Vie funkcija se moe nacrtati na istom grafiku i na sljedei nain: plot(x1,y1,x2,y2,...,xn,yn). Primjer 3.1.7 Nacrtati na istom grafiku funkcije: y=x za -1x1, y=xex za 0x1, y=sin(x) za -1x0. x1=-1:.1:1; y1=x1; x2=0:.1:1; y2=x2.*exp(x2); x3=-1:.1:0; y3=sin(pi*x3); plot(x1,y1,x2,y2,x3,y3)
3 2.5 2 1.5 1 0.5 0 -0.5 -1 -1 -0.5 0 0.5 1
MATLAB for Windows U dosadanjim primjerima odabiranje tipa linija za crtanje grafika je vreno automatski ili, kako se esto kae, po defaultu. Tip linije za crtanje pojedinih grafika se moe zadavati po elji. Na raspolaganju su puna linija, isprekidana, takasta, crta-taka-crta, kao i oznaavanje vrijednosti sljedeim znacima: ., o, x, *, +. Naredba plot(x1,y1,'-',x2,y2,'-.',x3,y3,'o') daje prvu funkciju iscrtanu punom linijom, drugu linijom crta-taka-crta, a treu oznaenu simbolom o. Tipovi linija i simbola koji se mogu koristiti dati su u tabeli 3.1.
Tipovi linija puna linija takasta : taka crta -. crtkana -Tipovi simbola taka . slova o ili x plus + zvijezdica *
Tabela 3.1. Tipovi linija i simbola za naredbu plot Moemo mijenjati i boju kojom je nacrtana pojedina kriva. Tako na primjer plot(x1,y1,'g',x2,y2,'*r') daje zeleni grafik funkcije y1(x1), a funkiju y2(x2) oznaava crvenim zvjezdicama. Mogue boje su date u tabeli 3.2.
Boje uta (yellow) magenta (magenta) cijan (cyan) crvena (red) zelena (green) plava (blue) bijela (white) crna (black) y m c r g b w k
Tabela 3.2. Boje i njihove skraenice Napomenuemo da ukoliko printer nije u boji onda se linije razliitih boja na printeru prenose razliitim tipovima linija.
Grafika Mogue je oznaiti ose grafika, ispisati njegov naziv, kao proizvoljan broj oznaka na proizvoljnim mjestima. Nacrtajmo grafik y=sin(x) u intervalu -2x2. x=linspace(-2*pi,2*pi,40); plot(x,sin(x)) Prije svega uoimo da funkcija x=linspace(a,b,n) slui za kreiranje vektora koji je isti kao vektor x=a:(b-a)/(n-1):b. Ako se n izostavi pretpostavlja se vrijednost n=100. Poto smo na ekranu dobili grafik, poslije pritiska na bilo koju tipku, vraamo se na komandni displej. Naziv grafika emo unijeti sa: title(' Grafik funkcije y=sin(x) ') Ose moemo oznaiti kucajui: xlabel(' vrijednost nezavisno promjenljive x ') ylabel(' vrijednost funkcije ') Proizvoljan tekst, na primjer abc, na grafiku, kooordinatama (x1,y1), (x2,y2),...,(xn,yn) se unosi sa: i unijeti
na
mjestima
sa
text([x1 x2 ... xn],[y1 y2 ... yn],'abc') Koordinate su zadate u jedinicama koje vae za tekui grafik. U naem primjeru sa sinusoidom unesen je tekst dvije periode u poziciji po (x,y)=(0.5,0.5). text(0.5,0.5,'dvije periode') Ukoliko na svakom mjestu treba unijeti tekst razliite sadrine, npr. text1, text2,...,textn, onda to inimo sa: text([x1 x2 ... xn],[y1 y2 ... yn],['text1';'text2'; ... ;'textn']) Postoji mogunost da se tekst unese na poziciju koja se moe specificirati miem. Poslije zadavanja naredbe gtext('Stavi poziciju') na grafiku se pojavi oznaka pokazivaa mia kojim kliknemo na poziciju gdje elimo da se nalazi tekst.
76
Slika 3.8. Oznaavanje osa, naziva i unoenje teksta na grafiku Tako|e, napomenimo da se slian nain za unoenje teksta, oznaavanje osa i naslova grafika moe primjeniti za sve 2-D i 3-D grafike. Mrea na grafiku se crta naredbom: grid
77
Grafika
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 0.5 1
Slika 3.9. Grafik kompleksne funkcije z=eit za -t. Kada je rije o kompleksnim funkcijama recimo da se one ipak najee predstavljaju na taj nain to se odvojeno crtaju amplituda i faza kompleksne funkcije u zavisnosti od nezavisno promjenljive, to se dobija sa: plot(t,abs(z),t,angle(t)). Drugi esto zahtijevani oblik je predstavljanje realnog i imaginarnog dijela u funkciji nezavisno promjenljive, to se dobija sa plot(t,real(z),t,imag(z)).
MATLAB for Windows vraamo se sa axis('normal'). Na slici 3.9. prikazani su grafici koji se dobijaju u ovom sluaju. t=linspace(-pi,pi); z=exp(i*t); axis('square') plot(z) axis('normal') axis('equal') Ose x i y se postavljaju automatski na osnovu maksimalne i minimalne vrijednosti koordinata x i y. Ako elimo sami zadati u kojim okvirima e biti nacrtan grafik onda to inimo naredbom axis([xmin xmax ymin ymax]). Okvir za crtanje grafika e biti postavljen od xmin do xmax i od ymin do ymax. Unijeti okviri se zadravaju i za naredne grafike sve do njihove promjene ili vraanja na automatsko skaliranje. Vraanje na automatsko skaliranje se vri sa axis('axis'). Naredbom axis('normal') ponitavaju se sva ogranienja vezana za grafik. Naredbom axis dobijamo informaciju o trenutnim dimenzijama grafika. Primjer 3.1.8 Nacrtati funkciju y=sin(x) za -4x4, sa automatskim skaliranjem osa, a zatim postaviti da opseg po y-osi bude od -1.5 do 1.5. x=-4:.2:4; plot(x,sin(x)) axis([-4 4 -1.5 1.5]) plot(x,sin(x)) axis Dakle, kao rezultat naredbe axis u ovom sluaju pored grafika dobija se i tekui opseg: ans = -4.0000 4.0000 -1.5000 1.5000 Ako ne elimo da prikaemo koordinantne ose otkucaemo axis('off'), dok za ponovni povratak zadajemo axis('on'). Naredba [A,B,C]=axis('state') vraa vijednosti koje ukazuju na trenutno skaliranje crtea. A moe biti 'auto' (automatsko skaliranje) ili 'manual' (runo), B ukazuje da li se prikazuju koordinantne ose ('on' ili 'off') i C moe imati vrijednosti 'xy' ili 'ij', a koristi se za prikazivanje funkcija dvije promjenljive ili matrice, i bie naknadno objanjeno. 79
Grafika Napomena: Ne zaboravite da se poslije jednog grafika vratite na automatsko skaliranje ili promijenite skaliranje osa. Treba pomenuti i mogunost zumiranja grafika (prikazivanja jednog njegovog dijela) pomou mia. Ova akcija se obavlja naredbom zoom on i klikom miem na dio grafika koji elimo prikazati. Na cijeli grafik se vraa naredbom zoom out. Primjer 3.1.9. Nacrtati funkciju y=x1/3 za 0x20 i izvriti zumiranje. Vratiti se na grafik default veliine. x=0:.1:20; y=x.^(1/3); plot(x,y) zoom on zoom out
3 2.5 2 1.5 1 0.5 0 0 5 10 15 20 2.6 2.4 2.2 2 1.8 1.6 1.4 1.2 4 6 8 10 12
MATLAB for Windows Vidimo da i ovdje kao kod naredbe plot vae pravila za iscrtavanje linija i boja. Poslednjom naredbom se crta kardioida u zelenoj linija kao niz zvijezdica.
120 150 904 3 2 1 180 0 30 60
330
Slika 3.11. Grafik funkcije u polarnom koordinatnom sistemu Na grafiku se moe oznaiti naslov, dok je radijalna mrea neposredno ugra|ena.
se
3
moe
2
napraviti
po
y-osi
naredbom
Primjer 3.1.12 Nacrtati y=ex +x-1 i y1=ex -2 x za 0x5. x=0:.1:5; y=exp(x.^2+x-1); y1=exp(x.^3-2*x.^2); semilogy(x,y,x,y1) grid
1.4 1.2 1 0.8 0.6 0.4 0.2 0 -1 10 10
0
10
10
25
20
15
10
-5
Slika 3.13. Logaritamska raspodjela po y-osi Konano, mogua je logaritamska raspodjela i po x-osi i po y-osi, naredbom loglog(x,y). Primjer 3.1.13 Nacrtati y=1/(x.^3+x.^2+x+1) za 0.1 x 10. x=logspace(-1,1,50); 82
10
-1
10
-2
10
-3
10 -1 10
-4
10
10
Slika 3.15. Bar grafik Slina funkciji bar je i funkcija stairs koja crta stepenasti grafik ali bez vertikalnih linija.
83
Grafika Primjer 3.1.15 Nacrtati stepenasti dijagram funkcije y=e-x /2 sin(x) u granicama -4x4. x=-4:.1:4; y=exp(-x.^2/2).*sin(x); stairs(x,y)
0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -4 -3 -2 -1 0 1 2 3 4 2
84
Slika 3.17. Prikazivanje stem funkcijom diskretnih promjenljivih Pomou ove funkcije nije mogu istovremeni prikaz vie funkcija. Tako bi naredba stem(x,y,x1,y1) vratila poruku o greci - previe ulaznih argumenata.
0 .9
0 .8
0 .7
0 .6
0 .5
0 .4
0 .3
0 .2
0 .1
0 .5
1 .5
2 .5
3 .5
85
Grafika
Slika 3.19. Prikaz faze i ugla kompleksnih veliina pomou funkcija compass i feather
86
MATLAB for Windows Primjer 3.1.19 Nacrtati uoptenu hipocikloidu zadatu u funkciji parametra na sljedei nain: x=(b-a)cos+acos((b-a) /a) i y=(b-a)sin-asin((b-a)/a), b>a>0. Uzeti b=6, a=1 i =2.5. b=6;a=1;l=2.5; phi=0:pi/40:2*pi; x=(b-a)*cos(phi)+l*a*cos((b-a)*phi/a); y=(b-a)*sin(phi)-l*a*sin((b-a)*phi/a); comet(x,y)
8 6 4 2 0 -2 -4 -6 -8 -8 -6 -4 -2 0 2 4 6 8
Grafika plot3(t.*sin(t),t.*cos(t),t)
40 30 20 10 0 40 20 0 -20 -40 -40 -20 0 20 40
Slika 3.21. Spirala sa rastuim poluprenikom Postoje i funkcije fill3 i comet3 koje su adekvatne odgovarajuim funkcijama jedna promjenljive. [to se oznaavanja grafika tie, kod funkcija dvije promjenljive nita se znaajnije ne mijenja u odnosu na funkcije jedna promjenljive. I ovdje postoje funkcije title, xlabel, ylabel, text, gtext i grid, a, razumljivo, dodata je i funkcija zlabel. [to se tie skaliranja osa, naredba axis ima sada tri para argumenata koji predstavljaju granice grafika po sve tri ose. Ovdje postoji mogunost da se sa axis('ij') pre|e u mod crtanja gdje je koordinantni poetak u gornjem lijevom uglu. Sa axis('xy') vri se vraanje u grafiki mod sa koordinantnim poetkom u lijevom donjem uglu (ovo je po defaultu).
MATLAB for Windows [x,y]=meshdom(-pi:pi/10:pi,-pi:pi/10:pi); z=sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps); mesh(z) Prilikom definisanja promjenljive z dodata je vrijednost veoma male veliine eps da bi se izbjegla pojava nedefinisanog izraza za x=0 i y=0, oblika sin(0)/0. Komanda mesh ima i alternativne oblike; tako mesh(z,[az el]) daje grafiki prikaz funkcije z(x,y) sa azimutom (horizontalnom rotacijom) az stepeni i elevacijom (vertikalnom rotacijom) el stepeni. Ukoliko ne zadamo ove vrijednosti (kao to to nijesmo uinili u prethodnom primjeru) automatski se uzima az=-37.5o i el=30o. Ista ova operacija se moe obavljati sa naredbom view(az,el) ili view([az,el]). Alternativno, ova naredba sa tri argumenta daje pogled u pravouglim koordinatama. Trenutnu matricu transformacije dimenzija dobijamo sa T=view, a trenutni azimut i elevaciju dobijamo sa [az,el]=view. Opcija view(2) daje dvodimenzionalni prikaz az=0o i el=90o dok se sa view(3) vraamo na default vrijednosti az=-37.5o i el=30o.
1 0.5 0 -0.5 30 20 10 0 0 10 30 20 1 0 -1 0 5 10 15 20 25 0 5 10 15 25 20
Slika 3.22. Mreasti crte funkcije dvije promjenljive a) mesh(z) b) mesh(z,[40,80]) Funkcija meshz je veoma slina funkciji mesh. Crta mreastu povr sa linijama koje su paralelne z-osi. Primjer 3.2.3 Napisati naredbe kojima se iscrtava hiperboliki paraboloid (sedlasta povr) z=x2-y2 u granicama od -2 do 2 i po x-osi i po y-osi. [x,y]=meshdom(-2:.2:2,-2:.2:2); z=x.^2-y.^2; meshz(z) 89
Grafika
4 2 0 -2 -4 20 15 10 5 0 0 5 10 15 20
Slika 3.23. Sedlasta povr - hiperboliki paraboloid Crtanje mreaste povri moe da se obavlja i pomou funkcije waterfall koja iscrtava mreu samo po jednoj koordinati. Prmjer 3.2.4 Nacrtati funkciju z=xyexp(-x2) pomou funkcije waterfall. z=x.*y.*exp(-x.^2); waterfall(z) waterfall(z),view([20 75]) Druga varijanta prikazuje funkciju waterfall pod odgovarajuim azimutom i elevacijom; ovdje ne funkciionie waterfall(z, [20 75]). Ostala su pravila kao kod funkcije mesh.
90
0.5
-0.5 30
20
10
0
0
30
20
10
Slika 3.24. Surf povrina Funkcija surfl adekvatna je funkciji surf, pri emu se moe podeavati poloaj izvora svijetlosti, parametri osvjetljavanja i difuzije okoline.
91
Grafika
20 18 16 14 12 10 8 6 4 2 5 10 15 20 -2 -3 1 0 -1 3 2
-3
-2
-1
Slika 3.25. Konturni crte funkcije dvije promjenljive a) contour(z) b) contour([-pi:pi/10:pi],[-pi:pi/10:pi],z,2,'r-') Konturne linije mogu biti nacrtane kroz tano odre|ene vrijednosti funkcije z. Tako, na primjer, ako elimo povui konturne linije kroz z=0.5, z=0.27 i z=-0.1, naredba je: contour(z,[0.35 0.07 -0.1]) U optem sluaju, naredbom contour(z,[z1 z2 z3...zn]) crtamo konture kroz zadate vrijednosti zi za i=1,2,...,n. Vrlo interesantna kombinacija se moe napraviti jednovremenim korienjem naredbi contour i quiver. Naredbom quiver(z), gdje je z kompleksna matrica, prikazujemo amplitudu i pravac svakog elementa matrice z koristei strelice. Duina strelice je proporcionalna amplitudi elementa. Ukoliko zadamo dvije realne ulazne matrice x i y, naredba quiver(x,y) daje grafik kao da smo zadali quiver(x+i*y). Tip linija za crtanje strelica moemo mijenjati (kao i prilikom primjene naredbe plot) sa quiver(x,y,'tip linije'). Da bi ilustrovali primjenu naredbe quiver objasniemo jo jednu naredbu, gradient. Naredbom: [px,py]=gradient(z) numeriki dobijamo parcijalne izvode matrice z: px=dz/dx i py=dz/dy.
92
MATLAB for Windows Ukoliko elimo zadati stvarna rastojanja odbiraka dx i dy u matrici z u pravcu x i y ose, treba koristiti [px,py]=gradient(z,dx,dy). Automatski se uzima dx=dy=1. Primjer 3.2.6 Nacrtati ekvipotencijalne linije i linije polja ako je potencijal zadat sa z=sin(px)sin(py) za -1x,y1. (E=-grad(z)). [x,y]=meshdom(-1:.08:1,-1:.08:1); z=sin(pi*x).*sin(pi*y); [zx,zy]=gradient(z); contour(z),hold on,quiver(-zx,-zy);hold off
25
20
15
10
10
15
20
25
Slika 3.26. Ekvipotencijalne linije i linije polja Naredbe hold on i hold off e biti objanjene kasnije. U sklopu diskusije o prikazima mreastih povrina i obojenih povri vidjeli smo da postoje funkcije meshc i surfc. Ove dvije funkcije, pored odgovarajuih grafika, prikazuju i konturni crte u ravni x0y. Primjer 3.2.7 Prikazati funkciju z=xexp(-x2-y2) u granicama -2x,y2 istovremenim prikazom mreaste povrine i konturnog crtea, odnosno istovremenim prikazom obojene povrine i konturnog crtea. [x,y]=meshdom(-2:.2:2,-2:.2:2); z=x.*exp(-x.^2-y.^2); meshc(z) surfc(z)
93
Grafika
0.5
0.5
-0.5 30 20 10 0 0 10 30 20
-0.5 30 20 10 0 0 10 30 20
Slika 3.27. 2-D grafik meshc i surfc Funkcija contour kao i bilo koja grafika komanda ima svoj rezultat. U sluaju naredbe contour izlaz je niz brojeva koji predstavljaju pojedine izolinije konturnog grafika. Veoma esto je potrebno oznaiti brojne vrijednosti koje predstavljaju pojedine izo linije. To se postie naredbom clabel. Primjer 3.2.8 Pomou izolinija prikazati funkciju z=x/(x2+y2+1) za -2x,y2. Prikazati i labele izolinija. [x,y]=meshdom(-2:.2:2,-2:.2:2); z=x./(x.^2+y.^2+1); A=contour(z); Konturni crte je nacrtan a u promjenljivoj A uvaju se podaci o linijama koje ine crte. Sa clabel(A) vri se upisivanje vrijednosti labela. Naredbom clabel(A,'manual') vri se runo - manuelno upisivanje pojedinih labela pritiskom mia na izoliniju. Kada se eli zavriti unos dovoljno je kliknuti na dio grafikog prozora van konturnog dijagrama.
94
0.4
Slika 3.28. Konturni crte sa unijetim labelama izolinija Postoji jo jedna funkcija za prikaz konturnih crtea contour3 kojom se prikazuje konturni crte u 3-D. Primjer 3.2.9 Prikazati funkciju z=exp(-x2-y2) kao konturni crte u tri dimenzije. z=exp(-x.^2-y.^2); contour3(z) contour3(z,40)
1
0.8
0.6
0.4
0.2
0 30
20
10
0
0
30
20
10
95
Grafika Primjer 3.2.10 Nacrtati pomou funkcije imagesc funkciju dvije promjenljive z=xysin(x2+y2) gdje su -2x,y2. x=-2:.2:2; y=-2:.2:2; [X,Y]=meshdom(x,y); z=X.*Y.*sin(X.^2+Y.^2); imagesc(x,y,z)
-2
-1.5
-1
-0.5
0.5
1.5
2
-2
-1.5
-1
-0.5
0.5
1.5
Slika 3.30. imagesc prikaz funkcije Istu funkciju moemo prikazati i pomou funkcije pcolor: pcolor(x,y,z)
Slika 3.31. pcolor prikaz funkcije Funkcijom shading blie specificiramo nain primjene naredbe pcolor. Naredbom shading interp dobijamo kolornu mapu bez mree u kojoj se svaka taka interpolira, dok shading flat prikazuje crte bez mree sa istom bojom unutar 96
MATLAB for Windows kvadrata. Default podeavanje sa slike 3.30, sa mreom i istom bojom unutar kvadrata, dobijamo sa shading faceted.
-2
-1.5
-1
-0.5
0.5
1.5
2
-2
-1.5
-1
-0.5
0.5
1.5
1
0.8
0.6
0.4
0.2
0 2
0
1
0
-1
-2
-2
-1
-1
Grafika Analogna funkcija postoji za prikazivanje sfera. Oblik naredbe [x,y,z]=sphere(n) odre|uje vrijednosti koordinata sfere x, y i z ali ne crta sferu. Vrijednost n=20 se podrazumjeva. Funkcija sphere(n) e izvriti i crtanje sfere.
Slika 3.34. Prikaz funkcije tri promjenljive Na slici 3.34. vidimo slice prikaz funkcije tri promjenljive. Kroz ravni normalne na ose u odbircima [3 6 11], 11 i [1 5], po x, y i z osi respektivno, prikazani su kolorni dijagrami. Posljednji parametar predstavlja broj redova u volumenu v jer kao to znamo MATLAB posjeduje mogunost prikazivanja samo matrica dok se 3-D polje prikazuje u obliku matrice. Recimo, naredbom [x,y,z]=meshgrid(vx,vy,vz) dobijamo matrice x, y i z. Dimenzije ovih matrica su (nx* ny) x nz (gdje su nx, ny i nz duine vektora vx, vy i vz).
98
1 0 -1 40
0 0
20
Grafika Treba napomenuti da podjela ekrana, zadata naredbom subplot, ostaje i za naredne grafike. Tako bi poslije zadnjeg primjera ekran ostao podijeljen na etiri dijela i svi grafici bi bili crtani na etvrtini ekrana. Zadavanje nove podjele se definie zadavanjem novih parametara u subplot. Na itav ekran se vraamo sa subplot(111). Napomenimo da se zadavanjem orijentacije za tampanje grafika (o emu e biti rijei), dimenzije odtampanog grafika mogu dodatno mijenjati. Na ovaj nain naredbom subplot dobijamo grafike jednake veliine. Na drugi nain naredbom axes moemo dobiti grafike koji su nejednake veliine. Naredbom axes('position',[px py sx sy]) definiemo poziciju grafika od take px po x-osi i py po y-osi (relativne koordinate-donji lijevi ugao ekrana je koordinata (0,0) gornji desni ugao je (1,1)) a sx i sy su veliine grafika u relativnom iznosu. Treba rei da funkcija axes definie ose grafika a da je position jedna od osobina osa. O ovim osobinama bie vie rijei u estom poglavlju. Primjer 3.4.2 Nacrtati tri odvojena grafika: y=x2-2x+1 za -1x1 od [0.1 0.1 0.3 0.4], prikazati funkciju z=xysin(2x2) u granicama [0.45 0.1 0.45 0.8] mreastim dijagramom i u granicama [0.1 0.55 0.4 0.35] konturni dijagam.
x1=-1:.1:1; y1=x1.^2-2*x1+1; axes('position',[0.1 0.1 0.3 0.4]) plot(x1,y1) [x2,y2]=meshdom(-1:0.1:1,-1:0.1:1) z2=x2.*y2.*sin(2*pi*x2.^2); axes('position',[.45 .1 .45 .8]) mesh(z2) axes('position',[0.1 0.55 0.4 .35]) contour(z2)
20 15 10 5 4 3 2 1 0 -1 0 1 5 10 1 0.5 15 0 20 -0.5 -1 30 20 10 0 0 10 20
30
Grafika ans = pixels Znai tekui grafik se mjeri u pikselima (ekranskim takicama). Prozor se iz komandne linije moe zatvoriti naredbom close. Tako naredba: close(3) brie trei grafiki prozor. Kao to smo rekli, grafiki prozori se mogu definisati i imenom na jedan od sljedea dva naina: figure('Name','Dodatak') gdje, kao to vidimo, Name predstavlja osobinu prozora - njegovo ime koje stoji u naslovnoj liniji prozora. Ovakava prozor se moe zatvoriti na sljedei nain close('Dodatak') dok se svi grafiki prozori zatvaraju naredbom close all Osobinama grafikog prozora kao i o detaljima upravljanjem grafikog prozora bie posveena esta glava.
MATLAB for Windows gray hot cool bone coppe pink prism jet flag Linearna siva boja Crno-crveno-uto-bijela kombinacija Osjenena cijan i magenta kombinacija Nijanse sivog sa dodatcima plave boje Linearna bakarna boja Pastelno osjenena ljubiasta mapa Prizmatina kolorna mapa Varijanta hsv Naizmjenino plavo-crvena-bijela
Tabela 3.3. Pregled raspoloivih kolornih mapa Primjer 3.6.1 Na mreastom dijagramu funkcije z=xsin(x2+y2)/(x2+y2) demonstrirati naredbu colormap. [x,y]=meshdom(-2:.2:2,-2:.2:2); z=x.*sin(x.^2+y.^2+eps)./(x.^2+y.^2+eps); mesh(z) colormap(hsv) colormap(gray) colormap(hot) colormap(cool) colormap(bone) colormap(copper) colormap(pink) colormap(prism) colormap(jet) colormap(flag) Treba napomenuti da su hsv, gray,..., flag matrice dimenzija 64x3. Svaka vrsta matrica predstavlja jednu boju. Boje su predstavljene sa tri broja od 0 do 1: prvi broj predstavlja crveno, drugi zeleno, trei plavo (ovakav model se naziva rgb). Pored predefinisanih matrica, iz tabele 3.3 argument funkcije colormap moe predstavljati bilo koja matrica sa tri kolone. Tako naredba colormap([0 1 0]) 103
Grafika daje crte u jednoj boji - u ovom sluaju to je zelena. Problem sa naredbom colormap je to to se novim pozivom naredbe colormap(flag) ne dobija kolorni crte u 64 ve je i dalje u jednoj boji. Vraanje na matrice dimenzija 64x3 se moe uraditi eksplicitnim definisanjem dimenzija matrice colormap(ones(64,3)) colormap(flag) Vaeu kolornu mapu moemo dobiti naredbom T=colormap. Naredbom brighten(sv) dobijamo tamniju, za -1sv<0, odnosno svijetliju, za 1sv>0, kolornu mapu. Kolorni grafici, i pored svoje "ljepote", esto su nejasni. Naime, esto se ne zna kojoj boji odgovara koja veliina funkcije. Iz tog razloga koristi se fukcija colorbar koja uz grafik, u formi legende, iscrtava pravougaonik sa oznaenim vrijednostima pojedinih boja. Dvije osnovne varijante ove funkcije su: colorbar('horiz') i colorbar('vert') kojima se iscrtava legenda boja horizontalno ili vertikalno. Za funkcije koje dio svog grafikog prikaza obavljaju u formi razliitih boja moe se podeavati raspon boja koje su ove kolorne mape u stanju da prikau. Informaciju o rasponu boja koji je trenutno aktivan moe se dobiti naredbom caxis ans = -0.8415 0.8415 Vidimo da su boje skalirane izme|u vrijednosti -0.8415 i 0.8415. Manuelno skaliranje se obavlja istom naredbom u obliku caxis([0 0.7]) Ovom naredbom vrijednosti funkcije koje su manje od 0 predstavljaju se bojom koja odgovara vrijednosti 0, a slino vai i za gornju granicu 0.7. Na automatsko skaliranje se prelazi naredbom caxis('auto')
MATLAB for Windows figure(gcf). Za starije korisnike MATLAB-a potpuno je ravnopravna naredba shg (skraeno od show graph). Sadraj grafikog prozora moe se izbrisati potpuno ravnopravno naredbama clf i clg. Ako se zada naredba clf reset i clg reset, pored brisanja grafika do|e i do resetovanja njegovih osobina (osobine grafika se postavljaju na poetnu vrijednost). Brisanje grafika unutar trenutnih osa postie se naredbom cla a naredbom cla reset, se pored brisanja grafika, postavljaju osobine grafika na poetnu vrijednost. Ukoliko elimo nove grafike crtati preko prethodnih, a da oni ne budu izbrisani, onda treba unijeti hold on. Ova naredba se ponitava sa hold off. Funkcija ishold vraa jedinicu ako je hold on ukljuen, a nulu ako je iskljuen.
Tabela 3.4. Mogui prekidai i formati u naredbi meta Ipak, za memorisanje grafika i kompletnu grafiku obradu obino se koristi naredba print. Naredba print fajl potpuno je adekvatna naredbi meta. Opti oblik naredbe print je: print [fajl] [-sredstvo] [-opcija] 105
Grafika Naredbom print snima se u fajl pripremljen za tampu na nekom od sredstava uz neku od opcija. Sredstva, pored onih kod naredbe meta, su i za enkapsulirani postskript deps, depsc, deps2, depsc2 kao i veliki broj tampaa koji su podrani (HP Laser Jet, HP Paint Jet, Cannon, Epsonovi tampai itd), kao i fajlovi tipa gif ili pcx formata. Opcije su snimanje fajla u formatu HP plotera hgl - formatu -dhpgl, Adobe ilustrator fajlovi -dill, snimanje grafikog objekta u .M fajlu -dmfile. Za slanje grafika na trenutno instalisani monohromatski tampa -dwin ili kolorni tampa dwinc. Tako|e mogue je smjestiti fajl u meta formatu u Clipboard -dmeta (ako se navede naziv fajla snimie se pod ekstenzijom .WMF) ili u bitmapiranom formatu u Clipboard -dbitmap (ili u fajl pod ekstenzijom .BMP). Primjer 3.7.1 Demonstrirati neke od opcija naredbe print. print -dmeta print -dbitmap Sa gornje dvije naredbe se u Clipboard (privremenu memoriju) smjeta sadraj ekrana. Ako se navede naziv fajla dobijamo u prvom sluaju fajl tipa WMF Windows meta file a u drugom sluaju BMP - bitmapirani fajl. Oba ova fajla mogu importovati gotovi svi komercijalni programi, tekst procesori, Corel, itd. Naredbom print -dwin alje se sadraj grafikog prozora na trenutno instalisani monohromatski tampa, dok naredbom print fajl1 -dhpgl kreiramo fajl1.hgl koji je tako|e pogodan za dalju obradu. Kombinacija naredbi (izme|u kojih se mogu nai naredbe za iscrtavanje grafika) print fajl1 print fajl1 -append dovee do snimanja fajla fajl1.ps, a drugom naredbom e postojeem grafiku biti dodat novi (dakle stari fajl nee biti prebrisan kao po defaultu). Ako elimo sauvati grafik za naredne sesije primijeniemo naredbu print fajl1 -dmfile pomou koje dobijamo MATLAB funkciju fajl1.m koja se u nekoj od narednih sesija moe pozvati naredbom fajl1 ime e sadraj grafikog prozora biti rekonstruisan. 106
MATLAB for Windows Grafik e po pravilu biti iscrtan tako da je irina papira manja od njegove visine. Orijentacija se mijenja naredbom orient landscape dok se na default portrait orijentaciju vrae sa orient portrait
Grafika colormap(topomap1) [x,y,z]=sphere(24); n=24;M=moviein(n); for j=-37.5:360/n:307.5 cla,axis auto surface(x,y,z,'Facecolor','Texture','Cdata',topo) view([j 30]) axis square,axis xy,axis off i=j/15+3.5; M(:,i)=getframe; end movie(M) Na slici 3.37 su prikazane dva kadra kreirana prethodnim primjerom.
108
glava etvrta
ANALIZA PODATAKA
U ovom dijelu prezentiraemo neke osnovne funkcije za statistiku obradu podataka. Poto se podaci obino unose u obliku ure|enog skupa brojeva, neophodno je usvojiti orijentaciju (po vrstama ili kolonama) pri njihovoj obradi. U MATLAB-u je usvojena konvencija po kojoj su podaci (mjerenja, uzorci, opservacije) za razliite varijable smjeteni u odgovarajue kolone. Na primjer, skup podataka koji se sastoji od 15 uzoraka za 7 razliitih varijabli unosi se u obliku matrice dimenzija (15x7). Kao to smo vidjeli u poglavlju 1, postoji vie naina za unoenje podataka. Ukoliko treba unijeti veliki broj podataka, direktno interaktivno unoenje nije pogodno jer, vrlo vjerovatno, dovodi do greaka. Zbog toga se preporuuje razbijanje matrice podataka u manje blokove koje se kasnije jednostavnim pridruivanjem vrsta ili kolona spajaju u jednu cjelinu. Jo jednostavniji nain je putem korienja editora teksta, o emu e kasnije biti rijei. Grupa funkcija za osnovne statistike obrade prikazana je u tabeli 4.1.
median medijana
Analiza podataka Za podatke uneene u obliku vektora, funkcije max i min, kao i veina ostalih funkcija, ne prave razliku izme|u vrste i kolone. Za podatke uneene u obliku matrice operacije se vre po kolonama, a rezultati za pojedine kolone dobijaju se kao odgovarajui elementi vektora vrste kao izlaznog argumenta operatora. Za vektor x, max(x) i min(x) daju maksimalnu i minimalnu vrijednost elemenata x, respektivno, dok [m,i]=max(x) i [m,i]=min(x) pored maksimalne (minimalne) vrijednosti elemenata x daju i odgovarajui indeks. Za kompleksne elemente x-a raunaju se apsolutne vrijednosti, pa se na osnovu njih daju maksimalne (minimalne) vrijednosti. Ako je X matrica, max(X), odnosno min(X) daju vektor vrstu koji sadri maksimalne (minimalne) vrijednosti pojedinih kolona matrice X. Operatori [M,i]=max(X), [M,i]=min(X) pored vektora maksimalnih (minimalnih) vrijednosti pojedinih kolona daju i odgovarajue indekse. Izraz C=max(X,Y), gdje su X i Y matrice jednake dimenzije, daje matricu C sa elementima c(i,j)=max(x(i,j),y(i,j)). Primjer 4.1.1 Za x= -0.2000 0.5000 1.3000 4.0000 y= -2.0000 3.4000 1.6000 8.0000 z= -2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 + 2.0000i 3.0000 + 4.5000i pojedini operatori daju: m1=max(x) m1 = 4 110
MATLAB for Windows [m,i]=min(y) m= -2 i= 1 [zm,j]=max(z) zm = 3.0000 + 4.5000i j= 4 c=max(y',z) c= -2.0000 + 3.0000i -3.0000 + 4.0000i 5.0000 + 2.0000i 8.0000 Primjer 4.1.2 Za matrice A= -1.0000 2.0000 3.0000 4.0000 3.1000 2.0000 1.0000 5.0000 6.0000 B= 1 -1 2 -3 4 5 -4 2 9 ilustrovaemo primjenu pojedinih operatora: [M,j]=max(A) M= 4 5 6 j= 2 3 3 [M1,j1]=min(B) M1 = -4 -1 2 j1 = 3 1 1 C=max(A,B) C= 1 2 3 111
Analiza podataka 4 1 4 5 5 9
m=
1 n
x
1
Za matrice, mean(X) daje vektor vrstu koji sadri srednje vrijednosti pojedinih kolona. Operator median rauna medijanu za vektore ili matrice. Za vektor, medijana se definie kao onaj njegov element od kojeg ima jednak broj veih i manjih elemenata tog vektora. Ovo, naravno, vai pod uslovom da vektor ima neparan broj elemenata. Za sluaj da je broj elemenata vektora x paran, izraz median(x) daje aritmetiku sredinu dva srednja elementa. Za matrice, median(X) daje vektor vrstu koji sadri medijane pojedinih kolona matrice X. Primjer 4.2.1 Za matrice A i B iz primjera 4.1.2, imamo: sort(A) ans = 112
MATLAB for Windows -1.0000 2.0000 2.0000 1.0000 3.1000 3.0000 4.0000 5.0000 6.0000 [C,I]=sort(B) C= -4 -1 2 -3 2 5 1 4 9 I= 3 1 1 2 3 2 1 2 3 Y=mean(A) Y= 1.3333 3.3667 X=median(B) X= -3 2 5
3.6667
y=
1 n
( x
i =1
x sr )
gdje je n dimenzija vektora x a xsr srednja vrijednost njegovih elemenata. Za matrice, std daje vektor vrstu koji sadri standardne devijacije pojedinih kolona. Operator cov rauna kovarijansu. Za vektor x, cov(x) rauna varijansu. Ako je X matrica ije kolone sadre pojedine varijable a vrste pojedine uzorke (mjerenja, opservacije), izraz C=cov(X) rauna matricu kovarijanse C. Izraz c=diag(cov(X)) rauna vektor c sa varijansama svake kolone matrice X, dok izraz sqrt(diag(cov(X))) daje standardne devijacije. 113
Analiza podataka Operator corrcoef rauna korelacione koeficijente. Za matricu X, izraz corrcoef(X) daje matricu korelacionih koeficijenata matrice X. Ako je C=cov(X), tada corrcoef(X) daje matricu iji je (i,j)-ti element definisan sa C(i,j)/sqrt(C(i,j)*C(j,j)).
MATLAB for Windows 8.1000 Proizvod elemenata pojedinih kolona matrice A dobiemo sa p=prod(A) p= -4 31 36 dok se proizvod svih elemenata matrice A dobija sa P=prod(prod(A)) P= -4464 Primjer 4.4.2 Za k=10, izraunati sume redova
1/ n
n =1
(ln n) / n
n =1
n=1:10; s=sum(1./n.^3); s s= 1.1975 S=sum(log(n)./n) S= 2.6922 Kumulativne sume, odnosno proizvodi, dobijaju se pomou operatora cumsum i cumprod. Naime, za vektor x izrazi s=cumsum(x) i p=cumprod(x) daju vektore s i p iste dimenzije kao x, iji su elementi definisani sa
si = x j odnosno pi = x j .
j= i
j =1
Ako je X matrica, izrazi S=cumsum(X) i P=cumprod(X) daju matrice S i P istih dimenzija kao X, ije kolone se sastoje od kumulativnih suma odnosno proizvoda elemenata kolona matrice X. Primjer 4.4.3 Za vektor x=[1 2 3 4 5 6 7] imamo s=cumsum(x)
s= 1 3 6 10 p=cumprod(x) p= 15 21 28
115
Analiza podataka Columns 1 through 6 1 2 6 24 120 720 Column 7 5040 Oigledno je da vektor p sadri faktorijele brojeva od 1 do 7. Za matricu B B= 1 -1 2 -3 4 5 -4 2 9 izrazi cumsum(B) cumprod(B) daju ans = 1 -2 -6 ans = 1 -3 12 -1 3 5 2 7 16
-1 2 -4 10 -8 90
f ( x )dx f ( xi ) xi
i =1
n 1
pri emu je interval (a,b) podijeljen na n jednakih podintervala. Na slian nain, za funkciju dvije promjenljive z=f(x,y) dvojni integral moe se aproksimirati sa
I2 =
zdxdy f ( x , y ) x y
i j i a c i j
b d
116
k=(2-(-2))/40; x=-2:k:2-k; y=sin(x)+4; I=sum(y)*k I= 15.9091 Postoji i funkcija trapz(x,y) koja rauna integral funkcije po trapeznom pravilu. Vektori x i y moraju imati iste dimenzije. Ukoliko se izostavi vektor x podrazumijeva se jedinini razmak izme|u vrijednosti funkcije y. Ukoliko je y matrica koja ima kolona koliko i vektor x elemenata, ovom funkcijom se rauna odvojeno integral svake kolone matrice y.
Primjer 4.5.2 Nai integral I =
x dx
2
x=-2:4/40:2; y=x.^2; I=trapz(x,y) I= 5.3400 y1=[sin(x)+4;y;sin(x.^2)]'; trapz(x,y1) ans = 16.0000 5.3400 1.6052 Za dvostruki integral primjenjuje se slina procedura. Usvojimo broj sektora po x i y osi, pa za date granice a, b, c, d definiemo korake po x i y osi kao
kx=(b-a)/nx, ky=(d-c)/ny - nx, ny - broj sektora po x i y osi. 117
Analiza podataka
Sada moemo definisati nezavisno promjenljive x i y pomou operatora meshdom kao
[x,y]=meshdom(a:kx:b-kx,c:ky:d-ky)
pa se dvostruki integral jednostavno dobija kao I2=sum(sum(z))*kx*ky. Primjer 4.5.3 Nai dvostruki integral funkcije z=sinxsiny, za x[-1,2] i y[-1,3]. Usvojiemo korake kx=ky=0.1 pa se integral lako dobija sa:
[x,y]=meshdom(-1:.1:2-.1,-1:.1:3-.1); z=sin(x).*sin(y); I2=sum(sum(z)).*.1.*.1 I2 = 1.2847 Do sada smo razmatrali raunanje odre|enog integrala. Na slian nain moe se nai i odre|eni integral sa promjenljivom gornjom granicom. Ovakav integral je ustvari jednak neodre|enom integralu sa fiksnom konstantom integracije, tj. funkciji
Kao i ranije, definiemo korak k i nezavisno promjenljivu x kao x=a:k:b-k. F(x) u diskretnim takama xi dobija se zatim jednostavno pomou operatora cumsum kao F=cumsum(f(x))*k. Primjer 4.5.4 Nai neodre|eni integral funkcije y=f(x)=sin(x2), u intervalu [-1,1]. Uzeemo k=0.1 i sa sljedeim nizom naredbi:
MATLAB for Windows subplot(222) plot(x,F),grid,xlabel('x'),ylabel('integral F') print sl1 -dmeta dobijamo funkciju F(x) koju moemo nacrtati zajedno sa funkcijom y, kao to je prikazano na slici 4.1.
Na slian nain moe se izraunati i grafiki prikazati dvojni neodre|eni integral oblika
b d
Slika 4.1 Grafik funkcije y=sin(x2) i njenog integrala za x[-1,1] Za usvojene korake kx i ky, sljedei niz naredbi:
[x,y]=meshdom(a:kx:b,c:ky:d) z=f(x,y) F=cumsum(cumsum(z)) mesh(z) mesh(F) u optem sluaju rauna i grafiki prikazuje funkciju F(x,y).
Primjer 4.5.5 Za funkciju z=x3+y3 izraunati i grafiki prikazati neodre|eni integral u oblasti definisanoj sa x[-1,1], y[-2,2]. Usvojiemo kx=0.1 i ky=0.2 pa sa skupom naredbi:
[x,y]=meshdom(-1:0.1:1,-2:.2:2); z=x.^3+y.^3;
119
Analiza podataka F=cumsum(cumsum(z))*0.1*0.2; subplot(223) mesh(z) subplot(224) mesh(F) dobijamo funkciju F(x,y) koju moemo grafiki prikazati, zajedno sa funkcijom z(x,y), kao to je prikazano na sljedeoj slici.
10
5
0
-5
-10 30
20
10
0
0
15
10
0 30
30
20
10
20
10
0
0
30
20
10
x= 1 8 izrazi
27
64 125
y1=diff(x) 120
MATLAB for Windows y2=diff(x,2) y3=diff(x,3) daju y1 = 7 19 37 61 y2 = 12 18 24 y3 = 6 6 Oigledno je da vai: y2=diff(y1), y3=diff(y2), itd.
Za matricu
A= 1 2 3 6 -1 3 4 2 -4 -1 -3 2
izrazi
4 5 5 8
B=diff(A) C=diff(A,2) daju B= 5 -3 0 1 -2 3 -7 0 -5 -5 6 3 C= -7 6 -7 -1 -3 -8 13 3 S obzirom na definiciju izvoda funkcije jedne promjenljive y=f(x) u taki xi, izraz za aproksimaciju izvoda dy y yi 1 ( xi ) i dx xi xi 1 pokazuje da se operator diff moe koristiti za priblino diferenciranje. 121
Analiza podataka
Prvi izvod se priblino dobija sa diff(y)/dx, gdje dx=x predstavlja prirataj x-a (korak), a moe se nai i sa diff(y)./diff(x). Proizvoljni m-ti izvod funkcije y=f(x), oznaen sa ym, nalazimo na potpuno analogan nain sa ym=diff(y,m)./dx^m. Primjer 4.6.2 Za funkciju y=xsin x odrediti i nacrtati prvi izvod za -2 x 2.
x=-2*pi:pi/10:2*pi; y=x.*sin(x); %Racunamo funkciju y1=diff(y)./diff(x); %Racunamo izvod funkcije subplot(221) plot(x,y,x(1:length(x)-1),y1),grid text(-4,-4,'funkcija'),text(-4,4,'izvod') print sl3 -dmeta Zadnje etiri naredbe slue za crtanje, obradu i pamenje grafika funkcije i njenog izvoda. Primjeujemo da pri crtanju grafika izvoda funkcije moramo "skratiti" vektor x za jedan element, jer inae raunar javlja greku.
6 4 2 0 -2 -4 -6 -8 funkcija izvod
-6
-4
-2
Slika 4.3 Grafik funkcije y=xsin x i njenog prvog izvoda Primjer 4.6.2 Odrediti i nacrtati prvi, drugi i trei izvod funkcije y=2x3, u intervalu x[-3,3].
MATLAB for Windows print sl4 -dmeta Primijetimo da se pri crtanju m-tog izvoda, u optem sluaju, nezavisno promjenljiva "skrauje" za m elemenata. Razlog lei u kompatibilnosti dimenzija izvoda i nezavisno promjenljive.
60
40
20
-20
-40
-60 -3
-2
-1
123
glava peta
PROGRAMIRANJE I M-FAJLOVI
Do sada smo sve operacije obavljali na komandnoj liniji, to smo oznaavali sa . To je bio najjednostavniji nain za upoznavanje sa pojedinim funkcijama i mogunostima MATLAB-a. Me|utim, mogli smo zapaziti da ono to je zapisano biva uniteno poslije izlaska iz MATLAB-a. Zbog toga se namee potreba za pisanjem programa koji e ostati zapisan i trajno sauvan. Takvi programi u MATLAB-u imaju obaveznu ekstenziju .m, pa se nazivaju i m-fajlovi. Program moemo napisati u nekom od editora, a mi emo u primjerima koristiti veoma rasprostranjeni Notepad. Poslije osnovnih napomena, u ovoj glavi su obra|ene funkcije za upravljanje tokom programa, kao to su for, while, if, break i return, kao i druge pogodne naredbe za kreiranje m-fajlova. Obra|en je rad sa funkcijskim fajlovima, kao i rad sa tekstualnim promjenljivim.
125
Programiranje i M-fajlovi Pisanje programa se vri na uobiajen nain. Strelicama se pomijera kursor, u novi red se ide pritiskom na tipku Enter, sa kojom se moe stvarati i dodatni red izme|u dva ve napravljena reda. Brisanje karaktera se vri tipkom <Bck Spc> (karakter unazad), odnosno tipkom <Del> (karakter gdje se kursor nalazi). Sa svim ostalim mogunostima se moete upoznati u prilogu. Nakon zavretka rada sa editorom, program se snima aktiviranjem opcije File/Save, prilikom ega je neophodno zadati ime fajla. Imena MATLAB fajlova su obavezno sa ekstenzijom .m. Poeljno je na poetku programa ispisati komentare. Linija sa komentarom poinje znakom %. Komentari se mogu ispisivati i u programu radi njegovog jednostavnijeg praenja. Primjer 5.1.1 Napisati program za crtanje grafika funkcije f(x)=cos(x) -x. Program sauvati pod imenom proba. Poto smo ve uli u editor za program sa File/New/M-file, kucamo redom: % Crtanje grafika funkcije f(x)=cos(x) x=-pi:pi/20:pi; y=cos(x); plot(x,y) end Treba napomenuti da na kraju programa moe biti end, a ne mora. Program emo sauvati sa File/Save. Kada se fajl prvi put snima treba unijeti njegovo ime (ovdje je to proba.m). U MATLAB se moete vratiti sa Alt+Tab (tasterima zajedniki pritisnutim dok se ne pojavi MATLAB COMMAND WINDOW gdje se ovi tasteri otpuste) ili zatvarajui istovremeno fajl sa File/Exit. Otvaranje ve napisanog fajla se moe postii sa File/Open M-file pa se zatim izabere fajl sa diska koji se eli otvoriti. Fajl se moe potraiti po drugim diskovima na raunaru, po direktorijumima tekueg diska ili u spisku datih fajlova. Ako je fajl koji se eli prepraviti me|u posljednjim sa kojim se radilo, on se nalazi u MATLAB-ovom File meniju pod rednim brojem od 1 do 4. Povratak u fajl koji je otvoren i nije zatvoren u Windows-u je mogu tako|e sa Alt+Tab. Program se izvrava ukucavanjem imena bez ekstenzije. U naem primjeru: proba 126
MATLAB for Windows U MATLAB-ovoj notaciji ove fajlove moemo zvati script-fajlovi ili jednostavnije reeno programi. Vano je istai da se pozivanje nekog drugog mfajla moe izvriti i unutar programa unosei samo njegovo ime. Poslije izvravanja tog pozvanog m-fajla sve varijable ostaju u radnom prostoru i sljedee naredbe ih mogu koristiti kao poznate. Program moe pozivati sam sebe. Tako bi u naem sluaju, ako poslije naredbe plot(x,y), a prije end, unesemo liniju sa imenom naeg fajla proba, fajl pri izvravanju naredbi sam sebe pozivao i tako radio beskonano puta. Ovakav postupak kada se primjeni na funkcije naziva se rekurzijom i moe biti veoma koristan. Komentar otkucan na poetku programa dobija se sa help proba. U MATLAB-u se mogu koristi i drugi editori teksta. U Options/Editor Preference moemo definisati neki drugi editor u koji e se ulaziti opcijama File menija.
Programiranje i M-fajlovi Promjenljivoj, na primjer a, koja se zadaje naredbom input moe se i direktno dodijeliti vrijednost sa: a=input('tekst po zelji'); Naredba keyboard je znatno optija i monija od naredbe input, ali se rje|e koristi. Naredbom input moemo unijeti samo broj (matricu) ili tekst, dok naredba keyboard privremeno obustavlja izvravanje programa i vraa nas na tastaturu. Tako moemo otkucati i izvriti vie naredbi, a onda se sa return vratiti i nastaviti sa izvravanjem programa. Primjer 5.2.1 Naredbu keyboard ilustrovaemo na primjeru crtanja parabole y=a+bx2 u granicama x[0,2]. keyboard K a=1; K b=2; K x=0:.01:2; K plot(x,a+b*x.^2) K end K return Uoimo da poslije pozivanja naredbe keyboard, MATLAB prompt mijenja oblik u K. Naredbom pause privremeno zaustavljamo izvravanje programa dok ne pritisnemo neku (bilo koju) tipku za nastavak rada. Naredba pause(n) pravi pauzu u izvravanju programa od n sekundi. Primjer 5.2.2 Napisati program koji e na osnovu uitane faze sinusoide nacrtati grafik funkcije f(x)=x2 sin(x+) u intervalu -x, a zatim i izraunati integral u istom intervalu po pravougaonom pravilu sa 40 odbiraka. Poslije ulaska u editor sa File/New/M-file kucamo: fi=input('unesi fazu sinusoide ') a=-pi; b=pi; h=(b-a)/20; x=a:h:b-a; y=(x.^2).*sin(x+fi); plot(x,y) pause(3) 128
MATLAB for Windows int=sum(y)*h end Nakon iskucavanja teksta, sa File/Exit iza|e se iz Notepad-a, a prilikom izlaska dobija se pitanje: Fajl je mijenjan da li elite da sauvate promjene? Na ovo pitanje treba odgovoriti potvrdno i dati ime fajlu sa ekstenzijom .m. Program je mogue izvriti pozivom njegovog imena. Ukoliko ne bi koristili liniju sa naredbom pause raunar bi odmah poslije crtanja grafika nastavio sa radom. Ova naredba nam omoguava da imamo 3 sekunde da vidimo grafik. Postoji mogunost da se sa pause off onemogui zaustavljanje raunara u pause-modu. Ovaj mod se ponovo ukljuuje sa pause on. Naredba echo ili echo on nam omoguava da pratimo izvravanje programa. Na ekranu raunar ispisuje naredbe koje se u tom trenutku izvravaju. Pogodna je za otkrivanje greaka u programu. Naredba echo se ponitava sa echo off. Ako se eli specificirati da se dobije echo pojedinih funkcija to e se postii sa echo 'funkcija' on, gdje je funkcija odgovarajua MATLAB funkcija. Ova opcija se iskljuuje sa echo 'funkcija' off. Ako se eli izvravanje echo naredbe unutar svih funkcijskih fajlova to se moe postii sa echo on all, odnosno iskljuenje sa echo off all. Ukljuivanje i iskljuivanje echo-a se moe postii i aktiviranjem stavke menija Options/Turn Echo on (ili off). Naredba diary nam omoguava da napravimo dnevnik onoga to radimo. Ako ukucamo diary ime.tip onda e raunar od tog trenutka zapisivati sve to radimo i to raunar ispisuje kao rezultate ili poruke greke na ekranu. Sve to je zapisano nalazi se u fajlu ime.tip. Dnevnik iskljuujemo sa diary off. Ovo je posebno pogodno za demonstrativne svrhe i za pisanje izvjetaja sa objanjenjima.
129
Programiranje i M-fajlovi
3k d=
8 5 3
11 3 7
1 k 0 k
6 4 2k 1 za vrijednosti k=1, 2, 3, 4, 5 i 6. for k=1:6 a=[3*k,4,8,11;-1,-k,5,3;k,0,3,7;6,4,2*k,1]; d=det(a) end Opti oblik for petlje je: for v=vektor ili matrica naredbe end For petlja se izvrava tako to promjenljiva v uzima redom elemente vektora v ili kolone matrice v (ako je v matrica) i izvrava naredbe za uzetu vrijednost v. Jasno je da elementi vektora mogu biti i necjelobrojni i sa negativnim priratajem. for x=2:-0.1:-2 y=x.^2; end Kada se radi o vektorima onda je for petlja ista kao i do ili for petlja u ostalim programskim jezicima. Za razliku od njih, u MATLAB-u se for petlja moe izvravati i sa matricama. Mogua je viestruka upotreba for petlji. Primjer 5.2.4 Formirati matricu 7x7 iji su elementi a(i,j)=i*j. for i=1:7 for j=1:7 a(i,j)=i*j; end end a
Pomijeranje naredbi u for petlji, prilikom pisanja programa, vreno je radi bolje preglednosti. 130
1 n2
% racunanje sume reda sa zadatom tacnoscu s=0; % pocetna vrijednost sume n=1; % pocetna vrijednost rednog broja elementa while abs((-1)^n/n^2)>10^(-4) s=s+(-1)^n/n^2; n=n+1; end s end Dio programa izme|u while i end izvrava se sve dok je izraz koji slijedi poslije while istinit. Prilikom definisanja izraza kao sastavnog dijela while petlje mogu se koristiti relacione i logike operacije date u tabeli 5.1. U vezi sa logikim operacijama treba napomenuti da je u MATLAB-u izraz logiki istinit ako je razliit od nule. Tako operacija | (ili) vraa logiku jedinicu kao rezultat ako je barem jedan od operanada razliit od nule a operacija & (i) vraa logiku jedinicu ako su oba operanda razliita od nule. Poslije while moe slijediti izraz koji je uvijek istinit kao na primjer 1==1 ili 1>0. U tom sluaju bi se naredbe u while petlji izvravale beskonano puta. I ovaj oblik ponekad moe biti od koristi.
Relacione i logike operacije
131
Tabela 5.1. Relacione i logike operacije Primjer 5.2.6 Napisati program za raunanje kuba brojeva unijetih sa tastature. Postupak ponavljati neodre|en broj puta.
')
5.2.4 IF NAREDBA
Uslovno izvravanje dijela programa se ostvaruje if naredbom. Ako elimo izvriti dio programa samo ukoliko je zadovoljen neki izraz onda to inimo sa: if izraz naredbe end Primjer 5.2.7 Napisati program za izraunavanje elemenata matrice (5x5), a(i,j)=sin(2ij-i) za ij, a a(i,j)=sin(2ij-i)+1/2 za i=j. n=5; for i=1:n for j=1:n a(i,j)=sin(2*i*j-i); if i==j a(i,j)=a(i,j)+0.5; end end end
132
for izraz naredbe1 else naredbe2 end Primjer 5.2.8 Formirati vektor s=[1 4 2 4 2 4 2 4 2 4 1]. % racunanje vektora s pogodnog za simpsonov metod % izracunavanja integrala n=11; s(1)=1; s(n)=1; for i=2:n-1 if rem(i,2)==0 % rem(m,n) daje ostatak dijeljenja m sa n s(i)=4; else s(i)=2; end end s end
Zadavanje dva uslova se ostvaruje sa if i elseif uz else. U tom sluaju raunar izvrava naredbe1 koje slijede poslije if, ako je izraz uz if zadovoljen. Drugi uslov se zadaje izrazom uz elseif i u sluaju zadovoljenja tog izraza izvrava se blok naredbi koji slijedi poslije elseif. Ako nijedan od izraza nije zadovoljen onda se izvrava blok naredbi poslije else.
Programiranje i M-fajlovi else naredbe3 end Primjer 5.2.9 Izraunati elemente matrice a(i,j)=i-j za ij i i<j, a(i,j)=-a(j,i) za i>j i a(i,j)=i^2 za i=j.
n=7; for i=1:n for j=1:n if i<j elseif else a(i,j)=-a(j,i); end end end a end a(i,j)=i-j; i==j a(i,j)=i^2;
134
Ovim naredbama kreira se prozor na slici 5.1 i u zavisnosti od izbora crta se dvodimenzionalni grafik.
error('obavjestavanje o razlogu prekida, po zelji') Nailaskom na takvu naredbu raunar prekida dalji rad, uz ispisivanje unijetog teksta koji slijedi iza naredbe error (vidi primjer 5.3.2).
135
Programiranje i M-fajlovi
Primjer 5.2.11 Za matricu sluajnih brojeva odrediti one koeficijente i i j koji zadovoljavaju logiki uslov X>0.5.
x=rand(5) x= 0.5717 0.9554 0.8024 0.7483 0.0331 0.5546 0.5344 0.8907 0.4985 0.6248 [i,j]=find(x>0.5); i' i= 1 2 4 1 j' ans = 1 1 1 2
2 2
3 2
4 2
5 2
1 3
4 3
1 5
2 5
isnan(X)
Vraa jedinicu za elemente matrice koji su NaN. (Posljedica raunanja tipa 0/0 i sl.) isinf(X) Vraa jedinicu za elemente matrice koji su Inf (beskonano). finite(X) Vraa jedinicu za konane elemente matrice (nijesu Inf i NaN). isempty(X) Vraa jedinicu ako je X prazna matrica X=[]. issparse(X) Vraa nulu ako je matrica rijetka. isstr(X) Vraa jedinicu ako je matrica zapravo string - tekstualni niz. isglobal(X) Vraa jedinicu ako je promjenljiva X globalna promjenljiva (to jest ako vai u svim programima i funkcijama).
136
function s=si(x) % Definisanje funkcije si(x)=sin(x)/x s=sin(x+eps)./(x+eps); end Funkcijski fajl si poziva se sa si(a), gdje a moe biti skalar, vektor ili matrica. Rezultat je definisana funkcija sin(a)/a.
Sve promjenljive u function fajlu su lokalnog karaktera: x je ulazna, a s je izlazna varijabla koja se dobija u obliku ans poslije pozivanja funkcijskog fajla (probajte si(2) ili x=-7:.2:7; plot(x,si(x))). Tekst oznaen komentarom %, koji slijedi poslije linije function, dobija se sa help si i slui kao objanjenje definisane funkcije. Funkcijski fajlovi se mogu praviti i sa vie ulaznih i izlaznih varijabli. Primjer 5.3.2 Napisati potprogram za raunanje vektorskog proizvoda dva trodimenziona vektora.
function c=vekpr(a,b) % racunanje vektorskog proizvoda c=axb if length(a)=3 | length(b)=3 error('duzina vektora a ili b nije 3') end c(1)=a(2)*b(3)-a(3)*b(2); c(2)=a(3)*b(1)-a(1)*b(3); c(3)=a(1)*b(2)-a(2)*b(1); end Poslije izlaska uz zapisivanje fajla vekpr.m, moemo probati kako on radi. Na primjer r=vekpr([1 2 3],[-1 0 5]).
U prethodnom funkcijskom fajlu koriena je poruka greke. Ako duina vektora a ili vektora b nije 3, program prekida dalje izvravanje naredbi uz poruku "duzina vektora a ili b nije 3". Treba napomenuti da MATLAB ima ugra|enu funkciju cross koja rauna vektorski proizvod, tako bi unoenje cross([1 2 3],[-1 0 5]) 137
Programiranje i M-fajlovi
dalo isti rezultat kao naa funkcija. U function fajlovima, koje smo do sada razmatrali, imali smo samo jednu izlaznu promjenljivu. Broj izlaznih promjenljivih, me|utim, moe biti vei i moe se dobiti naredbom nargout, dok se broj ulaznih promjenljivih dobija sa nargin. Primjer 5.3.3 Odrediti najbliu i najdalju taku na elipsoidu a 2 + b2 + c2 = 1, od date ravni Ax+By+Cz+D=0. Ako je broj izlaznih argumenata vei od dva onda izraunati i rastojanja taaka na elipsi i ravni. Ose elipse zadati u vektoru e=[a b c], a ravan u vektoru m=[A B C D]. Najblie i najudaljenije take su one u kojima je vektor normale na elipsu n=[2x/a2 2y/b2 2z/c2] kolinearan sa vektorom normale ravni [A B C] tj.: 2y/b2=kB 2z/c2 =kC 2x/a2 =kA Konstanta k se odre|uje iz uslova da taka [x y z] lei na elipsi. k2=4/(A2a2+B2b2+C2c2) function [x1,x2,d1,d2]=raste(e,m) % Odredjivanje najblize i najudaljenije tacke na elipsoidu od % zadate ravni, kao i rastojanje tih tacaka od ravni k1=2/sqrt((e*m(1:3)')^2); k2=-2/sqrt((e*m(1:3)')^2); % x1=k1*m(1:3).*e.^2/2; x2=k2*m(1:3).*e.^2/2; if nargout>2 d1=abs(x1*m(1:3)'+m(4))/sqrt(sum(e.^2)); d2=abs(x2*m(1:3)'+m(4))/sqrt(sum(e.^2)); end end Prethodni funkcijski fajl moe se pozivati sa promjenljivim brojem izlaznih argumenata. Ako ga pozovemo sa [x1,x2]=raste([1 2 2],[1 0 -1 3]) onda e raunati samo take x1 i x2, na elipsoidu sa osama a=1 b=2 i c=2 respektivno, koje su najblie odnosno najdalje od ravni sa koeficijentima A=1 B=0 C=-1 i D=3 i njih dati kao izlazne varijable. Ako ga pozovemo sa [x1,x2,d1,d2]=raste([1 2 2],[1 0 -1 3]) onda e raunati i koordinate taaka i njihovo rastojanje do ravni. Funkcijski fajl ne mora imati izlazne promjenljive. Ako je potrebno izvriti odre|ene operacije sa zadatim varijablama (na primjer radi crtanja grafika na
x2 y2 z2
138
Slika 5.2 Grafik diskretnog signala Broj ulaznih argumenata tako|e moe biti promjenljiv. Primjer 5.3.5 Izraunati teinu tijela mase m. Ako se kao ulazni parametar zada samo m onda uzeti da je tijelo na povrini Zemlje. Ako se zada i r onda uzeti da je tijelo na visini r od povrine Zemlje, a ako se zada m, r i M onda uzeti da se tijelo m nalazi na rastojanju r od planete mase M. function q=tezina(m,r,M) % % racunanje tezine tijela. Ako je zadato samo m na povrsini Zemlje. % Ako je zadato m i r onda na visini r iznad Zemlje, 139
Programiranje i M-fajlovi % a ako je zadato m, r i M onda na rastojanju r od planete mase M. % Uzeto je Mzem=4.9156*10^24, Rzem=6371377 i gama=6.672*10^(-11) % if nargin==1 q=m*9.81; elseif nargin==2 q=6.672*10^(-11)*m*4.9156*10^24/(6371377+r)^2; else q=6.672*10^(-11)*m*M/r^2; end end Promjenljivi broj ulaznih parametara esto se koristi i pri pozivanju function fajlova za raunanje varijabli sa odre|enom tanou. Primjer 5.3.6 Korienjem razvoja u red napraviti program za raunanje sin(x) sa zadatom tanou etac za relativno male vrijednosti x. Ako nije zadata tanost raunati sin(x) sa tanou 0.00001. Razvoj sinusa u red oko nule je oblika: sin(x)=x-x3/3!+x5/5!-x7/7!+...+(-1)n-1x2n-1/(2n-1)!+... function s=sinred(x,etac) % % sinred(x,etac), racunanje sinusa pomucu reda, ako nije zadata % tacnost onda se uzima da je etac=0.00001 % if nargin==1 etac=10^(-5); end s=x; f=x; n=1; while f>etac n=n+1; f=(-1)^(n-1)*x^(2*n-1)/prod(1:2*n-1); s=s+f; end end Na kraju ovog odjeljka daemo i nekoliko napomena. Kada neki m-fajl koristimo prvi put, on se kompilira i smjesti u memoriju i tako je dostupan za kasniju upotrebu. 140
s='MATLAB' s= MATLAB Apostrof na poetku i kraju oznaava da neku promjenjljivu treba tretirati kao tekst. Svako slovo varijable s smjeta se kao jedan elemenat vektora, pa je s vektor dimenzija (1x6). size(s) ans = 1 6 Vrijednosti ASCII koda koje odgovaraju pojedinim slovima dobijaju se sa abs. c=abs(s) c= 77 65 84 76 65 66 141
Programiranje i M-fajlovi
ASCII vrijednosti se pretvaraju u karaktere sa setstr. Ovo je operacija inverzna operaciji abs, za sluaj tekstualnih promjenljivih.
setstr(c) ans = MATLAB Sloeni vektori mogu se graditi kao i kod operacija sa brojevima, dodajui vrste ili kolone. d='VER4.2'; e=[c,blanks(2),d] e= MATLAB VER4.2 f=[c;d] f= MATLAB VER4.2 Funkcija blanks(n) kreira string koji se sastoji od n praznih polja (spaceova). Naredba deblank ima suprotno dejstvo naredbi blanks to jest brie bjeline u stringu (space-ove i Tab-ove).
Ukoliko ne elimo da raunar ispisuje ime varijable onda moemo koristiti naredbu disp.
disp(e) MATLAB VER4.2 Unoenje tekstulanih promjenljivih se vri naredbom: input('proizvoljan tekst',s') gdje s oznaava da se radi o tekstualnim varijablama.
Primjer 5.4.1 Napraviti m-fajl koji e simulirati bacanje 5 kocaka za igranje jamba.
% program jamb % program koji simulira bacanja kocki u jambu. Poslije % prvog bacanja treba otkucati redne brojeve kocki koje % se ponovo bacaju. input('zelis li objasnjenje da ili ne', 's') if ans=='da' help jamb 142
MATLAB for Windows disp('pritisnuti bilo koju tipku za nastavak...') pause clc end ans='a'; while(ans='k') y=ceil(rand(1,5)*6) input(' koje kocke bacas ponovo [x x x] (ako ne bacas [0]) ') if ans=[0] y(ans)=[]; y(5-length(ans)+1:5)=ceil(rand(1,length(ans))*6); end disp(y) input(' pritisni bilo koju tipku za nastavak ili k za kraj...','s') clc end Naredba iz fajla clc brie komandni prozor i vraa na komandni prompt.
Veoma vana naredba za rad sa stringovima je eval(s). Ova naredba znai da raunar izvri tekst u promjenljivoj s kao naredbu.
s='sin(x).*x.^3' Ovako napisana varijabla s je tekst. Me|utim ako zadamo x: x=2 onda naredbom eval(s) izvravamo sadraj varijable s: eval(s) to je isto kao da smo otkucali: sin(x).*x.^3 Varijabla s moe imati i vie vrsta, koje moraju biti iste duine. eval(s(i,:)) u tom sluaju izvrava naredbe koje su sadrane u pojedinim vrstama. Posluimo se funkcijom str2mat kojom se formira matrica ije su vrste pojedini stringovi i izvri se automatsko popunjavanje nulama pojedinih vrsta. s=str2mat('x=2','y=3','z=x.^2+y'); eval(s(1,:)) x= 2 143
Programiranje i M-fajlovi eval(s(2,:)) y= 3 eval(s(3,:)) z= 7 Naredba int2str(j) pretvara cjelobrojnu vrijednost j u tekstualnu varijablu i tretira je kao tekst. r=int2str(5); s='ime'; t=[s r] t= ime5
Ova naredba moe biti posebno interesantna kada elimo unutar for petlje sauvati vie grafika, vie promjenljivih ili uitavati vie varijabli koje se razlikuju u imenu. Na primjer, kada unutar petlje dobijamo n grafika i elimo ih sauvati pod imenima slll1.ps, slll2.ps, slll3.ps ... sllln.ps, onda to moemo uiniti sa:
144
recenica='dvadeset deveti avgust hiljadu devetsto devedeset prve godine'; findstr(recenica,'a') ans = 3 17 28 nalazi se pozicija u stringu recenica sve pozicije gdje se pojavljuje slovo a. Npr. pozicije u kojima se u istom stringu pojavljuje string 'dev' se dobijaju naredbom findstr(recenica,'dev') ans = 10 32 41
Ako stringa b nema u stringu a rezultat je prazna matrica
findstr(recenica,'deseti') ans = [] Naredba upper(a) pretvara sva slova u stringu u velika, a naredba lower(a) pretvara slova u mala: a='sTRIng'; A=upper(a) A= STRING AA=lower(a) AA = string Funkcija isletter(a) vraa nulu za one karaktere stringa koji nijesu slova a za slova vraa jedinicu, dok funkcija isspace(a) vraa jedinicu za one karaktere koji su bjeline (space-ovi ili tab-ovi) a za ostale vraa nulu. Funkcija strrep(a,b,c) u stringu a mijenja string b sa stringom c. Posmatrajmo sljedei primjer a='Niz karaktera koji se mjenja'; strrep(a,'koji','promjenljiv') 145
Programiranje i M-fajlovi ans = Niz karaktera promjenljiv se mjenja Dakle u nizu a mijenjamo rije koji sa rijei promjenljiv. Naredbom strtok(a,b) odsjeca u stringu a onaj dio do pozicije gdje se pojavljuje string b, tako naredbom strtok(a,'r') ans = Niz ka iz niza a odsjeca se niz do prvog pojavljivanja slova r.
U MATLAB-u postoje i funkcije koje konvertuju podatke, tako funkcija num2str(x) konvertuje broj x u string koji ima iste elemente.
146
MATLAB for Windows s1=[4*ones(1,n/2-1);2*ones(1,n/2-1)]; s=[1 s1(:)' 4 1]; h=(b-a)/n; x=a:h:b; y=eval(f); in=sum(y.*s)*h/3; end end
Izraunajmo sada integral funkcije f(x)=xsin(x)cos(x) u intervalu od -1 do 1. To emo uiniti prosto naredbom f='x.*sin(x).*cos(x)'; simp(f,-1,1). Tanost je automatski 0.001. Zadata tanost, npr. 0.00001, postie se sa simp(f,1,1,0.00001). U ovom primjeru treba rei da bi korektnije bilo definisati relativnu umjesto apsolutne greke. Naredba while bi u tom sluaju bila: while abs((in-is)/in)>tac. U MATLAB-u postoje dvije ugra|ene funkcije za izraunavanje odre|enog integrala:
I=
f ( x)dx
a
u obliku I=quad(f,a,b,tac, korak) ili I=quad8(f,a,b,tac,korak), gdje je f naziv funkcije, a donja granica, b gornja granica, tac eljena tanost i korak korak integracije (koji se moe izostaviti i tada se uzima neka default vrijednost). Razlika izme|u ova dva algoritma je u brzini konvergencije koja je kod funkcije quad8 vea ali je istovremeno sloenost izraunavanja poveana. Primjer 5.5.2 Izraunati integral funkcije f(x)=sin(x) od 0 do , sa tanou 0.000001. quad('sin',0,pi,0.000001) Napominjemo da se na ovaj nain mogu raunati jedino integrali ugra|enih funkcija ili funkcija definisanih m-fajlovima. Primjer 5.5.3 Izraunati integral funkcije f(x)=xsin(x) od 0 do , sa tanou 0.000001. Potrebno je definisati funkciju f(x)=xsin(x), koju emo zvati sx(x). function s=sx(x)
147
Programiranje i M-fajlovi s=x.*sin(x); end Poslije izlaska iz editora, integral raunamo sa: quad('sx',0,pi,0.001) Nulu funkcije definisane m fajlom ili ugra|ene funkcije, u okolini take x=a, moemo dobiti sa fzero(f,a,tac).
Primjer 5.5.4 Nai nule funkcije y=x3+x2-2x-1 za x<0. U funkcijskom fajlu ff.m definiimo funkciju:
148
Programiranje i M-fajlovi yp(1)=y(2)+sqrt(y(1)); yp(2)=-y(1)-sin(y(1)/2); end [t,y]=ode23('sss',-2,2,[0 1]); plot(t,y) Veoma je interesantna funkcija fmin('s',xo,xk) kojom se trai minimum funkcije s u intervalu od xo do xk. Na primjer za funkciju function y=fff(x) y=x.^3-x-1; end
na|imo minimum u intervalu 0x4 fmin('fff',0 ,4)
ans = 0.5774 Pored ove funkcije postoji i funkcija fimns koja slui za traenje minimuma funkcije vie promjenljivih. Ove dvije funkcije imaju mnotvo opcija sa kojim se moete upoznati u helpu. U MATLAB-u postoji funkcija fplot koja slui za crtanje funkcije u nekom zadatom intervalu. Ovu funkciju emo objasniti kroz sljedee primjere. Naredbom fplot('sin',[0 4*pi]) iscrtava se funkcija sin(x) u intervalu 0x4, dok se naredbom fplot('sin(x)',[0 4*pi],'-+') prikazuje ista funkcija u istom intervalu pomou markera -+. Naredbom fplot('[sin(x),cos(x)]',[0 4*pi],'-x') prikazuju se funkcije sin(x) i cos(x) u intervalu 0x4 sa markerima '-x'. Naredba fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o') crta apsolutnu vrijednost sume reda e-jxn za n od 0 do 9 u granicama 0x2 sa markerima '-o'. Na slici 5.4a prikazana je ova funkcija. Funkcija y=tan(x) u granicama -2x2 i -2y2 se crta naredbom (slika 5.4.b) fplot('tan',[-2*pi 2*pi -2*pi 2*pi],'-*') Naredbom fplot('[tan(x),sin(x),cos(x)]',[-2*pi 2*pi -2*pi 2*pi]) 150
a)
6 4 2 0 -2 -4 -6 -6 -4 -2 0 2 4 6 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0.02 0.04
b)
0.06
0.08
0.1
c)
d)
151
Programiranje i M-fajlovi
10 8 6 4 2 0 -2 -4 -6 -8 -10 -4 -3 -2 -1 0 1 2 3 4 10 8 6 4 2 0 -2 -4 -6 -8 -10 -4 -3 -2 -1 0 1 2 3 4
f)
152
glava esta
GRAFIKI OBJEKTI
U ovom poglavlju e biti objanjene funkcije za kontrolu pojedinih elemenata grafikog okruenja MATLAB-a: osnovnog ekrana, grafikog prozora, koordinatnog sistema, linija, povrina, kolorne matrice podataka, popunjenih poligona, teksta, ulazno izlaznog menija i grafikih kontrola. Posebno je vano upravljanje pojedinim grafikim objektima koji se kreiraju uobiajenim grafikim funkcijama. U sklopu ovog poglavlja vodilo se rauna o grafikim komandama koje prilikom rada kreiraju jedan odnosno vie objekata. Na kraju poglavlja dat je kompleksan primjer u kom je obuhvaen rad sa najvanijim grafikim objektima i njihovim osobinama.
Grafiki objekti ScreenSize = [1 1 640 480] Units = pixels ButtonDownFcn = Children = [1] Clipping = on Interruptible = no Parent = [] Type = root UserData = [] Visible = on Objasnimo neke od osobina osnovnog prozora: CurrentFigure Trenutno aktivni grafiki prozor. Ova osobina se moe dobiti i sa gcf. Promjena tekueg grafikog prozora se moe postii sa gcf=broj. Grafiki prozori koji se otvaraju redom dobijaju brojeve od jedan pa nadalje. Da li je ukljueno kreiranje dnevnika. Ako nije, vrijednost ove osobine je 'off', a ako jeste 'on'. Fajl u kom se smjeta dnevnik. Default vrijednost osobine je 'diary'. Pokazuje stanje naredbe echo. Koji je nain prikazivanja brojeva ukljuen. Npr. 'short', default vrijednost koja odgovara naredbi format short. Definie format zapisivanja matrica. Mogue vrijednosti ove osobine su 'compact' i 'loose' koje odgovaraju naredbama format compact i format loose. Pozicija pokazivaa mia. U kom se prozoru trenutno nalazi pokaziva mia. Ako je to osnovni prozor vrijednost ove osobine je 0. Veliina ekrana. Vektor sa etiri elementa koji determiniu poetne i krajnje take grafikog prozora. Jedinica u kojoj se mjeri grafiki prozor. Mogue vrijednosti su 'pixels' - ekranska taka, 154
MATLAB for Windows 'normalized' - normalizovane vrijednosti, donji lijevi ugao grafikog prozora (0,0) a gornji desni (1,1), 'inches' - ini (1in=2.54cm), 'centimeters' centimetri i 'points' - 1/72 ina. Children Vektor numerikih identifikatora grafikih prozora. Parent Numeriki identifikator roditelja tekueg grafikog objekta. Osnovni ekran nema roditelja pa je vrijednost ove osobine prazna matrica []. Naredba get omoguava da se dobiju i pojedine osobine grafikog prozora, npr. get(0,'Diary') daje sadraj osobine Diary. Za postavljanje osobina koristi se naredba set. Npr. naredbi figure(2); set(0,'CurrentFigure',2) adekvatna je naredba gcf=2 odnosno, naredbi set(0,'Diary','on','DiaryFile','dnevnik.txt') adekvatna je naredba diary dnevnik.txt Potpuno su adekvatne i naredbe set(0,'Format','long') format long Postoji tako|e i niz osobina koje se mogu samo proitati i kod kojih pokuaj mijenjanja prouzrokuje greku. Tako se ne moe promijeniti vrijednost osobine ScreenSize. set(0,'ScreenSize',[1 1 234 432]) ??? Error using ==> set Read-only properties can't be modified. Napomenimo da nazive osobina npr. ScreenSize moemo pisati bez razlike i malim i velikim slovima. U ovom pregledu su obra|ene osobine koje se mogu mijenjati kako naredbom set tako i nekom od ve definisanih naredbi. Postoji 155
Grafiki objekti itav niz osobina grafikih objekata kojima se moe prii samo naredbom set i sa njima emo se jo srijetati. Naredbom set(0) moemo da vidimo mogue vrijednosti koje mogu uzimati pojedine osobine.
Name NumberTitle
MATLAB for Windows PaperType Tip papira na koji se moe tampati grafiki objekat. Predefinisan je usletter, a mogue je uzeti i vie drugih tipova me|u kojima a4, b5 itd. Primjer 6.2.1 Kreirajmo dva grafika prozora imena Prozor2 sa i bez broja prozora sa razliitim bojama pozadine. figure('Color',[0.3 0.8 1],'Name','Prozor2','NumberTitle','off') figure('Color','r','Name','Prozor2') NextPlot Osobina definie gdje e biti prikazan naredni grafik. Vrijednosti ove osobine mogu biti: 'add' dodaje grafik u tekui grafiki prozor, 'new' otvara novi grafiki prozor i u njemu prikazuje novi grafik, 'replace' stari grafik mijenja sa novim. PaperUnits Jedinice u kojima se mjeri veliina papira koja odgovara grafikom prozoru. PaperOrintation Orijentacija papira, moe biti uspravljena 'portrait' ili poloena 'landscape'. Ova se osobina moe podeavati naredbom orient. PaperPosition Pozicija papira (vektor sa etiri elementa) - to jest margine na tampajuem papiru. PaperSize Veliina papira (vektor sa dva elementa). PaperType Tip papira. Mogu biti 'usletter' - 8x11 1/2 ina, 'a4' - 21x29.7cm, itd. Pointer Oznaka pokazivaa mia. Strijelica je sa 'arrow' a asovnik 'watch'. Pokaziva mia je u obliku asovnika kada je raunar zauzet nekom operacijom pa se na ovaj nain onemoguava zadavanje operacija miem. Position Pozicija grafikog prozora na ekranu (vektor sa etiri elementa). Units Jedinice u kojima se mjeri veliina papira. Primjer 6.2.2 Formirati grafike prozore razliitih veliina sa razliitim mjernim jedinicama. figure('Name','Vel1','Units','inches','Position',[2.5 2.5 5.5 5.5]) figure('Name','Vel2','Units','Pixels','Position',[45 45 120 210]) figure('Name','Vel3','Units','Normalized','Position',[0.2 0.2 0.6 0.4]) figure('Name','Vel4','Units','Points','Position',[100 100 400 300]) 157
Grafiki objekti Type Visible Children Parent Tip grafikog objekta (ovdje 'figure'). Ako je 'on' prozor je vidljiv odnosno 'off' ako je nevidljiv. Objekti kreirani unutar grafikog prozora. Roditelj, objekat iz kojeg je kreiran grafiki prozor.
MATLAB for Windows axes(a) ini se tekuim koordinantni sistem iji je identifikator a. Naredbom axes, bez argumenata, crta se prazan koordinantni sistem. Vrijednostima pojedinih osobina se u tom sluaju dodjeljuju neke predefinisane vrijednosti. U ovom sluaju koordinantni sistem zauzima itav grafiki prozor. Najvanije osobine grafikog objekta su: AspectRatio Vektor sa dva elementa, prvi definie odnos duina vertikale sa horizontalnom osom a drugi odnos jedinica u kojima se mjere koordinante ose. Predefinisano je [-Nan -Nan]. Pravougaonik oko tekuih osa. Ako je 'on' crta se pravougaonik oko osa a sa 'off' se ne crta.
Box
Primjer 6.3.1 Nacrtati krivu y=x3-2x2 u intervalu -4x4 i onemoguiti iscrtavanje pravougaonika oko osa. x=-4:.1:4; y=x.^3-2*x.^2; plot(x,y) set(a,'box','off') Clim Color set(a,'color','g') ColorOrder
Vektor sa dva elementa koji definiu predstavljanje u pseudo bojama. Ova se veliina moe postavljati naredbom caxis. Boja grafika u kome se iscrtavaju koordinante ose.
Primjer 6.3.2 Grafik iz prethodnog zadatka nacrtati na zelenoj pozadini. Matrica dimenzija m x 3, kojom se definie redosljed boja kojim e se isrtavati linije na ekranu. Ako se nita ne zada, pretpostavljaju se prvih est boja iz MATLAB palete. Ove se osobine mogu postavljati kao u naredbi plot sa 'r', 'w', itd... Ugao pod kojim se prikazuje tekst. Font u kojem e se ispisivati tekst na osama. Npr. 'helvetica'. Veliina fonta u takama - pointima. Prekrieni font. Mogue vrijednosti 'on' ili 'off'. 159
Grafiki objekti FontWeight FontUnderline FontWeight Stil fonta. Predefinisana vrijednost je 'normal', a mogue vrijednosti su 'light' (posvjetljena slova), 'bold', (podebljana slova). Podvueni font. Mogue vrijednosti 'on' ili 'off'. Debljina fonta. Mogue vrijednosti 'normal' i 'bold'.
Primjer 6.3.3 Na prethodni grafik nanijeti font Swiss veliine 30 prekrien. set(a,'FontName','Swiss','FontSize',30,'FontStrikeThrough','on') GridLineStyle Odre|uje oblik linija koje slue za mreu. Mogue vrijednosti '-', '--', '-.', ':' i '.'. Ova se mrea iscrtava naredbom grid. LineWidth Debljina linije kojom se iscrtavaju ose. Primjer 6.3.4 Prikazati na prethodnom grafiku mreu u obliku pune linije. Neka debljina osa bude 2. set(a,'GridLineStyle','-','LineWidth',2) grid NextPlot Definie poziciju iscrtavanja novog grafika. 'new' grafik se crta u novom koordinantnom sistemu, 'add' - dodaje se u postojei, 'replace' - mijenja tekui grafik u koordinantnom sistemu. Position Vektor sa etiri elementa koji definiu poziciju koordinantnog sistema na ekranu. TickDir Pozicija crtica kojim se oznaavaju pojedine vrijednosti na koordinatnim osama. Predefinisano je 'in' (crtice orjentisane unutar grafika) i 'out' (crtice orjentisane van grafika). TickLength Duina crtice kojom se oznaavaju pojedine vrijednosti na koordinantnim osama. Title Naslov prozora. Ovo je tekstualni objekat iji se numeriki identifikator dobija naredbom get(gca,'Title') Osobine ovog objekta se dobijaju naredbom get(get(gca,'Title')) dok se osobine postavljaju naredbom 160
MATLAB for Windows set(get(gca,'Title'),'Osobina1','Vrijednost1',...) Tekstualni objekti su i labele koordinatnih osa - osobina XLabel, YLabel i ZLabel. Units View Veliine u kojima se mjere veliine koordinatnih osa. Mogue jedinice su 'pixels', 'normalized', 'inches', 'centimiters' i 'points'. Vektor sa dva elementa koji slui za preslikavanje 3-D grafika u 2-D zonu. Moe se postavljati naredbom view, i vezan je za grafike tipa 'mesh', 'watterfall' i 'surf'. Za definisanje x-ose se koriste naredbe: XColor XDir XGrid XScale XTick XTickLabels Boja x-ose. Orjentacije x-ose. Mogue vrijednosti su 'normal' x-osa orjentisan u pravcu porasta vrijednosti x i 'reverse' suprotno. Moe imati vrijednosti 'on' i 'off'. Ako je 'on' iscrtava se mrea normalna na x-osu. Definie nain skaliranja x-ose. Mogue vrijednosti su 'linear' i 'log'. Markeri koji se nalaze na nekim takama grafika. Definie poziciju labele na x-osi gdje postoji XTick.
Primjer 6.3.5 Na grafik iz prethodnih zadataka nanijeti oznake na x-osi a, b, i c. Ujedno neka boja x-ose bude plava. set(a,'XTickLabels',['a' 'b' 'c']','XColor','b') XTickaLabelMode Mogue vrijednosti 'manual' - runo postavljanje labela, 'auto' - automatsko postavljanje labela. XLim Vektor sa dva elementa od kojih prvi definie donju granicu a drugi gornju granicu x-ose. Ova se osobina moe postavljati i naredbom axis. Iste osobine kao za x-osu postoje i za druge dvije koordinantne ose. Ove se osobine razlikuju samo po prvom slovu imena. Children Numeriki identifikatori svih objekata kreiranih koordinatnih osa.
161
Grafiki objekti Primjer 6.3.6 Unutar osa nacrtati funkcije y=x2 i y=2x+4 i nai identifikatore ovih objekata. a=axes; x=-4:0.1:4; plot(x,x.^2,x,2*x+4) get(a,'Children') ans = 62.0001 61.0001 Parent Visible Numeriki identifikator grafikog prozora u kom su se kreirale ose. Definie vidljivost osa.
Primjer 6.3.7 Uiniti nevidljivim ose date numerikim identifikatorom a iz prethodnog zadatka. set(a,'Visible','off')
MATLAB for Windows x=-1:0.02:1; a=plot(x,sin(x.^2)) Numeriki identifikator linije grafika je a= 62.0002 Odredimo numerike identifikatore funkcija nacrtanih na jednom grafiku y=sin(x2) i y=sin(x2)/(x+3). b=plot(x,sin(x.^2),'r',x,sin(x.^2)./(x+3)) b= 69.0004 70.0004 Naredbom contour dobija se vie objekata tipa linija. Primjer 6.4.2 Nacrtati izodijagram z=sin(x2+y2-2xy) u granicama -2x2 i -2y2. Odrediti numeriki identifikator svih linija u grafiku. [x,y]=meshdom(-2:.1:2,-2:.1:2); z=sin(x.^2+y.^2-2*x.*y); [a,b]=contour(z); Numeriki identifikatori izolinija smjeteni su u vektoru b b b= 74.0002 75.0001 76.0001 77.0001 78.0001 79.0001 80.0001 81.0001 82.0001 Naredbom get(a(1)) dobijaju se osobine objekta tipa linija. Naredbama meshc i surfc, pored vie objekata tipa linija, stvara se jedan objekat koji predstavlja povrinu i tipa je surface. 163
Grafiki objekti Primjer 6.4.3 Nacrtati meshc dijagram promjenljive z iz prethodnog primjera i odrediti tip ovako kreiranih grafikih objekata. a=meshc(z) a= 75.0002 80.0002 81.0002 82.0002 83.0002 84.0002 85.0002 86.0002 87.0001 88.0001 get(a(1),'Type') ans = surface get(a(2),'Type') ans = line Prvi kreirani grafiki objekat je tipa povrine (surface) dok su ostali tipa linije (line). Neke od znaajnijih osobina objekta tipa linije (line) su: Color Boja linije. LineStyle Oblik linije. LineWidth Debljina linije. Xdata Podaci po x-osi. Sline su osobine Ydata i Zdata (ova posljednja kod naredbe plot3). Parent Roditeljski koordinatni sistem. Type Za ovaj grafiki objekat 'line'. Primjer 6.4.4 Nacrtati funkciju y=sin(x) za -2x2 i podesiti irinu linije na 2 i neka je grafik predstavljen bojom [0.3 0.8 1]. x=-pi:0.02:pi; a=plot(x,sin(x)); set(a,'LineWidth',2,'Color',[0.3 0.8 1])
MATLAB for Windows Popunjeni poligon se dobija naredbama fill i fill3. Funkcija waterfall daje vie objekata tipa patch. Vane osobine ovih grafika su: EdgeColor FaceColor LineWidth Type Boja granine linije. Boja povri. Debljina granine linije. Za ovaj grafiki objekat tip je 'patch'.
Naredbe Xdata, Ydata, Zdata, Children, Parent i ostale, analogne su kao kod ostalih grafikih objekata. Primjer 6.4.5 Nacrtati funkciju y=sqrt(x) kao poligon popunjen crvenom bojom. Zatim podesiti boje povrine i granice, a debljinu granice postaviti na 5. x=1:20; a=fill(x,sqrt(x),'r') a= 62.0001 set(a,'FaceColor',[1 0.3 0.8],'EdgeColor',[0 0.3 0.8],'LineWidth',5)
Kod teksualnog objekta, postoji tako|e niz osobina koje se odnose na font. Tip ovog objekta je 'text'. Ve je napomenuto da kada se kreiraju ose istovremeno se kreira i vie tekstualnih objekata (Title, Xlabel, Ylabel, Zlabel), iji se numeriki identifikator moe dobiti naredbom get(gca,'xlabel') dok se osobine tekstualnog objekta dobijaju naredbom get(get(gca,'xlabel')) odnosno sadraj osobine FontSize sa get(get(gca,'xlabel'),'FontSize') Analogno se mogu postavljati osobine ovakvog objekta sa set(get(gca,'xlabel'),'FontSize',20) 166
MATLAB for Windows Primjer 6.4.7 Za 0x1 naredbom plot nacrtati funkciju y=exp(-x2)sin(x2). Nakon toga unijeti xlabel-u sa sadrajem 'Potpis ispod crtea' u plavoj boji i podvueno. x=0:0.01:1; y=exp(-x.^2).*sin(x.^2); plot(x,y) set(get(gca,'xlabel'),'String','Potpis ispod crteza','Color','b','FontUnderline','on')
Pored ovih postoji i niz drugih osobina za ovu kontrolu manje znaajnih. Primjer 6.5.1 Kreirati grafiki prozor i na njemu unijeti frame kontrolu koja e sluiti kao nosilac ostalih kontrola. 167
Grafiki objekti PrvaGP=figure('NumberTitle','off','Name','Program za 2-D prikaze',... 'Resize','off','Position',[6 6 628 412]); Frame1=uicontrol(PrvaGP,'Style','frame','Position',[400 1 340 410],... 'BackgroundColor',[0.62 0.22 0.40]);
MATLAB for Windows a=uicontrol('Style','edit','Position',[120 200 100 20],'String','Pocetak') get(a,'String') ans = Kraj Veoma vana osobine ove (pa i drugih kontrola) je Callback gdje se upisuje niz naredbi koji e se izvriti kada se aktivira ova kontrola. Na primjer u edit kontrolu upiimo String1 String1='Pocetak'; a=uicontrol('Style','edit','Position',[120 200 100 20],... 'String',String1,'Callback','String1=get(a,''String'')') a= 61.0001 Klikom na kontrolu i upisom stringa mjenja se i promjenljiva String1, npr. neka se prvo upie 'Nastavak', pa zatim 'Kraj'. String1 = Nastavak String1 = Kraj Primijetimo da kada se javi potreba da se u okviru Callback koristi apostrof ovdje se mora unijeti dvaput. Ako se sadraj Callback stringa prostire u vie redova uokviruje se srednjim zagradama, redovi poiju apostrofom a zavravaju apostofom, pa se postavlja zarez i tri take pa novi red. Posljednji red zavrava se apostrofom. Primjer 6.5.4 Neka se u grafikom prozoru unesu tekst kontrola sa promjenljivom 'N=' i edit kontrola u kojoj se u poetku nalazi string '20'. Neka je poetna vrijednost promjenljive N=20 i neka se pomou edit kontrole upisom brojeva u nju unosi i mijenja sadraj promjenljive N. N=20; uicontrol('Style','text','Position',[120 200 40 20],'String','N=') a=uicontrol('Style','edit','Position',[160 200 60 20],... 'String','20','Callback','N=str2num(get(a,''String''))') Unesimo u edit kontrolu vrijednost 234 i proitajmo sadraj promjenljive N N= 169
MATLAB for Windows SQRT=0; Radio1=uicontrol(PrvaGP,'Style','Radio','Position',... [445 254 15 15],'Value',1,'Callback',... 'set(Radio1,''Value'',1);set(Radio2,''Value'',0);SQRT=0;',... 'Backgroundcolor',[0.8 0.8 0.8]); Radio2=uicontrol(PrvaGP,'Style','Radio','Position',... [505 254 15 15],'Value',0,'Callback',... 'set(Radio2,''Value'',1);set(Radio1,''Value'',0);SQRT=1;',... 'Backgroundcolor',[0.8 0.8 0.8]);
Grafiki objekti Primjer 6.5.7 Povezati slider kontrolu sa edit kontrolom iz primjera 6.5.4. Neka se promjena veliine M moe obavljati klizaem i edit kontrolom i neka ove dvije kontrole auriraju jedna na drugu. M=20; Tekst1=uicontrol(PrvaGP,'Style','text','Position',[405 390 25 15],... 'String','M=','Backgroundcolor',[0.8 0.8 0.8]); Edit1=uicontrol(PrvaGP,'Style','edit','Position',[427 390 30 15],... 'String','20','Callback',... ['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',... 'M=str2num(get(Edit1,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]); Slider1=uicontrol(PrvaGP,'Style','Slider','Position',[460 388 145 20],... 'min',20,'max',256,'Value',0,'Callback',... 'M=fix(get(Slider1,''value''));set(Edit1,''string'',num2str(fix(M)));');
6.6 UIMENU
U dosadanjem radu vidjeli smo da grafiki prozor moe biti sa standardnim menijem ili bez njega. Dodatne opcije menija se mogu dodavati naredbom uimenu. Oblik ove naredbe je a=uimenu('Label','NaslovOpcije','Osobina1','Vrijednost1',...) Numeriki identifikator a slui za upravljanje ovom opcijom menija. U okviru jedne opcije menija mogu se formirati podmeniji naredbom b=uimenu(a,'Label','NaslovOpcije','Osobine','Vrijednosti',...) 172
MATLAB for Windows gdje je a numeriki identifikator menija a b je identifikator opcije tog menija. I meni opisan identifikatorom b moe posjedovati svoje podopcije. Primjer 6.6.1 Dodati standardnom meniju grafikog prozora PrvaGP meni Options i u njemu nekoliko podopcija. Meni(1)=uimenu(PrvaGP,'Label','Options'); Meni(2)=uimenu(Meni(1),'Label','Funkcija1'); Meni(3)=uimenu(Meni(1),'Label','Funkcija2'); Meni(4)=uimenu(Meni(1),'Label','Funkcija3'); Meni(5)=uimenu(Meni(1),'Label','Izbor funkcije'); Meni(6)=uimenu(Meni(1),'Label','Colormap'); gdje su podopcije Funkcija 1, Funkcija 2, Funkcija 3, Izbor funkcije i Colormap. Uobiajeno sve opcije menija imaju u imenu jedno podvueno slovo koje slui za brzo startovanje opcije sa tastature. Ispred tog slova treba stavljati znak &. Primjer 6.6.2 U prethodnom primjeru podvui razliite karaktere koji slue za startovanje opcija sa tastature. Meni(1)=uimenu(PrvaGP,'Label','&Options'); Meni(2)=uimenu(Meni(1),'Label','Funkcija&1'); Meni(3)=uimenu(Meni(1),'Label','Funkcija&2'); Meni(4)=uimenu(Meni(1),'Label','Funkcija&3'); Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije'); Meni(6)=uimenu(Meni(1),'Label','&Colormap'); U ovom primjeru podvueni su karakteri O, 1, 2, 3, I i C. Vanije osobine menija su: Enable koja ima vrijednost 'on' ako se opcija menija moe startovati, 'off' ako se opcija ne moe startovati, Position pozicija u meniju. Veoma esto se jedan meni dijeli u sekcije, skupine srodnih opcija, koje se dijele separatorima (linijama). Separator je naziv istoimene opcije uimenu-a koja moe biti ukljuena i iskljuena ('on' ili 'off'). Pored pojedinih trenutno aktivnih opcija postavlja se znak ekiranja . Ovo se podeava osobinom menija Checked koja moe imati vrijednosti 'on' i 'off'. Primjer 6.6.3 Opcije menija Funkcija 1, Funkcija 2, Funkcija 3 i Izbor funkcije ine grupu i neka je na poetku ekirana prva opcije i neka se me|usobno iskljuuju. Meni(1)=uimenu(PrvaGP,'Label','&Options'); Meni(2)=uimenu(Meni(1),'Label','Funkcija&1','Checked','on','Callback',... 'set(Meni(2:5),''Checked'',''off'');set(Meni(2),''Checked'',''on'');'); Meni(3)=uimenu(Meni(1),'Label','Funkcija&2','Checked','off','Callback',... 173
Grafiki objekti 'set(Meni(2:5),''Checked'',''off'');set(Meni(3),''Checked'',''on'');'); Meni(4)=uimenu(Meni(1),'Label','Funkcija&3','Checked','off','Callback',... 'set(Meni(2:5),''Checked'',''off'');set(Meni(4),''Checked'',''on'');'); Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije','Checked','off','Callback',... 'set(Meni(2:5),''Checked'',''off'');set(Meni(5),''Checked'',''on'');'); Meni(6)=uimenu(Meni(1),'Label','&Colormap','Separator','on'); Vidimo da i ovaj grafiki objekat ima Callback string kojim se moe pozvati niz operacija aktiviranjem datog objekta.
MATLAB for Windows promjenljiva u kojoj se smjeta broj iscrtavanja funkcija, NovaFunkcija predstavlja od korisnika definisanu funkciju clear all; M=20; N=20; Grafik=1; SQRT=0; Funkcija=1; PaLeTa='hsv'; Broj=0; NovaFunkcija='exp(-x.^2-y.^2)'; Zatim definiimo grafiki prozor (PrvaGP) i frame kontrolu koja e biti podloga ostalih kontrola (primjer 6.5.1) PrvaGP=figure('NumberTitle','off','Name','Program za 2-D prikaze',... 'Resize','off','Pointer','watch','Position',[6 6 628 412],'Color',[0 0 0.2]); Frame1=uicontrol(PrvaGP,'Style','frame','Position',[400 1 340 410],... 'BackgroundColor',[0.62 0.22 0.40]); Za definisanje broja odbiraka po x i y (M i N) koriste se dva para slider, edit i text kontola kao u primjeru 6.5.7 Tekst1=uicontrol(PrvaGP,'Style','text','Position',[405 390 25 15],... 'String','M=','Backgroundcolor',[0.8 0.8 0.8]); Edit1=uicontrol(PrvaGP,'Style','edit','Position',[427 390 30 15],... 'String','20','Callback',... ['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',... 'M=str2num(get(Edit1,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]); Slider1=uicontrol(PrvaGP,'Style','Slider','Position',[460 388 145 20],... 'min',20,'max',256,'Value',0,'Callback',... 'M=fix(get(Slider1,''value''));set(Edit1,''string'',num2str(fix(M)));'); Tekst2=uicontrol(PrvaGP,'Style','text','Position',[405 350 25 15],... 'String','N=','Backgroundcolor',[0.8 0.8 0.8]); Edit2=uicontrol(PrvaGP,'Style','edit','Position',[427 350 30 15],... 'String','20','Callback',... ['set(Slider1,''Value'',str2num(get(Edit1,''String'')));',... 'N=str2num(get(Edit2,''String''));'],'Backgroundcolor',[0.8 0.8 0.8]); Slider2=uicontrol(PrvaGP,'Style','Slider','Position',[460 348 145 20],... 175
Grafiki objekti 'min',20,'max',256,'Value',0,'Callback',... 'N=fix(get(Slider2,''value''));set(Edit2,''string'',num2str(fix(N)));'); U popupmenu-u bira se nain grafikog prikaza (primjer 6.5.5) Menielementi=str2mat('mesh','surf','waterfall','contour',... 'meshc','surfc','interp','flat'); Popup1=uicontrol(PrvaGP,'Style','popupmenu','String',Menielementi,... 'Position',[435 300 100 20],'Callback','Grafik=get(Popup1,''Value'');'); Dvije radio kontrole definiu vrijednost promjenljive SQRT Tekst3=uicontrol('Style','text','Position',[405 254 40 15],'String','SQRT',... 'BackgroundColor',[0.8 0.8 0.8]); Tekst4=uicontrol('Style','text','Position',[445 254 40 15],'String','Da',... 'BackgroundColor',[0.8 0.8 0.8]); Radio1=uicontrol(PrvaGP,'Style','Radio','Position',... [485 254 15 15],'Value',1,'Callback',... 'set(Radio1,''Value'',1);set(Radio2,''Value'',0);SQRT=1;',... 'Backgroundcolor',[0.8 0.8 0.8]); Tekst5=uicontrol('Style','text','Position',[505 254 40 15],'String','Ne',... 'BackgroundColor',[0.8 0.8 0.8]); Radio2=uicontrol(PrvaGP,'Style','Radio','Position',... [545 254 15 15],'Value',0,'Callback',... 'set(Radio2,''Value'',1);set(Radio1,''Value'',0);SQRT=0;',... 'Backgroundcolor',[0.8 0.8 0.8]); i ispod toga dvije check kontrole definiu crtanje 1-D grafika plot(sum(z)) i plot(sum(z')) Tekst6=uicontrol('Style','Text','String','plot(sum(z))','Position',[405 204 70 15],... 'BackgroundColor',[0.8 0.8 0.8]); Check1=uicontrol('Style','Check','Position',[475 204 15 15],... 'BackgroundColor',[0.8 0.8 0.8]); Tekst7=uicontrol('Style','Text','String','plot(sum(z''))','Position',[495 204 75 15],... 'BackgroundColor',[0.8 0.8 0.8]); Check2=uicontrol('Style','Check','Position',[570 204 15 15],... 'BackgroundColor',[0.8 0.8 0.8]); 176
MATLAB for Windows Na dnu frame kontrole nalaze se tri pushbuttona. Start poziva program CRTANJE.M, PushStart=uicontrol(PrvaGP,'Style','pushbutton','Position',[410 20 60 30],... 'String','Start','Background',[0.8 0.8 0.8],'Callback','crtanje'); Print smjeta sadraj grafikog prozora u Clipboard PushPrint=uicontrol(PrvaGP,'Style','pushbutton','Position',[480 20 60 30],... 'String','Print','Background',[0.8 0.8 0.8],'Callback','print -dmeta'); dok Close zatvara grafiki prozor i u MATLAB-ovom komandnom prozoru prikazuje broj izvrenih grafikih prikaza PushClose=uicontrol(PrvaGP,'Style','pushbutton','Position',[550 20 60 30],... 'String','Close','Background',[0.8 0.8 0.8],'Callback',... 'close(gcf);disp([''Bilo je '',num2str(Broj),'' izracunavanja''])'); Standardni MATLAB meni je naredbom Meni(1)=uimenu(PrvaGP,'Label','&Options'); proiren sa menijem Options, dok se naredbama Meni(2)=uimenu(Meni(1),'Label','Funkcija&1','Checked','on','Callback',... 'Funkcija=1;set(Meni(2:5),''Checked'',''off'');set(Meni(2),''Checked'',''on'');'); Meni(3)=uimenu(Meni(1),'Label','Funkcija&2','Checked','off','Callback',... 'Funkcija=2;set(Meni(2:5),''Checked'',''off'');set(Meni(3),''Checked'',''on'');'); Meni(4)=uimenu(Meni(1),'Label','Funkcija&3','Checked','off','Callback',... 'Funkcija=3;set(Meni(2:5),''Checked'',''off'');set(Meni(4),''Checked'',''on'');'); Meni(5)=uimenu(Meni(1),'Label','&Izbor funkcije','Checked','off','Callback',... 'pomocni;'); ovaj meni proiruje opcijama Funkcija 1, Funkcija 2, Funkcija 3 i Izbor Funkcije. Klik na prve tri funkcije definie crtanje predefinisanih funkcija, dok klik na etvrtu otvara prozor u kome korisnik moe unijeti proizvoljnu funkciju koja se eli nacrtati. Prilikom izbor etvrte opcije poziva se program POMOCNI.M. Opcija Colormap otvara dodatni meni u kome se moe izabrati kolorna mapa za crtanje podataka Meni(6)=uimenu(Meni(1),'Label','&Colormap','Separator','on'); Meni(7)=uimenu(Meni(6),'Label','&hsv','Checked','off','Callback',... ['PaLeTa=''hsv'';set(Meni(7:11),''Checked'',''off'');',... 'set(Meni(7),''Checked'',''on'');']); Meni(8)=uimenu(Meni(6),'Label','&gray','Checked','off','Callback',... 177
Grafiki objekti ['PaLeTa=''gray'';set(Meni(7:11),''Checked'',''off'');',... 'set(Meni(8),''Checked'',''on'');']); Meni(9)=uimenu(Meni(6),'Label','h&ot','Checked','on','Callback',... ['PaLeTa=''hot'';set(Meni(7:11),''Checked'',''off'');',... 'set(MENU(9),''Checked'',''on'');']); Meni(10)=uimenu(Meni(6),'Label','&cool','Checked','off','Callback',... ['PaLeTa=''cool'';set(Meni(7:11),''Checked'',''off'');',... 'set(Meni(10),''Checked'',''on'');']); Meni(11)=uimenu(Meni(6),'Label','&jet','Checked','off','Callback',... ['PaLeTa=''jet'';set(Meni(7:11),''Checked'',''off'');',... 'set(Meni(11),''Checked'',''on'');']); Na kraju programa pokaziva mia se postavlja na strelicu, ime se omoguuje rad sa objektima unutar grafikog prozora. set(PrvaGP,'Pointer','arrow'); Na slici 6.2 je prikazan osnovni grafiki prozor sa kontrolama.
MATLAB for Windows U zavisnosti da li je funkcija jedna od tri predefinisane, ili se uzima od korisnika definisana, i uzimajui u obzir promjenljivu SQRT rauna se funkcija z=f(x,y) if(SQRT==0&Funkcija=4) z=funk(x,y,Funkcija); elseif(SQRT==1&Funkcija=4) z=sqrt(funk(x,y,Funkcija)); elseif(SQRT==0&Funkcija==4) eval(['z=',NovaFunkcija,';']); else eval(['z=',NovaFunkcija,';']); z=sqrt(z); end Ako je prethodno ve bilo crtanja promjenljiva Broj je vei od nule pa treba izbrisati tekue ose i tekue grafike (iji se numeriki identifikatori uvaju u promjenljivim Graf i Ose) if(Broj>0) delete(Graf); set(Ose,'Visible','off'); end Zatim se postavlja odgovarajua kolorna mapa i veliina osa colormap(PaLeTa); Ose=axes('Position',[0.25 0.12 0.35 0.5]); U zavisnosti od izbora tipa grafikog prikaza u popupmeniju crta se odgovarajui 2-D grafik uz istovremeno smjetanje novokreiranih grafikih objekata u promjenljivu Graf if(Grafik==1) Graf=mesh(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); elseif(Grafik==2) Graf=surf(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); elseif(Grafik==3) Graf=waterfall(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); elseif(Grafik==4) [priv,Graf]=contour(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); elseif(Grafik==5) 179
Grafiki objekti Graf=meshc(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); elseif(Grafik==6) Graf=surfc(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); else Graf=pcolor(-2*pi:4*pi/M:2*pi,-2*pi:4*pi/N:2*pi,z); if(Grafik==7) shading interp; elseif(Grafik==8) shading flat; end end Za razliite tipove grafika na razne naine se definiu granice axis i pogled na grafik view if(Grafik==1|Grafik==2|Grafik==3) view([10 80]) axis([-2*pi 2*pi -2*pi 2*pi min(min(z)) max(max(z))]) elseif(Grafik==5|Grafik==6) view([10 50]) axis([-2*pi 2*pi -2*pi 2*pi min(min(z)) max(max(z))]) else axis([-2*pi 2*pi -2*pi 2*pi]) end U zavisnosti od sadraja check kontrola vri se crtanje 1-D grafika uz dopunjavanje vektora u kojem se uvaju ose (Ose) i vektora sa grafikom (Graf) if(get(Check1,'Value')==1) Ose=[Ose;axes('Position',[0.25 0.76 0.35 0.2])]; Graf=[Graf;plot(-2*pi:4*pi/M:2*pi,sum(z))]; axis([-2*pi 2*pi min(sum(z)) max(sum(z))]) end if(get(Check2,'Value')==1) Ose=[Ose;axes('Position',[0.05 0.12 0.15 0.5])]; Graf=[Graf;plot(sum(z'),-2*pi:4*pi/N:2*pi)]; axis([min(sum(z')) max(sum(z')) -2*pi 2*pi]) end Na kraju ovog programa inkrementira se broj izraunavanja 180
MATLAB for Windows Broj=Broj+1; Na slici 6.3 dat je grafik na kojem je data prva predefinisana funkcija. Svi parametri grafika se mogu sa njega proitati.
Grafiki objekti Cancel zatvara ovaj grafiki prozor bez promjene ostalih parametara Cancel=uicontrol(DrugiGP,'Style','Pushbutton','Position',... [245 10 70 20],'String','Cancel','Enable','off','Callback','close(gcf);'); Definicija text i edit kontrole je Tekst8=uicontrol(DrugiGP,'Style','Text','Position',[20 38 40 15],'String',... 'f(x,y)=','BackgroundColor',[0 0 0.8],'ForegroundColor',[1 1 1]); Edit3=uicontrol(DrugiGP,'Style','Edit','Position',[58 38 400 15],... 'String',NovaFunkcija,'BackgroundColor',[0 0 0.8],'ForegroundColor',[1 1 1]); Tokom crtanja pomonog grafikog prozora onemoguena je upotreba mia to se ostvaruje naredbama set([OK1 Cancel],'Enable','on'); set(gcf,'Pointer','arrow'); Na slici 6.4 prikazan je pomoni grafiki prozor.
183
glava sedma
Polinomi i obrada signala n=[1 3 -1 2]; c=poly(n) c= 1 -5 5 5 -6 Moe se pokazati da ove naredbe usljed primjenjenih algoritama pokazuju odre|ena odstupanja. Tako, naredbom roots(poly(x)) trebao bi da se dobije polazni vektor; usljed akumulisanja greke pri raunanju, rezultati se ponekad ne podudaraju. Primjer 7.1.3 Polinom je zadat sa dvadeset nula od jedan do dvadeset. Nai koeficijente ovog polinoma i korijene. roots(poly(1:20)) ans = 20.0005 18.9954 18.0191 16.9470 16.0877 14.8824 14.1120 12.9259 12.0424 10.9836 10.0051 8.9989 8.0002 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 1.0000
, ) a (1,2) a (11 a (2,1) a (2,2) a= M M a (n,1) a (n,2) onda je njen karakteristini polinom: , ) a (11 p( ) = a (2,1) M a (1,2)
L L O L
a (1, n) a ( 2, n) M a ( n, n)
a (1, n) a ( 2, n) M
a (2,2) L M O
a=[1 2 -1;2 4 7;-3 1 2]; poly(a) ans = 1.0000 -7.0000 0.0000 63.0000 lambda=roots(ans) lambda = 4.7831 + 1.2927i 4.7831 - 1.2927i -2.5663
y2=-2x4+3x2+5x+4
5 -7 -12
y=y1*y2=-2x7-4x6+9x5+11x4+5x3-7x2-12x
n=[1 3 -1 2 3]; c=poly(n) c= 1 -8 20 -10 -21 18 x=-1:.1:4; y=polyval(c,x); plot(x,y) Ako elimo izraunati polinom iji su elementi x matrice, onda se to postie naredbom polyvalm(c,x).
Primjer 7.1.7 Izraunati vrijednost polinoma y=2x2-x+1, ako je x matrica:
1 3 x= 2 7
188
Ukoliko je stepen brojioca vei ili jednak od stepena imenioca, onda je prethodni izraz mogue transformisati u:
y=
y1( x ) r ( x) = + q( x) y 2( x ) y 2( x )
gdje je q(x) kolinik polinoma y1 i y2, a r(x) ostatak. Koeficijenti polinoma q(x) i p(x) se dobijaju naredbom [r,q]=deconv(y1,y2).
Primjer 7.1.8 Podijeliti polinome iji su koeficijenti zadati vekorima c1 i c2.
c1=[1 2 -3 0]; c2=[-2 0 3 5 4]; [q,r]=deconv(c2,c1) q= -2 4 r= 0 0 -11 17 4 [to znai da je: 2 x 4 + 3x 2 + 5x + 4 11x 2 + 17 x + 4 = 2x + 4 x 3 + 2 x 2 3x x 3 + 2 x 2 3x
Naredbom residue odre|ujemo polove, koeficijente razvoja i slobodni lan pri razvoju kolinika dva polinoma c1 i c2 u racionalne razlomke. c1( x ) r (1) r ( 2) r ( n) = + + ...+ + k ( x) c2( x ) x p(1) x p(2) x p( n) Primjer 7.1.9 Razviti u racionalne razlomke izraz: 1 5 4 3 x 9 x + 25x 15x 2 26 x + 24 c1=1; c2=[1 -9 25 -15 -26 24]; [r,p,k]=residue(c1,c2) r= 0.0333 -0.1250 0.1667 -0.0833 0.0083 p= 4.0000 3.0000 2.0000 1.0000 -1.0000 k= [] Primjer 7.1.10 Ponoviti prethodni primjer ako je u brojiocu x7.
c1=[1 0 0 0 0 0 0 0]; c2=[1 -9 25 -15 -26 24]; [r,p,k]=residue(c1,c2) r= 546.1333 -273.3750 21.3333 -0.0833 -0.0083 p= 4.0000 190
3.0000 2.0000 1.0000 -1.0000 k= 1 9 56 Moe se ostvariti i inverzna operacija. Na osnovu razvoja, definisanog sa r, p, k, oblik kolinika dva polinoma dobija se sa [c1,c2]=residue(r,p,k)
x=[.1 .3 .4 .44 .5 .7 .8]; y=[1 1.5 1.6 1.4 1.1 1.1 1.5]; c=polyfit(x,y,4) c= 13.2447 1.3735 -20.3555 10.3114 0.1641 xf=.1:.01:.8; yf=polyval(c,xf); plot(xf,yf,x,y,'o') Proceduru fitovanja i crtanja krivih i podataka moemo napraviti koristei funkcijski fajl. Napraviemo fajl interpol.m. function interpol(x,y,n,znak,ni) % interpol(x,y,n,znak,ni) interpolira podatke x i y polinomima % n-tog reda i crta ih.Vrijednosti x i y crta simbolom definisanim % u znak. Polinom se izracunava u ni tacaka i crta punom linijom % interpol(x,y,n,znak) uzima automatski ni=100 % interpol(x,y,n) uzima automatski znak='*' i ni=100 % c=polyfit(x,y,n) if nargin<5 ni=100;
191
Polinomi i obrada signala end xp=min(x):(max(x)-min(x))/ni:max(x); yp=polyval(c,xp); if nargin==3 znak='*'; end plot(x,y,znak,xp,yp) end Primjer 7.1.12 Interpolirati podatke x i y polinomom 5-tog reda. x=[0 0.11 0.24 0.29 0.35 0.58 0.79 0.95]; y=[0.1 0.46 0.95 1.67 2.38 2.22 1.54 1.03]; interpol(x,y,5)
2.5 2
1.5
0.5
0.2
0.4
0.6
0.8
Funkcije za obradu signala fft ifft fftshift fft2 ifft2 conv conv2 deconv cov filter freqz freqs xcorr xcorr2
brza Fourierova transformacija inverzna brza FT preure|ivanje rezultata FFT dvodimenziona FFT inverzna dvodimenziona FFT konvolucija signala dvodimenziona konvolucija signala dekonvolucija kovarijansa direktna realizacija diskretnog sistema frekventni odziv diskretnog sistema frekventni odziv analognog sistema kroskorelaciona funkcija dvodimenziona kroskorelaciona funkcija
Fe
k
jkx / l
f ( x )e
0
2l
jkx / l
dx
Aproksimacija ove vrijednosti moe se ostvariti zamjenom integrala sa sumom, korienjem pravougaonog pravila.
Fk
f (nx)e
n =1
jkx / l
193
gdje je x korak odabiranja koji bi, po teoremi o odabiranju, trebao biti x1/fm, gdje je fm maksimalna frekvencija u signalu f(x). Poto je broj odbiraka signala, unutar periode 2l, jednak N, to je l/x=N/2. Uzimajui da je f(n)=f(nx) x/2l, dobijamo:
Fk f$(n)e jkx / l
n =1 N
to je, po definiciji, diskretna Fourierova transformacija. Prema tome, koeficijenti Fourierovog reda mogu se aproksimirati vrijednostima diskretne Fourierove transformacije signala f(n)=f(nx)x/2l. Rednom broju odbirka k odgovara uestanost:
k = k / l = 2 k / ( Nx )
i to samo za kN/2. Za k vee od N/2 dobijaju se preslikane negativne uestanosti. Na slian nain se mogu dobiti i odbirci Fourierove transformacije neperiodinog signala koja ima oblik:
F ( j ) =
f ( x )e
jx
dx
Uzimajui da je signal bitno razliit od nule samo u intervalu od 0 do 2l i zamjenjujui integral sumom, dobijamo:
F ( j ) =
f (nx)e
n =1
jnx
n =1
f (nx )e jknx x =
f ( n) e ~
N n =1
jkn 2 / N
gdje je f(n)=f(nx)x, a znamo da je x=2/N. Ponovo smo dobili da se odbirci Fourierove transformacije mogu aproksimirati diskretnom Fourierovom transformacijom. Rednom broju odgovara uestanost:
k = 2 k / ( Nx )
7.2.1.2 Raunanje
Diskretna Fourierova transformacija signala oznaenog sa f (ije vrijednosti su elementi vektora f) za razne vrijednosti k rauna se po standardnom 194
algoritmu razbijanja po frekvenciji naredbom fft(f). Ovaj algoritam se primjenjuje za broj odbiraka koji je stepen broja 2, N=2m (N=4, 8, 16, 32, 64, 128, 256,...). U sluaju da je broj odbiraka razliit od ovog broja primjenjuje se sporiji algoritam direktnog izraunavanja. Postoji i drugi oblik naredbe za izraunavanje Fourierove transformacije fft(f,M) gdje se, ako je M>length(f), vri dopunjavanje signala nulama (zero padding), a za M<length(f) vri se odsijecanje signala do duine M. Za M=length(f) naredba fft(f,M) je ista kao naredba fft(f). Dopunjavanje nulama ne utie na oblik Fourierove transformacije, ve samo na gustinu odabiranja. Kod Fourierovog reda dolazi do promjene periode, pa time i rasporeda harmonika.
Slika 7.2. Periodini signal f(x) Prvo treba odrediti korak odabiranja (imajui u vidu teoremu o odabiranju). Broj odbiraka unutar periode je jednak broju koeficijenata Fourierovog reda koje raunamo. Da bi mogli koristiti fft algoritme taj broj mora biti oblika 2m. Uzmimo da je n=64. Odbirke funkcije emo raunati u takama xi=ix=i4/64. Interval jedne periode 0x4 emo podijeliti na dva dijela 0x<2 i 2x<4 i raunati odbirke u tim djelovima. l=2; n=64;
195
Polinomi i obrada signala dx=2*l/n; x1=0:dx:l-dx; f1=(-0.5*x1+1)*dx/(2*l); x2=l:dx:2*l-dx; f2=(0.5*x2-1)*dx/(2*l); f=[f1 f2]; F=fft(f); Time smo dobili Fourierovu transformaciju signala f(x). Prvih n/2 harmonika su zaista harmonici funkcije f(x), a preostali dio od n/2+1 do n su preslikane negativne vrijednosti. Zbog toga je, radi crtanja spektra u obliku u kojem se najee predstavlja, potrebno preurediti rezultate, ali i prenumerisati redni broj harmonika. Fp=fftshift(F); k=-n/2:n/2-1; plot(k,abs(Fp)) stem(k,abs(Fp)) Tako smo konano dobili amplitudsku karakteristiku signala f(x) koja je prikazana na slici 7.3.
0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 -40 -30 -20 -10 0 10 20 30 40
Slika 7.3 Spektar (amplitudska karakteristika) periodinog signala f(x) Primjer 7.2.2 Odrediti odbirke Fourierove transformacije signala f(x)=sin2(x) za 0x<1 i f(x)=0 drugdje.
Da bismo odredili vrijednosti odbiraka Fourierive transformacije treba, prije svega, odrediti korak odabiranja. Ponovo se taan raun moe izvesti jedino na osnovu teoreme o odabiranju. Mi emo se ovdje posluiti procjenom i proizvoljno uzeti korak odabiranja, koji e biti dovoljno mali da se signal izme|u dva odbirka puno ne mijenja. U intervalu za 0x<1 uzimamo vrijednosti zadate funkcije,
196
pomnoene korakom odabiranja, a izvan tog intervala, jo proizvoljan broj vrijednosti f(x)=0. [to vie taaka uzmemo, gustina odbiraka Fourierove transformacje e biti vea. U ovom sluaju za primjenu fft algoritama nije nephodno uzet broj odbiraka 2m ve se moe koristiti i neto sporiji algiritam sa proraun FT. Uzmimo n=50 i odredimo odbirke Fourierove transformacije.
n=50; l=0.5; dx=2*l/n; x=0:dx:2*l-dx; f=(sin(pi*x)).^2*dx; F=fft(f); Fp=fftshift(F); k=-length(Fp)/2:length(Fp)/2-1; Umjesto rednog broja odbiraka bolje je imati na nezavisno promjenljivoj osi vrijednosti uestanosti ili frekvencije fr, koje su izraunate prema izrazima datim u 7.2.1.1. fr=k/(n*dx); plot(fr,abs(Fp))
0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 -3 -2 -1 0 1 2 3
F ( k )e
n =1
jkn 2 / N
197
i daje signal na osnovu transformacije. Razlikuje se od direktne jedino po znaku u eksponentu i zbog dijeljenja sa N. Inverzna diskretna Fourierova transformacija transformacije F se dobija sa
ifft(F).
nacrtati
dvodimenzionu
transformaciju
signala
H ( s) =
dobija se sa h=freqs(a,b,w), gdje je w frekvencija, a h vrijednost frekventnog odziva. Ako se eli nacrtati amplitudski i frekventni dijagram poziva se ova funkcija bez izlaznog argumenta freqs(a,b,w). Ova funkcija se nalazi u okviru SIGNAL TOOLBOX-a. Primjer 7.2.4 Nacrtati amplitudsku i faznu karakteristiku sistema ija je funkcija prenosa data sa: s + 0.5 H ( s) = 2 s + s+1 za uestanosti od 0.1 do 100, u etrdeset taaka. a=[1 .5]; b=[1 1 1]; w=logspace(-1,2,40); h=freqs(a,b,w); semilogx(w,abs(h)) grid semilogx(w,angle(h)*180/pi) grid Bez raunanja odziva h crtei sa slike 7.6 (amplitudska i fazna karakteristika analognog sistema) su se mogli dobiti naredbom freqs(a,b,w)
1.2 1 0.8 0.6 0.4 0.2 0 -1 10 20 0 -20 -40 -60 -80 -100 -1 10
10
10
10
10
10
10
frekventni odziv se dobija sa y=freqz(a,b,w), gdje je w vrijednost uestanosti za koje se rauna frekventni odziv. Funkcija freqz bez izlaznog argumenta crta amplitudsku i faznu karakteristiku. Interesantan oblik ove funkcije je [h,w]=freqz(a,b,N,'whole') kojom se odre|uje vrijednost vektora h i w (odziva i frekvencije) u N taaka na itavom jedininom krugu.
Primjer 7.2.5 Nacrtati amplitudsku i faznu karakteristiku diskretnog sistema:
H ( z) =
a=[0.00001 0.016709 0.044636 0.00735]; b=[1 -2.40112 2.3594 -1.083 0.19343]; w=-pi:pi/30:pi; h=freqz(a,b,w); plot(w,abs(h)) grid
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -4 -3 -2 -1 0 1 2 3 4
H ( z) =
0.15
0.1 0.05
-0.05
10
20
30
40
50
60
Polinomi i obrada signala x=rand(1,50); r=xcorr(x); plot(r) Uoimo razliku da je u ovoj verziji rand sluajni signal sa uniformnom raspodjelom na intervalu (0,1) dok je randn normalni, bijeli, Gausov um sa varijansom 1. Spektralna gustina snage signala x definisana je kao Fourierova transformacija autokorelacione funkcije, i rauna se sa sx=fft(r).
18 16 14 12 10 8 6 4 2 0 0 20 40 60 80 100
Slika 7.9 Autokorelaciona funkcija Ovim oblicima kroskorelacione funkcije mogu se pridruiti oblici sa odre|enim opcijama koje se definiu stringom xcorr(x,'string'). Za signal x duine M, ako je string biased rauna se 1/M vrijednosti autokorelacione funkcije, za unbiased 1/(M-|k|), gdje je k indeks odgovarajue pozicije, dok coeff daje normalizovanu vrijednost tako da je maksimalna vrijednost 1. Primjer 7.2.8 Nai unbiased autokorelaciju signala iz prethodnog primjera. ru=xcorr(x,'unbiased'); plot(ru)
0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 20 40 60 80 100
Jedan broj funkcija za obradu signala definisan je i za dvodimenzione signale. Te funkcije su date u tabeli 7.1, a korienje im je slino kao i za jednodimenzione sluajeve. Na kraju, jo jedanput emo istai da je veliki broj algoritama, metoda projektovanja diskretnih sistema, funkcija prozora i funkcija za obradu sluajnih signala, sadran u SIGNAL TOOLBOX-u.
203
glava osma
Linearna algebra i matrine funkcije (b) [to znai kada je matrica A "skoro singularna"? (c) Ukoliko bIm(A), kako moemo odrediti x tako da je Ax "blizu" y? Da bi kvantifikovali odgovore na ovakva pitanja potreban je jezik kojim emo precizirati pojmove kao to su: "male promjene", "blizu singularnosti", "rastojanje u vektorskom prostoru", itd. To nam omoguava pojam norme vektora i matrica. MATLAB raspolae skupom monih i numeriki pouzdanih operatora za tretiranje problema iz linearne algebre: karakterizaciju linearnih operatora i vektorskih prostora i podprostora, odre|ivanje sopstvenih vrijednosti i vektora, odre|ivanje singularnih vrijednosti, itd. Ovdje neemo ulaziti u detalje iz teorije, ve emo navesti najvanije operatore i pojedine definicije pojmova. Iscrpni tretman teorijskih i numerikih problema iz ove oblasti moe se nai u literaturi. 8.1 SOPSTVENE VRIJEDNOSTI I SOPSTVENI VEKTORI Sopstvene vrijednosti matrice ARnxn su definisane kao n korijena njenog karakteristinog polinoma p(z)=|zI-A|. Skup ovih korijena z1,z2,..,zn nazivamo spektrom matrice A. Za zi iz spektra A, pridrueni vektor vi koji zadovoljava relaciju Avi=zivi, i=1,2,..,n, naziva se sopstveni vektor matrice A. Ako od vektora vi, i=1, ... , n, formiramo matricu V=[v1 v2 ... vn], tada oigledno vai AV=VD, gdje je D=diagz1,z2,...,zn dijagonalna matrica formirana od sopstvenih vrijednosti koja se naziva i Jordanova forma matrice A. Ukoliko u spektru A postoji konjugovano kompleksni par sopstvenih vrijednosti zk,k+1=k+ ik, tada i pridrueni par sopstvenih vektora ima oblik vk,k+1=q+is. Ukoliko hoemo da radimo samo sa realnim vrijednostima, kompleksnu Jordanovu formu i odgovarajuu matricu sopstvenih vektora moemo zamijeniti sa tzv. Jordanovim blokovima na k-tom i k+1-om mjestu u matrici D, i realnim vektorima q i s u matrici V. Tako se iz kompleksne dobija realna Jordanova forma. Za viestruke sopstvene vrijednosti potrebno je izvriti odre|ene modifikacije, koje se mogu nai u literaturi. Operator eig nalazi sopstvene vrijednosti i sopstvene vektore. Tako izraz s=eig(A) daje vektor kolonu s koji sadri sopstvene vrijednosti matrice A. Ukoliko imamo dva izlazna argumenta, tj. [V,D]=eig(A), dobiemo dijagonalnu matricu D, sa sopstvenim vrijednostima na glavnoj dijagonali, i matricu V ije kolone su sopstveni vektori od A, tako da vai A*V=V*D. Poto sopstveni vektori nijesu jednoznani, ovaj operator ih daje u normalizovanoj formi tako da nijedan element nije vei od 1. Napomenimo da matrica V definie transformaciju slinosti koja matricu A prevodi u dijagonalnu, tj. Jordanovu, formu. 206
MATLAB for Windows Za simetrine matrice, sopstvene vrijednosti su uvijek realne, dok za nesimetrine esto postoje kompleksni parovi sopstvenih vrijednosti. U tom sluaju, ukoliko elimo da radimo sa realnim vrijednostima, kompleksnu Jordanovu formu moemo prevesti u realnu upotrebom operatora cdf2rdf (skraenica od: complex diagonal form to real diagonal form). Primjer 8.1.1 Ilustrovaemo operator eig na simetrinoj matrici A= 3.6000 2.5000 -1.1000 1.3000 2.5000 1.2000 2.1000 3.1000 -1.1000 2.1000 0.9000 2.5000 1.3000 3.1000 2.5000 2.7000
i nesimetrinoj matrici B= -1 -4 0 1 -1 0 4 2 -3 s=eig(A) daje sopstvene vrijednosti: s= -2.1873 -1.0553 3.8634 7.7792 dok [X,L]=eig(A) daje sopstvene vrijednosti u L i sopstvene vektore u X X= 0.4063 0.0828 -0.7948 0.4431 -0.6939 0.4489 0.0059 0.5630 0.5938 0.5029 0.5372 0.3253 0.0283 -0.7340 0.2821 0.6171 L= -2.1873 0 0 0 0 -1.0553 0 0 0 0 3.8634 0 0 0 0 7.7792 207
Linearna algebra i matrine funkcije Ako elimo samo sopstvene vrijednosti moemo ih, npr. za matricu B, dobiti i sa r=roots(poly(B)) kao to je istaknuto u glavi 7. Sopstvene vrijednosti i vektore matrice B dobijamo sa [X,D]=eig(B) X= 0 0 + 0.5443i 0 - 0.5443i 0 0.2722 0.2722 1.0000 0.6804 + 0.4082i 0.6804 - 0.4082i D= -3.0000 0 0 0 -1.0000 + 2.0000i 0 0 0 -1.0000 - 2.0000i pri emu vidimo da su, zbog prisustva kompleksnih spostvenih vrijednosti, matrice X i D kompleksne. Preveemo ih u realnu Jordanovu formu sa [Xr,J]=cdf2rdf(X,D) Xr = 0 0 0.5443 0 0.2722 0 1.0000 0.6804 0.4082 J= -3 0 0 0 -1 2 0 -2 -1 Operator eig moe posluiti i za raunanje generalisanih sopstvenih vrijednosti i vektora. Ako su A i B kvadratne matrice dimenzije (nxn), tada se generalisane sopstvene vrijednosti definiu kao netrivijalna rjeenja jednaine g(z)=|A-zB|=0. Pridrueni vektor x, koji odgovara skalaru i zadovoljava relaciju Ax=Bx, naziva se generalisani sopstveni vektor. Napomenimo da broj generalisanih sopstvenih vrijednosti zavisi od ranga matrice B: ima ih n ukoliko je r(B)=n a za r(B)<n skup generalisanih sopstvenih vrijednosti moe biti konaan, beskonaan ili prazan (za detalje konsultovati literaturu). Naredba oblika s=eig(A,B) daje vektor s koji sadri generalisane sopstvene vrijednosti, dok oblik iste naredbe sa dva izlazna argumenta [V,D]=eig(A,B) daje matricu X sa generalisanim sopstvenim vektorima i dijagonalnu matricu D sa generalisanim sopstvenim vrijednostima na dijagonali. Za ovako na|ene vrijednosti vai relacija AV=BVD. 208
MATLAB for Windows Primjer 8.1.2 Za matrice A= 2 1 2 1 3 -1 1 1 2 B= 1 2 3 4 5 6 7 8 10 nai generalisane sopstvene vrijednosti i vektore. eig(A,B) daje ans = -0.9609 0.1806 13.4470 dok izraz [x,d]=eig(A,B) daje i generalisane sopstvene vektore: x= 0.8795 -0.6201 0.2663 -0.3470 0.5927 -0.8338 -0.3257 0.5140 0.4836 d= -0.9609 0 0 0 0.1806 0 0 0 13.4470 8.2 Q-Z DEKOMPOZICIJA Za kvadratne matrice A i B, Q-Z dekompozicija rauna gornje trougaone matrice Au i Bu, matricu generalisanih sopstvenih vektora V i matrice Q i Z koje zadovoljavaju relacije: QAZ=Au i QBZ=Bu. Ovakva dekompozicija se inae koristi kao me|ukorak pri raunanju generalisanih sopstvenih vrijednosti i vektora, i data je kao posebni operator radi mogunosti korienja me|u-rezultata. Primjer 8.2.1 Za matrice A i B iz prethodnog primjera nai Q-Z dekompoziciju. [Au,Bu,Q,Z,V]=qz(A,B) 209
Linearna algebra i matrine funkcije Au = 0.7872 2.7150 0.2632 0.0000 3.0310 -0.3820 0.0000 0.0000 2.9338 Bu = -0.8192 3.0125 0.9542 0 16.7847 3.4013 0 0 0.2182 Q= 0.9662 0.2088 -0.1510 0.0345 0.4761 0.8787 0.2554 -0.8542 0.4528 Z= 0.8795 0.4744 0.0373 -0.3470 0.6928 -0.6321 -0.3257 0.5430 0.7740 V= 0.8795 -0.6201 0.2663 -0.3470 0.5927 -0.8338 -0.3257 0.5140 0.4836 8.3 SINGULARNE VRIJEDNOSTI I PRIDRU@ENA DEKOMPOZICIJA MATRICA Singularne vrijednosti predstavljaju jedan od najvanijih pojmova u matrinoj numerici, a u zadnje vrijeme koriste se i kao analitiki aparat u mnogim primjenama. Za datu matricu ARmxn postoje ortogonalne kvadratne matrice U=[u1 u2 ... um] i V=[v1 v2 ... vn] i dijagonalna matrica S=diags1,s2,...,sp, p=minm,n, takve da vai relacija UAV=S. Skalari i, i=1, 2, ... , p, nazivaju se singularne vrijednosti matrice A, a vektori ui, i=1, ... ,m, i vj, j=1, ... ,n, nazivaju se lijevi i desni singularni vektori, respektivno. Pokazuje se da izme|u nenultih singularnih vrijednosti matrice A i sopstvenih vrijednosti i matrice ATA vai relacija i=i, i=1, 2, ..., p. Za raunanje singularnih vrijednosti koristi se operator svd. Izraz s=svd(X) daje vektor s koji sadri singularne vrijednosti, dok izraz sa viestrukim argumentima oblika [U,S,V]=svd(X) daje dijagonalnu matricu S iste dimenzije kao X, sa singularnim vrijednostima na glavnoj dijagonali, i ortogonalne matrice U i V. 210
MATLAB for Windows Primjer 8.3.1 A= 1 2 3 4 5 6 s=svd(A) s= 9.5255 0.5143 [U,S,V]=svd(A) U= 0.2298 0.8835 0.4082 0.5247 0.2408 -0.8165 0.8196 -0.4019 0.4082 S= 9.5255 0 0 0.5143 0 0 V= 0.6196 -0.7849 0.7849 0.6196 Izraz [U,S,V]=svd(A,0) daje redukovanu verziju matrica S i U. Naime, za ARmxn, m>n, raunaju se samo prvih n kolona matrice U a matrica S ima dimenziju nxn. Primjer 8.3.2 Izraunati redukovanu verziju matrica za dekompoziciju pomou singularnih vrijednosti matrice A iz prethodnog primjera. [U,S,V]=svd(A,0) U= 0.2298 0.8835 0.5247 0.2408 0.8196 -0.4019 S= 9.5255 0 0 0.5143 V= 0.6196 -0.7849 0.7849 0.6196 211
Linearna algebra i matrine funkcije Dekompozicija preko singularnih vrijednosti omoguava numeriki pouzdane, stabilne i tane faktorizacije pravougaonih matrica, to omoguava jednostavno raunanje mnogih vanih osobina matrice kao to su: rang, lijevi i desni inverz, sliku i kernel pridruenog linearnog operatora, norme matrice i sl. Zbog toga se i u MATLAB-u koristi kao osnovni algoritam pri izraunavanju. 8.4 NORME VEKTORA I MATRICA Norme vektora i matrica predstavljaju skalare koji daju informacije o njihovoj "veliini". Koriste se u mnogim teorijskim razmatranjima i u pravljenju stabilnih algoritama za raunanje. Detaljna analiza prezentirana je u literaturi. Postoji vie razliitih normi za vektore i matrice. Naveemo njihove definicije i odgovarajue operatore MATLAB-a u tabelama 8.1 i 8.2. ime p-norma 1-norma 2-norma (Euklidova) Vektorske norme definicija i oznaka MATLAB operator norm(x,p) norm(x,1)
1/ 2
n n p = || x||p = | xi |p i =1
1/ p
n1 = || x||1 =
|x |
i i =1
n n2 =|| x||2 = xi 2 i =1
-norma
--norma
x= 1.0000 -2.0000 3.0000 4.5000 -4.0000 2.0000 -3.0000 ilustrovati neke od postojeih normi. n1=norm(x,1) n1 = 19.5000 n2=norm(x,2) n2 = 7.9530 np=norm(x,3.4)
212
N1 = A 1 = N = A
max a
j i =1 n i j =1
ij
-norma
Frobeniusova norma
max a
ij
norm(x,inf) norm(x,'fro')
NF = A
m n = aij2 i =1 j =1
1/ 2
A= -1 2 3 4 2 -4 5 6 3 -4 5 -1 8 -6 4 -3 ilustrovati razliite matrine norme. N1=norm(A,1) N1 = 17 N2=norm(A,2) N2 = 14.0215 Ninf=norm(A,inf) Ninf = 21 Nf=norm(A,'fro') 213
Nf = 16.9411 Primjer 8.4.3 Za matricu A iz prethodnog primjera provjeriti relaciju 2 || A||2 = 1 + 2 +...+ 2p , koja povezuje Frobeniusovu normu i singularne F 2
vrijednosti matrice. Izraz
Nfk=Nf^2 daje kvadrat Frobeniusove norme: Nfk = 287 Singularne vrijednosti matrice A dobiemo sa s=svd(A) s= 14.0215 8.9551 2.6086 1.8440 a sumu njihovih kvadrata sa s2=sum(s.^2) s2 = 287.0000 ime smo provjerili navedenu relaciju.
Primjer 8.4.4 Na primjeru matrice
A= 2 -1 3 4 1 -5 i vektora x= 1 -2 4 provjeriti Schwartz-ovu nejednakost: ||A||2||A||2||x||2 n2=norm(A*x,2) n2 = 24.0832 nn2=norm(A,2)*norm(x,2) nn2 = 30.4403 214
A= 1 -1 -1 -1 -1 0 1 -1 -1 -1 0 0 1 -1 -1 0 0 0 1 -1 0 0 0 0 1 B= 0.1000 0 0 0 0 0 0.1000 0 0 0 0 0 0.1000 0 0 0 0 0 0.1000 0 0 0 0 0 0.1000 Izrazi ka=cond(A),da=det(A) daju determinantu i kondicioni broj matrice A ka = 29.4275 da = 1 to znai da matrica sa determinantom jednakom jedinici ne mora biti dobro kondicionirana. S druge strane, izrazi kb=cond(B),db=det(B) daju iste ove veliine za matricu B 215
kb = 1 db = 1.0000e-005 iz ega vidimo da perfektno kondicionirana matrica moe da ima malu vrijednost determinante.
Kao gruba procjena moe posluiti sljedee pravilo: pri zaokruivanju kod Gausove eliminacije raunar gubi tanost na onoliko decimalnih mjesta koliki je logaritam (za osnovu 10) kondicionog broja. U MATLAB-u postoji i operator rcond koji moe posluiti za procjenu podeenosti matrice za raunanje. Izraz rc=rcond(X) daje procjenu reciprone vrijednosti kondicionog broja. Znai, matrica je perfektno kondicionirana za rc=1, dok male vrijednosti rc slue kao indikator loe podeenosti matrice. 8.6 TROUGAONA (L-U) DEKOMPOZICIJA L-U dekompozicija kvadratne matrice ARnxn sastoji se u prikazivanju matrice A kao proizvoda A=LU, LRnxn, URnxn, pri emu L ima donju trougaonu formu a U gornju trougaonu formu. Ovakva dekompozicija koristi se pri rjeavanju sistema linearnih jednaina Gausovom eliminacijom i pri invertovanju nesingularne matrice. Operator lu, pomou izraza [L,U]=lu(A), daje matrice L i U. Navodimo ga najvie iz pedagokih razloga, jer predstavlja jedan od osnovnih naina faktorizacije matrica. Napominjemo da faktor L koji proistie iz MATLAB-ovog operatora lu nije u istoj, ve u permutovanoj donjoj trougaonoj formi. Primjer 8.6.1 L-U dekompoziciju ilustrovaemo na primjeru matrice
A= 1 4 7 2 5 8 3 6 11 Izraz [L,U]=lu(A) daje faktore L i U L= 0.3333 1.0000 0 0.6667 0.5000 1.0000 1.0000 0 0 216
MATLAB for Windows U= 3.0000 6.0000 11.0000 0 2.0000 3.3333 0 0 -1.0000 Lako se provjerava da je L*U=A. Postoji oblik funkcije lu sa tri izlazna argumenta [L,U,P]=lu(A) gdje je P permutaciona matrica takva da vai P*A=L*U.
8.7 HESSENBERGOVA FORMA I SCHUROVA DEKOMPOZICIJA Ove dvije dekompozicije koriste se pri izraunavanju sopstvenih vrijednosti i sopstvenih vektora. Operator hess nalazi Hessenbergovu formu kvadratne matrice. Hessenbergova matrica ima takav oblik da su joj svi elementi ispod prve subdijagonale jednaki nuli. Izraz H=hess(A) daje Hessenbergovu formu matrice A, dok izraz [P,H]=hess(A) pored H daje i unitarnu matricu P tako da vai dekompozicija: A=PHPH uz PHP=I, gdje PH oznaava konjugovanu transpoziciju kompleksne matrice P (u sluaju realne matrice ova operacija se svodi na obinu transpoziciju). Primjer 8.7.1 Nai Hessenbergovu formu matrice
A= 1 5 3 0 4 3 Izraz
7 6 1
[P,H]=hess(A) daje matrice P i H P= 1.0000 0 0 0 -0.6000 -0.8000 0 -0.8000 0.6000 H= 1.0000 -8.6000 0.2000 -5.0000 4.9600 -0.7200 0 2.2800 -3.9600 Lako se provjerava da izraz P'*P 217
ans = 1.0000 0 0 0 1.0000 0.0000 0 0.0000 1.0000 dok izraz P*H*P' daje poetnu matricu A ans = 1.0000 5.0000 7.0000 3.0000 0.0000 6.0000 4.0000 3.0000 1.0000 U zavisnosti od toga da li matrica A ima realne ili kompleksne elemente, postoje realna i kompleksna Schur-ova forma matrice. Kompleksna Schur-ova forma matrice je gornja trougaona matrica sa sopstvenim vrijednostima te matrice na glavnoj dijagonali. Realna Schur-ova forma razlikuje se od kompleksne u tome to se realne sopstvene vrijednosti nalaze na dijagonali, a konjugovano-kompleksne sopstvene vrijednosti su raspore|ene u (2x2)-dimenzione blokove oko glavne dijagonale.
Schur-ova forma nalazi se pomou operatora schur. Izraz S=schur(A) daje Schur-ovu formu matrice A, dok izraz [U,S]=schur(A) daje jo i unitarnu (ortogonalnu) matricu U, tako da vae relacije: A=USUH i UHU=I. Primjer 8.7.2 Za matricu sa realnim elementima
B= 1 -3 1 2 izraz
-2 3 4 -4 5 2 4 7 -5 0 -2 3
[U,S]=schur(B) daje matrice S i U U= 0.3780 0.8619 -0.3110 -0.1322 S= 0.7330 -0.0714 0.4989 0.4569 -0.5499 0.4388 0.2681 0.6581 -0.1319 0.2437 0.7633 -0.5836 218
MATLAB for Windows -7.4265 2.1186 2.9785 -0.8304 0.0000 4.6376 1.3408 2.2889 0 0 0.1813 1.3834 0 0 0 9.6076 Za provjeru, izraunaemo U'*U ans = 1.0000 0.0000 0.0000 0.0000 U*S*U' ans = 1.0000 -3.0000 1.0000 2.0000
C=ones(4);D=B+i*C; formiraemo kompleksnu matricu D= 1.0000 + 1.0000i -2.0000 + 1.0000i 3.0000 + 1.0000i 4.0000 + 1.0000i -3.0000 + 1.0000i -4.0000 + 1.0000i 5.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 + 1.0000i 4.0000 + 1.0000i 7.0000 + 1.0000i -5.0000 + 1.0000i 2.0000 + 1.0000i 0 + 1.0000i -2.0000 + 1.0000i 3.0000 + 1.0000i Izraz T=schur(D) daje kompleksnu Schur-ovu formu T= -7.3671 + 0.1794i 1.7507 + 1.2529i 3.4487 + 0.2405i 0.9777 - 0.3277i 0.0000 + 0.0000i 0.4062 + 0.2968i 0.2407 + 2.2795i -0.6171 - 0.2284i 0.0000 + 0.0000i 0.0000 - 0.0000i 4.5313 + 3.2720i -1.5800 - 2.7179i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 9.4296 + 0.2518i Za prevo|enje matrice iz realne u kompleksnu Schur-ovu formu slui operator rsf2csf.
8.8 CHOLESKY-jeva FAKTORIZACIJA
219
Linearna algebra i matrine funkcije Osnovno pravilo u numerikoj analizi je da se posebna struktura sistema jednaina (odnosno pridruene matrice) kao to je simetrija, definitnost i sl., koristi pri kreiranju algoritama za rjeavanje problema. Jedna od takvih metoda je i Cholesky-jeva dekompozicija matrice, koja je mogua samo za pozitivno definitne matrice. Podsjetimo se da se za kvadratnu matricu A kae da je pozitivno definitna ako je pridruena kvadratna forma q=xTAx (q je skalar) pozitivna za sve vrijednosti vektora x, osim za x=0, kada je q=0. Operator chol izvodi ovakvu faktorizaciju. Izraz R=chol(A) daje matricu R u gornjoj trougaonoj formi tako da vai RHR=A za matrice sa realnim elementima, odnosno RTR=A za matrice sa kompleksnim elementima. Ukoliko traimo Cholesky-jevu faktorizaciju za matricu koja nije pozitivno definitna, raunar e javiti greku. Inae, jedan od moguih testova za ispitivanje pozitivne definitnosti matrice je uslov da su sve njene sopstvene vrijednosti pozitivne. Primjer 8.8.1 Nai Cholesky-jevu faktorizaciju za matricu
A= 8 2 -5 2 11 -2 -5 -2 8 Najprije emo provjeriti da li je matrica pozitivno definitna sa eig(A) ans = 9.0000 3.0000 15.0000 R=chol(A) daje traenu matricu R= 2.8284 0.7071 -1.7678 0 3.2404 -0.2315 0 0 2.1958 Za provjeru, izraz R'*R daje polaznu matricu ans = 8.0000 2.0000 -5.0000 2.0000 11.0000 -2.0000 220
MATLAB for Windows -5.0000 -2.0000 8.0000 U sluaju da matrica X nije pozitivno definitna [R,p]=chol(X), vraa vrijednost p za koju je matrica X(1:p,1:p) pozitivno definitna.
8.9 ORTOGONALNA (Q-R) DEKOMPOZICIJA Q-R faktorizacija primjenjuje se na matrice i pravougaonog i kvadratnog oblika. Izraava datu matricu kao proizvod ortonormalne matrice (za realne) ili unitarne matrice (za kompleksne), i gornje trougaone matrice. Ovakva dekompozicija primjenjuje se za rjeavanje sistema linearnih jednaina. Izraz [Q,R]=qr(X) daje matrice Q i R sa opisanim osobinama, pri emu je dimenzija R ista kao matrice X, i vai X=QR. Oblik [Q,R,E]=qr(X) daje permutacionu matricu E, gornju-trougaonu matricu R sa opadajuim elementima na dijagonali i ortonormalnu matricu Q, tako da vai relacija XE=QR. Primjer 8.9.1 Za matricu
A= 1 2 3 4 5 6 7 8 9 10 11 12 nai emo Q-R dekompoziciju pomou izraza [Q,R]=qr(A) Q= -0.0776 -0.8331 0.5444 0.0605 -0.3105 -0.4512 -0.7709 0.3251 -0.5433 -0.0694 -0.0913 -0.8317 -0.7762 0.3124 0.3178 0.4461 R= -12.8841 -14.5916 -16.2992 0 -1.0413 -2.0826 0 0 0.0000 0 0 0 Lako se provjerava da je Q*R=A. Napomenimo da se iz oblika matrice R moe izvesti zakljuak o rangu matrice A. Naime, oigledno je da R ima rang 2, a pokazuje se, da je to istovremeno i rang matrice A.
Ukoliko elimo drugu verziju ovakve dekompozicije, upotrijebiemo 221
[Q,R,E]=qr(A) sa rezultatom Q= -0.1826 -0.3651 -0.5477 -0.7303 -0.8165 -0.4082 0.0000 0.4082 0.5477 -0.7274 -0.1883 0.3680 -0.0038 0.4133 -0.8152 0.4057
R= -16.4317 -12.7802 -14.6059 0 1.6330 0.8165 0 0 0.0000 0 0 0 E= 0 1 0 0 0 1 1 0 0 Za provjeru, formiraemo razliku A*E-Q*R sa rezultatom ans = 1.0e-014 * 0.0444 0.1665 0.3109 0.0888 0.0888 0.1776 0.1776 0.0888 0.1776 0.1776 0.1776 0.1776 to znai da je AE=QR, sa tanou do etrnaeste decimale.
8.10 RANG. BAZIS ZA SLIKU I KERNEL LINEARNOG OPERATORA Rang matrice moe se definisati na vie naina, pa se i za njegovo izraunavanje koriste razliiti algoritmi. U MATLAB-u postoji nekoliko operatora koji se direktno ili indirektno slue algoritmima za nalaenje ranga. Pri tome se koriste razliite vrijednosti tolerancije, pa se moe dogoditi da za istu matricu dobijemo razliite rezultate. Rang moemo dobiti koristei operatore rref, \, orth, null, qr, ali se najpouzdaniji rezultat dobija upotrebom operatora rank koji koristi dekompoziciju preko singularnih vrijednosti. Ovaj operator koristi se i za pinv koji nalazi pseudo-inverznu matricu. Operator rank moemo koristiti u dvije verzije:
222
r=rank(X) r= 2 Ako uzmemo tol = 1.0000e-014 izraz r=rank(X,tol) znai da zanemarujemo sve singularne vrijednosti manje od tol, i daje r= 2
Za izraunavanje bazisa slike linearnog operatora pridruenog matrici A koristi se operator orth. Izraz Q=orth(A) daje ortonormalni bazis za sliku matrice A, koji ine kolone matrice Q. Broj kolona matrice Q predstavlja rang matrice A, i moe se pokazati da vai QTQ=I, gdje je I jedinina matrica iste dimenzije kao A. Dok orth slui za nalaenje bazisa za Im(A), operator null koristi se za nalaenje bazisa drugog vanog podprostora pridruenog matrici A, takozvanog nul-prostora ili Ker(A). Izraz N=null(A) daje matricu N ije kolone predstavljaju ortonormalni bazis za Ker(A), tj. vae relacije: NTN=I i AN=0, a broj kolona matrice N odre|uje dimenziju Ker(A). Primjer 8.10.2 Na matrici
A= 1 1
3 4
5 6 223
-1 5 3 -1 4 2 1 3 5 ilustrovaemo primjenu operatora orth i null. Tako Q=orth(A) daje matricu Q= 0.4508 -0.3187 0.5602 -0.2814 0.4246 0.6174 0.3152 0.5801 0.4508 -0.3187 sa dvije kolone. Znai, rang A je 2 a vektori koji razapinju Im(A) su odre|eni kolonama matrice Q. Izraz N=null(A) daje matricu N= 0.8165 0.4082 -0.4082 koja definie Ker(A), koji u ovom sluaju ima dimenziju 1.
8.11 MOORE-PENROSE PSEUDOINVERZIJA MATRICE Za datu matricu ARmxn postoji jedinstvena matrica A+ koja zadovoljava slijedea etiri uslova: (a) AA+A=A (b) A+AA+=A (c) (AA+)T=AA+ (d)(A+A)T=A+A i naziva se Moore-Penrose inverz matrice A. Lako se pokazuje da za m>n matrica A+=(ATA)-1AT zadovoljava gornje uslove, kao i matrica A+=AT(AAT)-1 za sluaj da je m<n. U literaturi se za ovakvu matricu koristi i termin pseudoinverzna matrica a koristi se kod rjeavanja sistema linearnih jednaina u smislu najmanjih kvadrata. U MATLAB-u se za izraunavanje pseudoinverzne matrice koristi izraz oblika X=pinv(A), a samo raunanje se vri pomou singularnih vrijednosti. Tolerancija koja slui za zanemarivanje singularnih vrijednosti uzima se po automatizmu kao tol=max(size(A))*norm(A)*eps, a moemo je promijeniti zadavanjem proizvoljno malog broja tol1 i korienjem izraza oblika pinv(A,tol1). Primjer 8.11.1 Za matricu 224
dok za matricu
B= 1 2 -3 1 0 sa
0 1 3 3 1
Bp=pinv(B) dobijamo Bp = 0.0704 0.1549 -0.1690 0.1127 0.0141 0.0141 0.0810 0.1162 0.1725 0.0528 Lako se provjerava da izrazi inv(B'*B)*B' A'*inv(A*A') daju iste rezultate za pseudoinverzije matrica A i B.
8.12 RJE[AVANJE SISTEMA LINEARNIH JEDNA^INA U nekolika naredna odjeljaka ilustrovaemo mogunosti primjene MATLAB-a za rjeavanje sistema linearnih jednaina opisanog na poetku ovog poglavlja, kojega smo u matrinoj notaciji predstavili sa Ax=y. 8.12.1 HOMOGENI SISTEM JEDNA^INA Za y=0 dobijamo homogeni sistem jednaina Ax=0. Poznato je da se trivijalno rjeenje ovog sistema dobija za x=0. Ako je ARmxn netrivijalno
225
Linearna algebra i matrine funkcije rjeenje je mogue nai samo ako je r(A)<n, a takvih rjeenja ima beskonano mnogo. Sva rjeenja su definisana sa Ker(A), tako da se za ovakav sistem jednaina moe koristiti operator null koji definie bazis za Ker(A). Primjer 8.12.1 Nai sva netrivijalna rjeenja za sistem Ax=0, gdje je A= 1 3 5 1 4 6 -1 5 3 -1 4 2 1 3 5 Najprije emo nai bazis za Ker(A) sa
n=null(A) n= 0.8165 0.4082 -0.4082 Vidimo da Ker(A) ima dimenziju 1, to znai da je x=an, gdje je a proizvoljni realni skalar, rjeenje datog sistema jednaina. Napomenimo da za rjeenje ovog problema moemo koristiti i operator rref, koji daje takozvanu redukovanu ealonsku formu matrice. U tom smislu, prvo formiramo proirenu matricu W=[A y] a zatim na|emo rref(W), odakle lako nalazimo rjeenje. Poto je u ovom sluaju y=0, W je dato sa
W=[A,zeros(5,1)] W= 1 3 5 0 1 4 6 0 -1 5 3 0 -1 4 2 0 1 3 5 0
Sa R=rref(W) dobijamo
R= 1 0 0 0 0 0 1 0 0 0 2 1 0 0 0 0 0 0 0 0
226
A= 1 1 1 1 1 1 -4 0 0 0 0 0 1 1 -1 y= 1 0 0 Najprije provjerimo rang A sa rank(A) i poto dobijemo da je r(A)=3, nalazimo rjeenje minimalne norme sa xm=pinv(A)*y xm = 0.2844 0.0711 0.1611 0.1611 0.3223 Napomenimo da se drugo rjeenje moe dobiti pomou operatora \ za "dijeljenje" slijeva, kao x1=A\y x1 = 0 0.0000 227
0.5000 0 0.5000 Ako provjerimo norme rjeenja xm i x1 sa norm(xm),norm(x1) dobijemo normu xm ans = 0.4916 i normu x1 ans = 0.7071 to potvr|uje da je norma xm manja. 8.12.3 SISTEMI SA VE]IM BROJEM JEDNA^INA OD BROJA NEPOZNATIH
Za odnos n>m, tano rjeenje mogue je nai samo u rijetkim sluajevima kada je yIm(A). Jedan od naina da se na|e priblino rjeenje xp je minimizacija xp=minx||Ax-y||, za pogodno izabranu normu || ||p. U zavisnosti od izbora norme, dobijaju se i razliite vrijednosti xp. Pokazano je da se problem minimizacije najpogodnije formulie za 2-normu jer je f(x)=||Ax-y||2 kontinualno diferencijabilna funkcija od x, a njenom minimizacijom dobija se rjeenje xp optimalno u smislu najmanjih kvadrata. Za nalaenje rjeenja u smislu najmanjih kvadrata mogu posluiti operatori pinv i \. Primjer 8.12.3 Nai rjeenje sistema jednaina Ax=y, za
A= 1 0 2 1 -3 3 1 3 0 1 y= 1 -3 4 2 8 Najprije emo ispitati rang matrica A i W=[A y] sa r1=rank(A),r2=rank([A y]) sa rezultatima r1=2 i r2=3, to znai da yIm(A) pa emo rjeenje traiti u smislu najmanjih kvadrata, sa 228
MATLAB for Windows x1=pinv(A)*y x1 = -0.7324 1.0035 Isti rezultat u ovom sluaju dobija se i pomou operatora \: x2=A\y x2 = -0.7324 1.0035
dok
Ak k!
se
matrina
eksponencijalna
funkcija,
e A = I + 1A! +
A2 2!
+ ... =
k =0
matrina exponencijalna funkcija definisana analogno skalarnoj, a takav pristup moe se uzeti pri definisanju proizvoljne funkcije. Ako je f(z) skalarna funkcija, definisana na spektru matrice A, tada se matrina funkcija f(A) dobija jednostavnom "zamjenom" skalara z matricom A u izrazu f(z). Na primjer, ako (1 + z ) matrinu funkciju emo definisati sa f(A)=(I+A)(I-A)-1, uz uslov je f ( z ) = (1 z ) da broj 1 nije sopstvena vrijednost matrice A. Detaljno razmatranje matrinih funkcija i algoritama za njihovo izraunavanje moe se nai u literaturi. Ovdje emo samo napomenuti da se pouzdani algoritmi zasnivaju na Schur-ovoj dekompoziciji matrice i Parlett-ovom metodu za raunanje f(S), gdje je S Schur-ova forma matrice A. Operator funm slui za raunanje matrinih funkcija. Opti izraz F=funm(A,'funkcija') daje pojedine matrine funkcije, u zavisnosti od stringa 'funkcija'. Tako izrazi F1=funm(A,'exp'), F2=funm(A,'sin') i F3=funm(A,'log10') daju matrinu eksponencijalnu, sinusnu i logaritamsku funkciju, respektivno.
229
Linearna algebra i matrine funkcije Pored funm, postoje i operatori expm, logm i sqrtm, pri emu su logm(X) i sqrtm(X) ekvivalentni sa funm(X,'log') i funm(X,'sqrt'), dok izraz expm(X) rauna matrinu eksponencijalnu funkciju eX po posebnom algoritmu koji koristi Pade-ov razvoj. Napomenimo da expm daje pouzdanije, bre a esto i tanije rezultate od funm( ,'exp'). Primjer 8.13.1 Ilustrovaemo pojedine matrine funkcije na primjeru matrice 1 2 0 A= 1 0 1 2 1 2 Najprije emo unijeti matricu i nai obinu eksponencijalnu funkciju A=[-1 2 0;1 1 0;2 -1 2]; E=exp(A) gdje se A smatra kao polje brojeva, pa je rezultat
E= 0.3679 7.3891 1.0000 2.7183 2.7183 1.0000 7.3891 0.3679 7.3891 Za razliku od exp(A), matrinu eksponencijalnu funkciju dobiemo sa Em=expm(A) Em = 1.3340 3.1612 0 1.5806 4.4952 0 4.4745 -0.2673 7.3891 Poto je logm inverzna matrina funkcija za expm, izraz logm(Em) daje polaznu matricu A ans = -1.0000 2.0000 0.0000 1.0000 1.0000 0.0000 2.0000 -1.0000 2.0000 Matrinu eksponencijalnu funkciju moemo izraunati i sa E1=funm(A,'exp') a dobija se isti rezultat kao i sa expm(A): E1 = 1.3340 3.1612 0.0000 1.5806 4.4952 0.0000 4.4745 -0.2673 7.3891 Matrini kvadratni korijen dobija se sa
230
MATLAB for Windows Q=sqrtm(A) Q= 0.2781 + 1.0380i 0.7598 - 0.7598i 0.0000 - 0.0000i 0.3799 - 0.3799i 1.0380 + 0.2781i 0.0000 + 0.0000i 0.7562 - 0.6580i -0.3836 + 0.4817i 1.4142 + 0.0000i a kao provjera moe posluiti izraz Q^2 koji treba da rezultira u polaznoj matrici, s obzirom da iz definicije matrinog kvadratnog korijena proizilazi relacija Q2=A. Zaista ans = -1.0000 + 0.0000i 2.0000 + 0.0000i 0.0000 - 0.0000i 1.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 2.0000 - 0.0000i -1.0000 - 0.0000i 2.0000 + 0.0000i Primjer 8.13.2 Izraunati sin(B), za 1 4 1 B= 1 1 1 4 2 3
Matrinu funkciju sin(B) moemo izraunati sa
S=funm(B,'sin') S= 3.4649 -3.6237 0.0843 1.5782 1.2049 0.5324 3.0261 -1.6241 1.6339 U MATLAB-u ne postoji operator sinm za matrini sinus, ali se lako moe kreirati sa posebnim funkcijskim fajlom sinm koji se automatski dodaje listi MATLAB-ovih operatora. Na osnovu izraza sin A = (eiA + e iA ) / 2i
jednostavno pravimo novi fajl u Notepad-u sa:
function y=sinm(x) y=(expm(i*x)-expm(-i*x))/(2*i); end Sa ovako kreiranim fajlom, sada moemo izraunati sin(B) sa S1=sinm(B) to daje isti rezultat kao i operator funm(B,'sin'): S1 = 3.4649 -3.6237 0.0843 1.5782 1.2049 0.5324 3.0261 -1.6241 1.6339
231
Linearna algebra i matrine funkcije Na analogan nain moemo kreirati funkcijske fajlove i za druge matrine funkcije kao na primjer cos(X), sinh(X), i sl., ukoliko nam je tako neto pogodnije od odgovarajueg operatora funm.
232
glava deveta
RIJETKE MATRICE
MATLAB je softverski paket koji se stalno dogra|uje, dopunjavajui se funkcijama potrebnim u savremenoj ininjerskoj praksi. Dio ovih funkcija se isporuuje u osnovnom MATLAB-u dok se dio isporuuje u okviru TOOLBOX-ova. U TOOLBOX-ovima se nalaze funkcije zajednike za rjeavanje grupe problema u jednoj oblasti. Tako postoje specifini TOOLBOX-ovi za obradu signala, kontrolu i automatiku, fazi logiku, neuralne mree, elektroenergetiku, obradu slike, itd. Istovremeno, osnovni MATLAB se proiruje specifinim funkcijama. U poslednje vrijeme u ininjerskoj praksi kao i teoriji algoritama intenzivno se koriste tzv. rijetke matrice. Ove matrice imaju mali broj nenultih elemenata. Nepraktino je itave ove matrice drati u memoriji raunara ve samo nenulte elemente. Osim ovog pragmatinog razloga, ve smo naveli da u opisivanju struktura teorije algoritama, drveta, grafova, lista, veoma se esto koriste rijetke matrice. Ove strukture se koriste za algoritme sortiranja i preure|ivanja i ve su odomaene u programerskoj praksi. Niz algoritama u kojima se koriste rijetke matrice i drveta implementiran je posebnim MATLAB funkcijama. U ovom poglavlju e na nekoliko ilustrativnih primjera biti objanjeno ta je to rijetka matrica, kako se vri konverzija rijetke u "punu" matricu, kao i osnove vizuelizacije rijetke matrice i drveta. Naredbi koje se tiu rijetkih matrica veoma veliki broj i date su u tabeli 9.1.
Rijetke matrice sprandn sprandsy m spdiags sparse full spconvert nnz nnzeros nzmax spones spalloc issparse spfun spy gplot treeplot rijetka sluajna matrica rijetka simetrina sluajna matrica rijetka dijagonalna matrica kreiranje rijetke matrice kreiranje "pune" matrice iz rijetke konvertovanje rijetke matrice broj nenultih elemenata nenulti elementi veliina prostora koji zauzimaju nenulti elementi nenulti elementi rijetke matrice se postavljaju na jedinicu zauzimanje memorije za nenulte elemente provjera da li je matrica rijetka primjenjuje funkcije na nenulte elemente vizuelizacija nenulte matrice crtanje grafa kao u "teoriji grafova" crtanje drveta Tabela 9.1 Funkcije za rad sa rijetkim matricama Primjer 9.1.1 Kreirati rijetku jedininu matricu a dimenzija 5x5, pa nakon toga elementu a(2,3) dodijeliti vrijednost 5. a=speye(5); a(2,3)=5 a= (1,1) (2,2) (2,3) (3,3) (4,4) (5,5)
1 1 5 1 1 1 Vidimo da se na ekranu tampaju samo oni elementi matrice koji su nenulti a da bi bili jednoznano odre|eni pored njih se ispisuju indeksi koji ukazuju na poziciju tih elemenata u matrici. Za rijetke matrice, kao i za sve ostale naredbom whos dobijaju se osnovne informacije 234
MATLAB for Windows whos Name Size Elements Bytes Density Complex a 5 by 5 6 92 0.2400 No Grand total is 6 elements using 92 bytes Za rijetke matrice uoimo znaajan podatak Density koji predstavlja kolinik broja nenultih elemenata sa ukupnim brojem elemenata matrice. Za "punu" matricu ova veliina je Full. Rijetke matrice se ravnopravno kao "pune" mogu koristiti u aritmetikim izrazima, s tim da aritmetiki izraz u kojem se pojavljuju samo rijetke matrice daje kao rijeenje rijetku matricu a ako se ukljui makar jedna "puna" matrica rezultat je "puna" matrica. Primjer 9.1.2 Rijetku matricu iz prolog zadatka pomnoiti sa dva i sabrati sa rijetkom speye(5). Nakon toga rezultat sabrati sa matricom nultih elemenata koja ima sve elemente nule (naredba zeros u pitanju je "puna" matrica) b=speye(5); C=2*a+b C= (1,1) 3 (2,2) 3 (2,3) 10 (3,3) 3 (4,4) 3 (5,5) 3 Sabiranjem ove matrice sa "punom" matricom iji su svi elementi nule dobija se puna matrica C+zeros(5) ans = 3 0 0 0 0
0 0 0 0 3 10 0 0 0 3 0 0 0 0 3 0 0 0 0 3 I pored toga to nijesmo mijenjali vrijednost matrice, dobijamo "punu" matricu. Da zakljuimo da se rijetka matrica moe pretvoriti u "punu" naredbom 235
-0.9900 1.0000 1.0000 1.0000 1.0000 1.0000 -0.9900 1.0000 1.0000 1.0000 1.0000 -0.8391 -0.9900 1.0000 1.0000 1.0000 1.0000 1.0000 -0.9900 1.0000 236
MATLAB for Windows 1.0000 1.0000 1.0000 1.0000 -0.9900 Vidi se da matrica cos(C), iako sa svim nenultim vrijednostima, i dalje ostaje rijetka. Ponekad je potrebno neku funkciju primijeniti samo na nenulte elemente rijetke matrice. To se postie naredbom spfun('fun',A) gdje je fun ime MATLAB funkcije a A rijetka matrica. Primjer 9.2.2 Na nenulte elemente matrice C primjeniti funkciju cos. spfun('cos',C) ans = (1,1) -0.9900 (2,2) -0.9900 (2,3) -0.8391 (3,3) -0.9900 (4,4) -0.9900 (5,5) -0.9900 Postoji itav niz funkcija koji se odnosi na rijetke mattrice a koji se moe nai u tabeli 9.1. ili pomou help-a. Ovdje emo pomenuti samo funkciju spones koja nenulte elemente matrice argumenta pretvara u jedinice. (1,5) (2,5) (3,5) (4,5) (5,5)
Rijetke matrice sparse(A) ans = (1,1) 1 (2,2) 1 (3,3) 1 size(A) ans = 4 3 Ve smo vidjeli kako se rijetka matrica moe konvertovati u punu. Za ovo moe sluiti i naredba full. full(C)
3 nz = 6
Slika 9.1 Grafiki prikaz rijetke matice naredbom spy Drvo je sloeni tip podataka u brojnim programskim jezicima, koji se moe implementirati direktno (PROLOG i LISP) ili preko samoreferentnih struktura (C i PASCAL). Svaki vor drveta moe da ima vie sinova (grana drveta) a sinovi svoje sinove, itd. ^vor koji nema roditelja je korijen stabla a vorovi koji nemaju sinove su listovi. Binarno drvo je ono drvo iji svaki vor moe imati samo dva sina koje nazivamo lijevi i desni sin vora. Visina drveta je rastojanje od korijena drveta do najudaljenijeg lista. U MATLAB-u se obilazak binarnog drveta definie po srednjem redosljedu koji se moe opisati sljedeim algoritmom: 1o Obilazi se po srednjem redosljedu lijevo poddrvo korijena stabla; 238
MATLAB for Windows 2o Zatim se obilazi korijen; 3o Po srednjem redosljedu se obilazi desno poddrvo korijena stabla. Za stablo sa 7 vorova prikazano na slici 9.2 u krugovima su upisane pozicije po srednjem redosljedu.
4 2 1 3 5
korijen
6 7
list
Slika 9.2. Puno binarno stablo visine 2 Za crtanje drveta u MATLAB-u slui funkcija treeplot(p,'c','d'), gdje je p vektor iji svaki element ukazuje koji je vor roditelj datom voru. Za korijen se usvaja da mu je korijen 0. 'c' je boja u kojoj se crta stablo dok je 'd' boja kojom se crta veza korjena sa najudaljenijim listom stabla. Primjer 9.4.2 Nacrtati stablo sa slike 9.2 naredbom treeplot. p=[2 4 2 0 6 4 6] treeplot(p,'y','r')
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.2 0.4 0.6 height = 2 0.8 1
239
glava deseta
241
Ulazno izlazne naredbe Uitavanje podataka iz tekstualne ASCII datoteke (ovdje je ekstenzija datoteke obavezna); Svi podaci koji se pojavljuju u MATLAB-ovom komandnom prozoru mogu da se snime u dnevniku datoteku - diary, naredbom diary imefajla.ext. Kraj zapisivanja u dnevnik obiljeava naredba diary off. load fajl.ext U irem smislu u izlazne naredbe MATLAB-a spadaju naredbe za grafiko postprocesiranje meta i print pomou kojih se u raznim formatima mogu zapisati plodovi MATLAB-ovog grafikog rada.
Kod otvaranja fajla pretpostavljeno je da su u pitanju binarni fajlovi (ovdje postoje bitne razlike u zavisnosti od verzija MATLAB-a pa se treba informisati u help-u). Ako se eli fajl otvoriti u tekstualnom reimu u namjeni je potrebno dodati slovo t. Npr. 'rt' ili 'wt+'. Fajl iji je numeriki identifikator F zatvara se naredbom fclose(F), dok se naredbom fclose('all') zatvaraju svi otvoreni fajlovi osim onih sa identifikatorima F=0, F=1 i F=2. Naredba fclose vraa nulu ako je zatvaranje uspjeno obavljeno i -1 ako nije.
242
MATLAB for Windows Za itanje binarnih podataka iz fajla koristi se naredba fread iji je opti oblik [A,B]=fread(F,vel,'preciznost') gdje je A matrica u koju se zapisuju podaci iz datoteke, B broj uspjeno proitanih podataka, F cjelobroni numeriki identifikator datoteke koja je otvorena naredbom fopen. vel je veliina podataka koji se ele proitati i ima vrijednosti N inf [M,N] Smjetanje N elemenata u vektor kolonu; ^itanje podataka do kraja fajla; Smjetanje podataka u matricu dimenzija MxN, N - moe biti inf.
'preciznost' definie tip podatka koji se eli itati kao i koliko svaki podatak zauzima memorije. Mogue vrijednosti su 'char' 'schar' 'short' 'int' 'long' 'float' 'double' 'uchar' 'ushort' 'uint' 'ulong' Karakter 8-bita; Oznaeni karakter 8-bita; Cijeli broj 16-bita; Cijeli broj 16 ili 32 bita; Cijeli broj 32 ili 64 bita; Broj u pokretnom zarezu 32 bita; Broj u pokretnom zarezu 64 bita; Neoznaeni karakter 8-bita; Neoznaeni cijeli broj; Neoznaeni cijeli broj 16 ili 32 bita; Neoznaeni cijeli broj 32 ili 64 bita.
Za neformatizovano zapisivanje matrice A u datoteku F koristi se naredba fwrite u obliku B=fwrite(F,A,'preciznost') B je broj uspjeno zapisanih podataka, dok preciznost ima isto znaenje kao u naredbi fread. Primjer 10.2.1 Matricu veliine 5x5 sluajnih cijelih brojeva od 0 do 15 snimiti u datoteku pod imenom prva.bin. a=fopen('prva.bin','w'); fwrite(a,floor(16*rand(5)),'int') ans = 25 fclose(a) 243
Ulazno izlazne naredbe ans = 0 Otvorimo datoteku prva.bin za itanje i proitajmo njen sadraj. a=fopen('prva.bin','r'); fread(a,[5 5],'int') ans = 3 6 8 6 8 0 8 10 10 1 10 13 0 9 10 10 0 6 14 6 14 0 1 13 11 fclose(a)
244
MATLAB for Windows Oznaka \n predstavlja znak za novi red to e rei da se poslije zapisa tri elementa podaci smjetaju u novi red. Opcioni rezultat naredbe fprintf ukazuje na broj uspjeno prenesenih podataka. Za itanje iz fajla formatizovanih podataka koristi se naredba fscanf iji je opti oblik [A,B]=fscanf(F,'format',vel) gdje je A matrica u koju se smjetaju podaci, B opcioni izlaz i ukazuje na broj uspjeno prenesenih podataka, F je numeriki identifikator fajla, 'format' ima isto znaenje kao u naredbi fprintf a vel ima isto znaenje kao u naredbi fread. Primjer 10.2.3 Proitati sa diska sadraj fajla koji je snimljen u prethodnom primjeru F=fopen('tabela','r'); [a,b]=fscanf(F,'%f',[3 21]) a= Columns 1 through 7 -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 -0.8415 -0.7833 -0.7174 -0.6442 -0.5646 -0.4794 -0.3894 0.5403 0.6216 0.6967 0.7648 0.8253 0.8776 0.9211 Columns 8 through 14 -0.3000 -0.2000 -0.1000 0 0.1000 0.2000 0.3000 -0.2955 -0.1987 -0.0998 0 0.0998 0.1987 0.2955 0.9553 0.9801 0.9950 1.0000 0.9950 0.9801 0.9553 Columns 15 through 21 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833 0.8415 0.9211 0.8776 0.8253 0.7648 0.6967 0.6216 0.5403 b= 63 Ovim smo proitali sadraj fajla i stigli do njegovog kraja, novi pokuaj itanja nee dovesti do itanja podataka fscanf(F,'%f',1) ans = [] Me|utim, zatvorimo fajl pa ga ponovo otvorimo i proitajmo 6 podataka u matrici 2x3 fclose(F) F=fopen('tabela','r'); 245
Ulazno izlazne naredbe [a,b]=fscanf(F,'%f',[4 3]) a= -1.0000 -0.7833 0.6967 -0.8415 0.6216 -0.7000 0.5403 -0.8000 -0.6442 -0.9000 -0.7174 0.7648 b= 12 sada se moe nastaviti itanje podataka, npr. moe se proitati matrica od 2x2 elemenata u nastavku [a,b]=fscanf(F,'%f',[2 2]) a= -0.6000 0.8253 -0.5646 -0.5000 b= 4 fclose(F); U MATLAB-u postoji i dvije naredbe kojima se ita jedan red matrice fgetl(F) i fgets(F), s time to prva naredba ne prenosi oznaku za kraj reda a druga prenosi.
MATLAB for Windows F=fopen('tabela','r'); fscanf(F,'%f',6) ans = -1.0000 -0.8415 0.5403 -0.9000 -0.7833 0.6216 fseek(F,0,-1) ans = 0 fscanf(F,'%f',4) ans = -1.0000 -0.8415 0.5403 -0.9000 fclose(F); Trenutnu poziciju u fajlu moemo proitati naredbom ftell(F). Za premotavanje fajla na poetak moe se koristiti naredba frewind(F) to se moe uraditi i naredbom fseek(F,0,-1); Ako se eli znati da li je pokaziva fajla na kraju fajla koristi se naredba feof(F) iji je rezultat 1 ako se stiglo do kraja fajla a nula ako nije.
Ulazno izlazne naredbe ime se u radnu tabelu file.wk1 smjeta matrica M a r i c su ofset od kojega poinje radna tabela.
248
glava jedanaesta
MATLAB OKRUENJE
11.1 OSNOVNI MATLAB I DODATNI MODULI
U verziji MATLAB-a 4.2, pored osnovnog MATLAB-a mogu se instalisati i dodatni toolbox-ovi i program SIMULINK. Toolbox programski moduli predstavljaju skupove funkcija namijenjenih za rjeavanje specifinih ininjerskih problema. SIMULINK je dodatni MATLAB modul koji je namjenjen simulaciji dinamike sistema. Ovi dodatni moduli nee biti detaljnije obrazlagani u okviru ove knjige.
MATLAB okruenje Napomenimo da se prilikom startovanja MATLAB-a pokree program matlabrc.m u kojem su podeeni osnovni parametri rada. Pored ovog fajla korisnik moe kreirati fajl pod nazivom startup.m koji e se izvravati nakon matlabrc.m a prije poetka rada u MATLAB-u.
Slika 11.1 Open dialog box Save Workspace As Run M-file Print Print Setup Exit MATLAB snima radni prostor u .mat fajl koji se specificira u dialog boxu koji je slian onom sa slike 11.1; aktiviranje m-fajla. Treba upisati ime fajla koji se eli otvoriti ili sa Browse potraiti taj fajl; tampanje komandnog prozora; izbor tampaa i postavljanje njegovih parametara; izlazak iz MATLAB-a.
MATLAB for Windows Cut Copy Paste Clear Session brie selektovani dio teksta iz komandnog prozora i smjeta ga u Clipboard; kopira selektovani dio teksta iz komandnog prozora u Clipboard; smjetanje sadraja Clipboard-a u komandni prozor; isti komandni prozor (slino MS DOS naredbi cls).
Slika 11.2 Izbor fonta koji se primjenjuje u komandnom prozoru Uicontrol Font Editor Preference font koji se koristi u kontrolama (uicontrol); izbor editora u kojem se kreiraju m-fajlovi. Uobiajeno je to C:\Windows\Notepad.EXE a moe i bilo koji drugi MS DOS i WINDOWS editor (EDIT, NE, WRITE, itd). 251
MATLAB okruenje
252
LIteratura
[1] G. H. Golub, C. F. Van Loan, Matrix Computations, The John Hopkins University Press, Baltimore, USA, 1984. [2] G. Strang, Linear Algebra and its Applications, Academic Press, New York, USA, 1976. [3] G. W. Stewart, Introduction to Matrix Computations, Academic Press, New York, USA, 1973. [4] C. Moler, J. Little, S. Bangert, PC-MATLAB for MS-DOS Personal Computers, The Math Works, Inc., Sherborn, USA, 1987. [5] Lj. Stankovi, Digitalna Obrada Signala, Nauna knjiga, Beograd, 1990. [6] Lj. Stankovi|, Z. Uskokovi, PC MATLAB sa elemantima DOS-a, Epsilon, Titograd 1991. [7] M. Cvetkovi|, R. Jani|, D. Mitrakovi|, Matematiki programski alati, MathCad 5.0+, MatLab 4.0, Maple V2.0, Mathematica 2.2, Grifon, Beograd 1996. [8] D. Hanselman, B. Littlefield, The Student Edition of MATLAB: version 4.0, user guide, MathWorks 1995.
283