Upload
-m
View
332
Download
5
Embed Size (px)
DESCRIPTION
matlab
Citation preview
Strana 1
1. Uvod u MATLAB 1.1. Uvod Postoje dvije klase softverskih paketa za rješavanje matematičkih problema:
- programi zasnovani na simboličkom rješavanju i - programi zasnovani na numeričkom rješavanju problema.
Tipičan predstavnik prve klase programa je Mathematica, a druge MATLAB. MATLAB (MATrix LABoratory) je interpreter i oslanja se na matrični račun kao osnovu svog rada. MATLAB je dostupan u više verzija, koje su prilagođene različitim računarskim platformama – od PC i Macintosh računara, preko UNIX radnih stanica do Convex i Cray računara. Predstavlja najčešće korišćen paket u svojoj oblasti. Verzije MATLAB-a za različite računarske sisteme se razlikuju donekle samo po korisničkom interfejsu – sve komande se jednako izvršavaju na svim platformama. Ovdje će biti ukratko prikazan MATLAB u verziji za Windows operativne sisteme. MATLAB predstavlja moderan i multifunkcionalan programski sistem koji je, prvenstveno, namijenjen rješavanju problema u tehnici. Korisniku se pruža mogućnost numeričke i logičke obrade podataka, vizuelnog prikazivanja podataka, kao i kreiranja i izvršavanja sopstvenih programa. MATLAB je koncipiran kao proširiv programski paket – pored osnovnog paketa moguće je nabaviti i dodatne module specijalizovane za rad u oblastima kao što su automatsko upravljanje (Control System Toolbox), obrada signala (Signal Processing Toolbox) ili simulacija neuronskih mreža (Neural Network Toolbox). Osnovno okruženje MATLAB-a predstavlja tekstualni prozor u kome se zadaju MATLAB komande. Komande se izvršavaju neposredno nakon unosa. Poseban simbol (») predstavlja MATLAB prompt. Pored toga, moguće je pisati i programe u programskom jeziku koji nudi MATLAB. Sam MATLAB programski jezik je nalik drugim proceduralnim jezicima, izuzimajući njegovu prilagođenost radu sa matricama. Pored osnovnog prozora za unos komandi (MATLAB Command Window), moguće je otvoriti još neke prozore (npr. za grafički prikaz podataka). Mogućnosti MATLAB-a su predstavljene MATLAB programom koji se pokreće komandom demo. 1.2. Osnovni MATLAB Osnovna karakteristika MATLAB-a je da nalazi numerička rješenja različitih vrsta matematičkih problema, od onih najjednostavnijih do izrazito složenih. Druga bitna karakteristika MATLAB-a je širok spektar mogućnosti za grafičko prikazivanje. MATLAB generiše grafike specifične po boji, osvijetljenosti, vrsti linija i tekstualnom sadržaju.
Strana 2
1.2.1. Komandni prozor MATLAB-a Nakon pokretanja MATLAB-a, pojavljuje se komandni prozor (sl. 1), koji je sada aktivni prozor. U njemu je omogućena komunikacija sa MATLAB programskim prevodiocem (engl. interpreter). Program daje znak », kojim označava da je spreman da prihvati komande od korisnika.
Sl. 1. Komandni prozor MATLAB-a
1.3. Uvod u rad Osnovni element kojim manipuliše MATLAB je pravougaona numerička matrica čiji elementi mogu biti i kompleksni brojevi. Specijalni slučajevi pravougaone matrice su matrice tipa 1x1 koje predstavljaju skalare, dok su vektori matrice sa samo jednom vrstom ili kolonom. 1.3.1. Unošenje podataka Matrice se u MATLAB mogu unositi na nekoliko načina:
direktnim unošenjem elemenata, generisanjem pomoću funkcija ili izraza ugrađenih u MATLAB, definisanjem u M datoteci, prenošenjem iz spoljne datoteke sa podacima.
Kada su u pitanju matrice malih dimenzija, najpogodniji je prvi način. Elementi jedne vrste se upisuju jedan za drugim, međusobno razdvojeni preznim mjestom ili zapetom. Kraj svake vrste matrice označava se znakom ; (tačka zapeta). Matrica se mora ograničiti uglastim zagradama [ ]. Korišćenjem strelica i kontrolnih znakova omogućeno je korisniku da ponovo aktivira, promijeni ili pozove komande koje je prethodno otkucao.
Strana 3
Opisi funkcija tastera ili kombinacija tastera koji omogućavaju uređivanje komandne linije prikazani su u Tabeli1. Tabela 1. Opisi funkcija tastera ili kombinacija tastera koji omogućavaju uređivanje komandne linije
Taster, Alternativa Funkcija ↑, Ctrl+P Pozivanje prethodne linije ↓, Ctrl+N Pozivanje naredne linije ←, Ctrl+B Pomjeranje kursora ulijevo za jedan znak →, Ctrl+F Pomjeranje kursora udesno za jedan znak Ctrl+←, Ctrl+L Pomjeranje kursora ulijevo za jednu riječ Ctrl+→, Ctrl+R Pomjeranje kursora udesno za jednu riječ Home, Ctrl+A Pomjeranje kursora na početak komandne linije End, Ctrl+E Pomjeranje kursora na kraj komandne linije Esc, Ctrl+U Brisanje komandne linije Del, Ctrl+D Brisanje znaka na mjestu kursoraBackspace Brisanje znaka lijevo od kursora Ctrl+K Brisanje sadržaja komandne linije do kraja
1.3.2. Brisanje sadržaja u komandnom prozoru Ako je potrebno izbrisati sadržaj komandnog prozora, koristi se komanda clc. Tako je ispražnjen komandni prostor, a ne radna površina. Ako se npr. upotrijebi taster ↑, biće vidljiva prethodna komanda. 1.3.3. Prekid programa Pritiskom na kombinaciju tastera Ctrl+C rad programa se prekida. 1.4. Komanda format Ovom komandom se definiše numerički format za vrijednosti koje se prikazuju na ekranu, ali to nema uticaja na registrovanje u memoriji. Da bi se pojasnila ova komanda, potrebno je u komandnom prozoru (Command Window) otkucati: >> a=[2/5 1.22333e-6] i pritisnuti Enter.
U komandnom prozoru će biti vidljivo: >> a=[2/5 1.22333e-6]
a =
0.4000 0.0000 >> Na ovaj način smo definisali vektor a sa dva elementa. Prikazani format je kratki format (short), standardne forme (četiri cifre iza decimalne tačke). Ako želimo da se prikažu brojevi sa mantisom i eksponentom, to postižemo komandom format short e (zadržan je kratki format, ali su brojevi prikazani sa mantisom i eksponentom), a nakon toga pritisnemo taster Enter: >> format short e >> a
Strana 4
a = 4.0000e-001 1.2233e-006 >> Prikazaćemo i ostale numeričke formate koristeći funkciju format. >> format short g >> a a = 0.4 1.2233e-006 >> format long >> a a = 0.40000000000000 0.00000122333000 (dugački format – 14 cifara) >> format long e >> a a = 4.000000000000000e-001 1.223330000000000e-006 (brojevi se daju mantisom i eksponentom) >> format long g >> a a = 0.4 1.22333e-006 >> format bank >> a a = 0.40 0.00 (prikaz brojeva sa dva decimalna mjesta) >> format + >> a a = ++ (prikazuje se samo znak)
>> format rat >> a a = 2/5 1/817441 (prikazuje se razlomak, drugi broj je „zaokružen“ broj)
>> format compact >> a a = 2/5 1/817441 (između redova sa nekim sadržajem neće biti praznih redova)
Strana 5
>> format loose >> a a = 2/5 1/817441 (prikazuju se prazni redovi između redova sa određenim sadržajem). Izborom File Preferences Command Window Command Window Preferences vrši se izbor željenog numeričkog formata.
Sl. 2. Izbor željenog numeričkog formata za vrijednosti koje se prikazuju na ekranu
Ako nije definisan neki drugi format, automatski se koristi format short, tj. standardni format sa 5 značajnih cifara.
PRIMJER: Broj prikazati korišćenjem različitih oblika naredbe format.
>> format short, pi ans = 3.1416 >> format long, pi ans = 3.141592653589793 >> format long e, pi ans =3.141592653589793e+000 >> format short e, pi ans =
3.1416e+000 >> format rat, pi ans = 355/113
Strana 6
Napomena: Sljedeći broj sa kojim budemo radili biće automatski u formatu koji smo posljednji koristili. Da bismo se vratili u uobičajeni, format short, dovoljno je otkucati samo naredbu format.
1.5. Prikaz rezultata Pritiskom na taster Enter na ekranu se automatski prikazuju rezultati. Ako je potrebno da se rezultati ne prikazuju na ekranu, neophodno je da se red završi znakom ; To omogućava izvršenje proračuna, ali se rezultat ne prikazuje na ekranu. 1.5.1. Prikaz komandi u više redova Da bi se komande prikazale u više redova, neophodno je na kraju svakog reda otkucati tri uzastopne tačke. Primjer: >> a=2-1/2+1/3-1/4+1/5 ... - 1/6 + 1/7; >> a
a =
1.7595
>> Napomena: prije kucanja tri uzastopne tačke, potrebno je unijeti jedan prazan znak. 1.6. Korišćenje komandi save i load Formiraćemo niz sa dva elementa: a i b (element a je već formiran, a element b je recipročna vrijednost elementa a): a = 1.7595 >> b=1/a b = 0.5683 >> c=[a b] c = 1.7595 0.5683
Formirali smo niz c sa dva elementa
>> save rp Sačuvali smo sadržaj radnog područja u zapisu rp.mat >> clear Brisanje sadržaja radnog područja >> load rp Unošenje podataka iz zapisa rp.mat >> c Prikazivanje niza c na ekranu c = 1.7595 0.5683 >> clear Brisanje sadržaja radnog područja >> d=[2/3 .23]; Formirali smo niz d sa dva elementa >> save rp.dat -ascii Radno područje kopirali smo u tekstualni zapis >> clear Brisanje sadržaja radnog područja >> load rp.dat Unošenje podataka iz zapisa rp.dat (formiran je niz rp) >> rp rp = 0.6667 0.2300
Prikazivanje niza rp na ekranu
Strana 7
>> e=rp e = 0.6667 0.2300
Formirali smo niz e sa dva elementa (jednak nizu rp) i prikazali ga na ekranu
>> clear Brisanje sadržaja radnog područja>> f=[2 3];g=4.5; Formirali smo niz f sa dva elementa i promjenljivu g >> save rp1 Sačuvali smo kopiju radnog područja u zapisu rp1.mat >> clear Brisanje sadržaja radnog područja >> load rp1 Unošenje sadržaja zapisa rp1.dat >> rp1 Pokušaj prikaza niza ??? Undefined function or variable 'rp1'. >>
MATLAB javlja grešku
1.7. Funkcije za pomoć Komanda help Ako zadamo komadnu >> help MATLAB prikazuje listu svih direktorija sa opisom kategorije funkcija koje se nalaze u pojedinom direktoriju. Ako zadamo zajedno sa komandom help i ime neke od funkcija (ime funkcije se zadaje malim slovima), MATLAB kao odgovor daje informacije o navedenoj funkciji u komandnom prozoru. Lista imena svih funkcija, npr. iz oblasti linearne algebre, nalazi se u direktorijumu matfun, i ako želimo vidjeti listu imena svih ovih funkcija (sa opisom svake od njih) zadaćemo komandu: help matfun. Ako otkucamo: >> help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also sqrtm, realsqrt, hypot. Overloaded methods: codistributed/sqrt Reference page in Help browser doc sqrt
Ako kliknemo na doc sqrt, omogićeno je korišćenje Help-a uz pomoć Internet-a.
Ako otkucamo: >> sqrt (-2:2) ans = 0 + 1.4142i 0 + 1.0000i 0 1.0000 1.4142
Strana 8
Komanda helpwin Ovom komandom se, takođe, omogućuje pristup informacijama do kojih se dolazi i pomoću naredbe help. Komanda lookfor Ovom komandom se omogućava dobijanje informacija o nekoj funkciji na osnovu zadate ključne riječi. Ako otkucamo: >> lookfor poly dobija se mnogo odgovora, npr.: CONV Convolution and polynomial multiplication. DECONV Deconvolution and polynomial division.
2. Definisanje promjenljivih, unošenje podataka i aritmetički izrazi u Matlab-u
Promjenljive se definišu tako što im se dodijeli vrijednost. Naziv promenljive je niz slova i cifara koji mora početi slovom, pri čemu se velika i mala slova razlikuju. Slijedi primjer definicije matrice dimenzije 3 x 3: » A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 Matricu A je moguće definisati i na drugi način: » A = [1 2 3 4 5 6 7 8 9] A = 1 2 3 4 5 6 7 8 9 Vektor-vrsta se definiše kao u sljedećem primjeru: » x = [-1.3 sqrt(3.1) (1+2)/4*5] x = -1.300 1.7607 3.7500 Slično kao u prethodnom primjeru s matricom definiše se i vektor-kolona. Elemente matrice je neophodno odvojiti bar jednim white space karakterom. Prilikom dodjeljivanja vrijednosti promjenljivim, MATLAB će ispisati upravo dodijeljenu vrijednost. Stavljanje znaka tačka-zapeta (;) na kraj reda prilikom dodjele vrijednosti promenljivoj će spriječiti ispis vrijednosti na ekran. Slijedi primjer: » y = [1.25e-2 sin(5)];
Strana 9
Imaginarna jedinica i može se eksplicitno definisati na sljedeći način: » i = sqrt(-1) i = 0+1.0000i Ovako definisan skalar se potom može koristiti u formiranju MATLAB izraza, kao u sljedećem primjeru: » C = [1+5*i 2+6*i; 3+7*i 8]; Napomena: Znak * se može izostaviti. 2.1. Selekcija elemenata matrice Elementima matrice pristupa se preko njihovog indeksa. Osim pojedinačnih elemenata matrice, moguće je izdvojiti vrstu, kolonu ili bilo koju podmatricu. Za matricu definisanu izrazom: » A = [1 2 3; 4 5 6; 7 8 9]; element A(2,2) bi bio: » A(2,2) ans = 5 Izdvajanje treće kolone matrice A vrši se izrazom: » A(:, 3) ans = 3 6 9 Podmatrica koja predstavlja presjek prve i treće vrste i druge i treće kolone matrice A dobija se izrazom: » A([1 3], [2 3]) ans = 2 3 8 9 Prethodni rezultat se može dobiti i izrazom: » A([1 3], 2:3) ili izrazom:
Strana 10
» A(1:2:3, 2:3) U izrazima za selekciju elemenata matrice moguće je koristiti i prethodno definisane vektore – promjenljive. U MATLAB-u je moguće promijeniti i dimenzije matrice. Na primjer, izraz » A = [A; 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12
će proširiti matricu A novom vrstom. Slično tome, sljedeća komanda će ukloniti drugu kolonu iz matrice A.
» A = A(:, [1 3]) A = 1 3 4 6 7 9 10 11 Ukoliko se matrica proširuje novim elementima, a ne definišu se vrijednosti svih novih elemenata, za njihove vrijednosti se uzima nula. Na primjer: » x = 1 : 4; » x(6) = 7 x = 1 2 3 4 0 7 Prilikom definisanja vrijednosti promjenljivih posebno je koristan operator dvotačka (:). Ovaj operator je namijenjen za definisanje vektora čiji se elementi dobijaju inkrementiranjem početne vrijednosti za konstantan korak. Slijedi primjer: » x = 1:4 x = 1 2 3 4 Moguće je navesti i korak različit od 1, kao u sljedećem primjeru: » y = 1:0.5:3 y = 1.0000 1.5000 2.0000 2.5000 3.0000 Operator dvotačka se može koristiti i za dodjelu vrijednosti matrici, ali samo u slučaju da je matrica bila prethodno definisana (tj. poznate joj dimenzije). Sljedeći primjer ilustruje ovu mogućnost. » A = [1 2 3; 4 5 6; 7 8 9]; » A(:) = 21:29 A = 21 24 27
Strana 11
22 25 28 23 26 29 Ukoliko matrica A prethodno ne bi bila definisana, rezultat bi bio vektor kolona. MATLAB automatski dodjeljuje vrijednost posljednjeg izračunatog izraza promjenljivoj ans. Tako se može dobiti i vrijednost izraza koji nisu dodijeljeni kao vrijednost nijednoj promjenljivoj. Slijedi primjer: » sqrt (2) ans = 1.4142
Pod skalarom se podrazumijeva matrica tipa 1x1. Vektori predstavljaju matrice jedne vrste ili jedne kolone.
MATLAB je jezik izraza i sačinjen je od konstanti, promjenljivih, operatora, specijalnih znakova i funkcija.
Operacije i izrazi u MATLAB–u se pišu na uobičajan način, slično kao što se piše u matematici. Rezultat izvršenja izraza je matrica.
MATLAB operiše realnim i kompleksnim brojevima. Koristi se uobičajena decimalna notacija sa znakom i decimalnom tačkom.
MATLAB može da se koristi za izračunavanje jednostavnih matematičkih izraza. Tada on radi slično kalkulatoru.
Napomena: MATLAB je veoma strog prema definisanoj sintaksi jezika. Izostavljena zagrada ili zapeta mogu da utiču tako da cijeli program ne funkcioniše. Sa druge stane, velika olakšica u radu je što se na ekranu ispisuje vrsta učinjene greške i olakšava se korisniku da se greške isprave.
>> y=sin(x
??? y=sin(x
|
Error: Expression or statement is
incorrect--possibly unbalanced (, {, or [.
MATLAB-ove promjenjive mogu imati numeričke ili znakovne vrijednosti (string).
Mogućnost manipulacije matematičkim izrazima bez korišćenja brojeva može da bude veoma korisna.
Znakovni tip podataka sastoji se iz niza ASCII znakova koji se unose pod jednostrukim apostrofima 'x'.
Strana 12
PRIMJER 1:
Napisati riječ student.
>> rijec='student' rijec = student
PRIMJER 2:
U riječi student odrediti broj slova.
>> size(rijec)
ans =
1 7
U ovom PRIMJERU korišćena je naredba size, koja izračunava dimenziju
unijete promjenljive.
Napomena: (Odgovor 1 7 označava polje brojeva u jednom redu 7 elementa).
Imena promjenljivih ili funkcija moraju početi slovom, iza koga može slijediti prizvoljan niz simbola, ali se samo prvih 63 karaktera iz imena pamti.
MATLAB razlikuje velika i mala slova, tj. x i X su dvije različite promjenljive.
Imena matrica obično se pišu velikim slovima, dok imena skalara i vektora malim slovima.
Imena funkcija moraju se pisati malim slovima.
2.2. Aritmetički operatori
Aritmetički izrazi se prave korišćenjem uobičajenih aritmeričkih operacija za koje koristimo sljedeće simbole:
+ sabiranje
- oduzimanje
* množenje
/ dijeljenje
^ stepenovanje
PRIMJER 3:
Izračunati vrijednost izraza 2+4-6.
>> 2+4-6
ans =
0
Strana 13
Iz ovog PRIMJERA vidimo da MATLAB sam kreira veličinu pod imenom ans (answer odgovor), ukoliko korisnik sam ne dodijeli ime promjenljivoj ili vrijednosti izraza.
PRIMJER 4:
Izračunati
1
422x .
>> x=2+(2*4-1/pi) x = 9.6817
Broj je definisan kao stalna veličina MATLAB-a i dovoljno je ukucati slova pi (a ne vrijednost 3.14).
PRIMJER 5:
Izračunati vrijednost izraza 3y x , ako je 23x .
>> x=3^2; >> y=3*x y = 27
2.3. Relacijski operatori
Relacijski operatori su binarni operatori i koriste se za poređenje izraza. Rezultat poređenja je tačno ( true ) u oznaci 1 ili netačno ( false ) u oznaci 0 .
< manje od
manje ili jednako od
> veće od
veće ili jednako od
= = jednako
~= nejednako
PRIMJER 6: Ispitati istinitosnu vrijednost izraza 5 3 .
>> 5<3 ans = 0
Napomena: Često se griješi tako što se operator = = često pogrešno zamjenjuje
sa znakom jednakosti =
Strana 14
PRIMJER 7: Izračunati vrijednost izraza:
>> 5<(7= =8) ans 0
>> 2+2==4 ans 1
» A = [1 2 3; 4 5 6; 7 8 9]; » B = A<5 B = 1 1 1 1 0 0 0 0 0
Zamijenimo sada = = sа =
>> 5<(7=8)
??? 5<(7=8)
|
Error: The expression to the left of the
equals sign is not a valid target for an
assignment.
U ovom prvom 7 8 ima istinutosnu vrijednost pogrešno, tj 0, i zato je 5 0 , što daje kao rezultat 0.
U donjem PRIMJER-u greška se javlja zato što = predstavlja samo operaciju pridruživanja, a ne računanja vrijednosti koja ima neku istinitosnu vrijednost.
2.4. Logički operatori Logički operatori u MATLAB-u su sljedeći simboli:
~ (negacija) | (disjunkcija) & (konjunkcija)
Strana 15
Tablica vrijednosti za logičke operacije
p q ~p p&q p|q
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1
Napomena: MATLAB tretira svaki ne nulti broj kao tačan i nulu kao netačan.
>> ~4 ans = 0 >>
Logički i relacioni operatori su namijenjeni za formiranje logičkih izraza. MATLAB ne posjeduje logički tip podataka kao poseban tip, već se kao vrijednost logičkih izraza uzima 1 (ako je izraz tačan), odnosno 0 (ako je izraz netačan). Prilikom izračunavanja vrijednosti logičkih izraza vrijednosti različite od nule se tretiraju kao tačni izrazi, a nula kao netačan izraz. Slijede primjeri korišćenja logičkih operatora: » ~B ans = 0 0 0 0 1 1 1 1 1 » X = ((B(:, 1) | ~B(:, 2)) & B(:, 3))' X = 0 0 1
Strana 16
2.5. Kompleksni brojevi
Imaginarna jedinica je definisana kao stalna veličina. Koristi se uobičajena
definicija 1i ili 1j .
>> i=sqrt(-1) i =
0 + 1.0000i Kompleksni brojevi se definšu kao zbir z x iy , gdje je x realni, a y
imaginarni dio kompleksnog broja.
PRIMJER 8: Napisati broj 2 3z i .
>> z=2+3*i z = 2.0000 + 3.0000i
Moduo, argument, realni i imaginarni dio i konjugovano kompleksni broj dobijaju se korišćenjem naredbi abs, angle, real, imag, conj.
PRIMJER 9:
Izračunati 4
sin
.
>> sin(pi/4) ans = 0.7071
PRIMJER 10:
Za 5x i 59y izračunati vrijednost izraza lnz y x . > x=5; >> y=59; >> z=log(y)+sqrt(x) z=6.3136
Primijetimo da vrijednosti promjenljivih x i y nisu prikazane na ekranu (jer se
iza promjenljivih nalazio znak ;).
PRIMJER 11: Izračunati vrijednost izraza logz x y , za vrijednosti x i y , zadate u
prethodnom PRIMJERU.
>> % Komentar: x i y su vrijednosti promjenljivih iz prethodnog PRIMJERA >> z=log10(x)+abs(y) z = 59.6990
Strana 17
Napomena: Treba imati u vidu da MATLAB pamti prethodno unijete veličine,
pa ih nije potrebno ponovo definisati ako nam kasnije trebaju u radu. Napomena: Oznaka % koristi se za pisanje komentara.
2.6. Osnovne konstante u Matlab – u
ans vrijednost izraza kada nije pridružen promjenljivoj
i , j imaginarna jedinica 1
pi =3.14159265...
Inf , ili rezultat 1/0 (infinity)
NaN Nije broj, ili rezultat 0/0 – (Not a Number)
Napomena: Prednost rada u MATLAB-u je što dijeljenje nulom ne dovodi do prekida programa ili greške. Ispisuje se poruka upozorenja i specijalna veličina se ponaša korektno u kasnijim izračunavanjima.
PRIMJER 1:
Unijeti matricu
247
586
421
A .
>> A=[1 -2 4; -6 8 5; 7 -4 2] A = 1 -2 4 -6 8 5 7 -4 2
Druga mogućnost upisa je da se razmak između elemenata zamijeni zapetom.
>> A=[1, -2, 4; -6, 8, 5; 7, -4, 2] A = 1 -2 4 -6 8 5 7 -4 2
Vektori su matrice vrste ili kolone i unose se na isti način. Ako su vrijednosti elemenata ekvidistantne (sa istim korakom), koristi se simbol : .
PRIMJER 2: Unijeti vektor x=(1, 2, ... , 10).
>> x=1:10; x x =
1 2 3 4 5 6 7 8 9 10
Strana 18
Naredba length izračunava dužinu vektora.
>> length(x)
ans =
10
Ako želimo proizvoljan korak, a ne 1, kao u predhodnom PRIMJERU, koristimo naredbu h=a:k:b, gdje su a i b početna i krajnja vrijednost, a k je korak.
Kod matrica sa kompleksnim elementima možemo da koristimo dva načina unošenja podataka, tako što posebno unosimo realni i imaginarni dio ili broj kao cjelinu.
PRIMJER 3:
Unijeti matricu
ii
iiZ
8473
6251, tako što ćemo posebno unositi realne, a
posebno imaginarne dijelove kompleksnih brojeva.
>> a=[-1, 2; 3, 4] ; b=[5, -6; 7, 8] ; Z=a+b*i Z = -1.0000 + 5.0000i 2.0000 - 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i
PRIMJER 4:
Unijeti matricu Z iz prethodnog PRIMJERA tako što elemente odmah unosimo kao kompleksne brojeve.
>> Z=[-1+5*i , 2-6*i ; 3+7*i , 4+8*i] Z = -1.0000 + 5.0000i 2.0000 - 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i
Element matrice A koji se nalazi u presjeku i-te vrste i j-te kolone može se dobiti primjenom naredbe A(i,j).
PRIMJER 5:
Iz matrice
654
132
321
A izdvojiti element u presjeku druge vrste i treće
kolone.
Strana 19
>> A=[1 2 3 ; 2 -3 1 ; -4 -5 -6] ;
>> A(2 , 3)
ans =
1
Ako želimo da izdvojimo vrstu koristimo komandu A(k,:) ili kolonu komandu A(:,k), gdje k predstavlja traženu vrstu, odnosno kolonu.
Dimenzije matrice određuju se naredbama size(A) ili [m,n]=size(A).
PRIMJER 6: Odrediti dimenzije date matrice A, korišćenjem naredbe size.
>> size(A)
ans =
3 3
PRIMJER 7: Odrediti dimenzije matrice A korišćenjem naredbe [m,n]=size(A).
>> [m, n]=size(A) m = 3 n = 3
Strana 20
3. Osnovne operacije s matricama, vektorima i skalarima
Upotreba dvotačke
Jednostavan način izrade aritmetičkih nizova: >>1:5 ans= 1 2 3 4 5 >>4:-1:-4 ans = 4 3 2 1 0 -1 -2 -3 -4 >>x=0:pi/3:2*pi x = 0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832 >>y=sin(x) y = 0 0.8660 0.8660 0.0000 -0.8660 -0.8660 -0.0000
Ispis n do m-tog člana vektora dobijamo na slijedeći način: >>x(2:4) ans = 1.0472 2.0944 3.1416 Ukoliko želimo vektor generisati po broju elemenata, a ne prema razmaku između susjednih elemenata, koristimo funkciju linspace:
>>s=linspace(0,10,3) s = 0 5 10
Strana 21
Transponovanje » A = [1 2 3; 4 5 6; 7 8 9]; » B = A’ B = 1 4 7 2 5 8 3 6 9 Već je rečeno da matrice sa jednim stupcem ili jedim retkom zovemo vektori. Vektori se u MATLAB unose na sljedeći način:
>>a=[2 5 6] (ili a=[2,5,6])
a=
2 5 6
>>b=[5;2;1]
b=
5 2 1 Uočiti šta dobijemo za a' i b'. >>a' ans= 2 5 6 >>b' ans= 5 2 1 Sabiranje » C = A + B C = 2 6 10 6 10 14 10 14 18
Strana 22
Sabiranje matrice i skalara
Prilikom sabiranja matrice sa skalarom, svaki element matrice se sabira sa datim skalarom. Sabiranje matrice sa skalarom je komutativno. » C = C – 2 C = 0 4 8 4 8 12 8 12 16 Sabiranje vektora sa skalarom: >>a+2
ans=
4 7 8 >>b-1 ans=
4 1 0 Množenje matrica Operator * obuhvata i množenje matrice i vektora, množenje dva vektora i množenje matrice ili vektora skalarom. Naredni primjeri ilustruju ove mogućnosti MATLAB-a.
» D = A * B D = 14 32 50 32 77 122 50 122 194
» x = [1 2 3]’;
» E = D*x E = 228 552 876
» y = [4 5 6];
» x*y ans = 4 5 6 8 10 12 12 15 18
Strana 23
» y*x ans = 32 » y*2 ans = 8 10 12 >>a*3
ans=
6 15 18
>>b*-2
ans= -10 -4 -2 Osnovne operacije nad dva vektora su moguće samo ukoliko su istog oblika:
>>a+b
??? Error using ==> plus
Matrix dimensions must agree.
>>a+b'
ans =
7 7 7
>>a'+b
ans =
7 7 7
Pored ovoga, MATLAB posjeduje operatore / i \ koji su namijenjeni za množenje matrice inverzijom druge matrice. Pri tome izraz A\B predstavlja množenje A-1*B, a izraz A/B predstavlja množenje A*B-1. Iz ovoga slijedi da se sistem linearnih jednačina Ax = b u MATLAB-u može relativno jednostavno riješiti, kao u sljedećem primjeru:
» A = [10 2 6; 1 10 9; 2 -7 -10]; » b = [28 7 -17]’; » x = A\b
x = 1.0000 -3.0000 4.0000
Strana 24
U slučaju da je matrica sistema singularna, ili bliska singularnoj, MATLAB će ispisati upozorenje:
» A = [1 2 3; 4 5 6; 7 8 9]; » b = [10 4 2]’; » x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.541976e-018 x = 1.0e+016 *
-1.8014 3.6029 -1.8014 Operacije sa elementima matrice ili vektora
Elementi dvije matrice ili vektora se mogu pomnožiti po principu “element sa elementom”, pomoću operatora .* . Pri tome dimenzije matrica ili vektora koji se množe moraju biti jednake. Slijedi primjer:
» x = [1 2 3]; » y = [4 5 6]; » x .* y ans = 4 10 18 Analogno prethodnom, postoje i operatori ./ i .\ , koji predstavljaju dijeljenje zdesna, odnosno slijeva. Sljedeći primjer ilustruje upotrebu ovih operatora:
» x ./ y ans = 0.2500 0.4000 0.5000
» x .\ y ans = 4.0000 2.5000 2.0000 Stepenovanje Ako je A kvadratna matrica i x cio broj, tada izraz A^x predstavlja x-ti matrični stepen od A. Ukoliko je x realan broj, tada je A^x = V*D.^x/V, gdje operator .^ predstavlja stepenovanje matrica element po element, V je matrica desnih sopstvenih vektora, a D dijagonalna matrica sopstvenih vrijednosti.
Strana 25
Slijedi primjer:
» A = [1 2 3; 4 5 6; 7 8 9] » A ^ 2 ans = 30 36 42 66 81 96 102 126 150 » A .^ 2 ans = 1 4 9 16 25 36 49 64 81 Osnovne operacije s matricama
>>A=[2 1;3 4]
A = 2 1 3 4
>>B=[ 2 3; 3 1/2]
B = 2.0000 3.0000 3.0000 0.5000
Sabiranje matrica + A+B
ans= 4.0000 4.0000
6.0000 4.5000
Oduzimanje matrica - A-B
ans= 0 -2.0000
0 3.5000
Množenje matrica * A*B
ans= 7.0000 6.5000
18.0000 11.0000
Desno dijeljenje matrica
/ A/B
ans= 0.2500 0.5000
1.3125 0.1250
Lijevo dijeljenje matrica
\ A\B
ans= 1.0000 2.3000
0 -1.6000
Potenciranje matrica ^ A^2
ans= 7 6
18 19
Strana 26
Transponovanje matrica
' A'
ans= 2 3
1 4
Množenje elemenata dviju matrica član po
član .* A.*B
ans= 4 3
9 2
Desno dijeljenje elemenata dviju matrica
član po član ./ A./B
ans= 1.0000 0.3333
1.0000 8.0000
Lijevo dijeljenje elemenata dviju matrica
član po član .\ A.\B
ans= 1.0000 3.0000
1.0000 0.1250
Potenciranje elemenata dviju matrica član po
član .^ A.^B
ans= 4 1
27 2
Posebne matrice
Jediničnu matricu stvaramo naredbom eye:
>>eye(3)
ans = 1 0 0 0 1 0 0 0 1 Nul-matricu generišemo naredbom zeros:
>>zeros(3)
ans = 0 0 0 0 0 0 0 0 0
Matricu punu jedinica stvaramo naredbom ones:
>>ones(3)
ans = 1 1 1 1 1 1 1 1 1
Strana 27
Slučajnu matricu generišemo pomoću funkcije rand:
>>A=fix(rand(3)*10)
A = 6 0 7 3 4 7 9 3 1 Osnovne matrične funkcije diag(A) – vraća vektor čiji su elementi dijagonalni elementi matrice A
>>diag(A)
ans = 6 4 1 Provjeriti šta je diag(diag(A)). rank(A) – računa rang matrice A >>rank(A) ans = 3 sum(A) – vraća vektor čiji su elementi sume stubaca matrice A
>>sum(A)
ans = 18 7 15 prod(A) - vraća vektor čiji su elementi umnošci elemenata stubaca matrice A
>> prod(A)
ans = 162 0 49 det(A) – računa determinatu matrice:
>> det(A)
ans = -291
Strana 28
inv(A) – računa inverznu matricu matrice A
>> inv(A)
ans = 0.0584 -0.0722 0.0962 -0.2062 0.1959 0.0722 0.0928 0.0619 -0.0825 Stapanje matrica
Često je potrebno iz manjih matrica napraviti veće. Npr., iz matrica želimo dobiti matricu. >>A=[1 3;2 4] A = 1 3 2 4
>>B=[0;5] B = 0 5
>>C=[A B] C = 1 3 0 2 4 5
U sljedećem PRIMJERU možemo uočiti razliku između A./B i A.\B
>> A=[1 2 3;4 5 6;7 8 9]; >> B=A'; >> A./B ans = 1.0000 0.5000 0.4286 2.0000 1.0000 0.7500 2.3333 1.3333 1.0000 >> A.\B ans = 1.0000 2.0000 2.3333 0.5000 1.0000 1.3333 0.4286 0.7500 1.0000
Napomena: Izraz X=A\B (X= 1A B) predstavlja rješenje jednačine AX=B, a izraz X=A/B (X=B 1A ) predstavlja rješenje jednačine XA=B.
PRIMJER 25: Riješiti matričnu jednačinu AX=B, gdje su date matrice
654
132
321
A i
2
2
1
B .
Strana 29
(Uputstvo: 1AX B X A B )
>> A ; B ; X=inv(A)*B
X = 0.1852 -0.3704 0.5185
ili
>> X=A\B X = 0.1852 -0.3704 0.5185
PRIMJER 26:
Podijeliti matricu A skalarom 2, slijeva i zdesna.
>> A\2 ??? Error using ==> mldivide Matrix dimensions must agree. >> A/2 ans = 0.5000 1.0000 1.5000 1.0000 -1.5000 0.5000 -2.0000 -2.5000 -3.0000
4. Ugrađene funkcije
f-ja objašnjenje
sin sinus
cos kosinus
tan tangens
asin arkus sinus
acos arkus kosinus
atan arkus tangens
sinh hiperbolni sinus
cosh hipebolni kosinus
tanh hiperbolni tangens
asinh area sinus hiperbolni
acosh area kosinus hiperbolni
atanh area tangens hiperbolni
Strana 30
abs apsolutna vrijednost
sqrt kvadratni korijen
real realni dio kompleksnog broja
imag imaginarni dio kompleksnog broja
conj kompleksno konjugiranje
exp exponencijalna funkcija (baza e)
log logaritamska funkcija (baza e)
log10 dekadski logaritam
U ovom dijelu biće prikazane neke od najčešće korišćenih ugrađenih funkcija MATLAB-a. Za svaku od funkcija koje su na raspolaganju u MATLAB-u moguće je dobiti kratak opis komandom: » help ime_funkcije all(X) Rezultat funkcije all je jednak 1, ako su svi elementi vektora X različiti od nule; u suprotnom, rezultat je 0. Ako je X matrica, rezultat je vektor vrsta čiji su elementi rezultati funkcije za svaku kolonu matrice posebno.
» X= [1 2 -3 0; 4 0 -8 0]; » all(X) ans = 1 0 1 0 any(X) Rezultat funkcije any je jednak 1 ako postoji bar jedan element vektora X koji je različit od nule; u suprotnom, rezultat je 0. Ukoliko je X matrica, rezultat je vektor vrsta čiji elementi su rezultati funkcije za svaku kolonu matrice posebno.
» any(X) ans = 1 1 1 0 sin(X) Vraća matricu čiji su elementi vrijednosti sinusa odgovarajućih elemenata matrice X. Funkcija očekuje vrijednosti za veličinu ugla u radijanima. exp(X) Vraća matricu čiji su elementi vrijednosti funkcije exp za odgovarajuće elemente matrice X. » x = (0:0.2:1)’; » y = sin(x) .* exp(-x); » [x y] ans = 0 0 0.2000 0.1627 0.4000 0.2610
Strana 31
0.6000 0.3099 0.8000 0.3223 1.0000 0.3096 max(X) Vraća vektor koji sadrži maksimalne elemente po kolonama matrice X. mean(X) Vraća vektor koji sadrži aritmetičke sredine elemenata u odgovarajućim kolonama. size(X) Vraća dimenzije argumenta u obliku vektora. » A = [1 2 3; 4 5 6; 7 8 9];
» max(A) ans = 7 8 9
» mean(A) ans = 4 5 6
» size(A) ans = 3 3 ones(m,n) Vraća matricu dimenzije m x n čiji su elementi jedinice. zeros(m,n) Vraća matricu dimenzije mxn čiji su elementi nule. sort(X) Rezultat je matrica dobijena sortiranjem kolona matrice X u rastućem redoslijedu. inv(X) Vraća inverznu matricu kvadratne matrice X. det(X) Vraća determinantu matrice X. rank(X) Rezultat funkcije je rang matrice X. cond(X) Vraća kondicioni broj matrice X. norm(X) Vraća normu matrice X.
Strana 32
eig(X) Izraz eig(X) predstavlja vektor čiji su elementi karakteristične vrijednosti matrice X. Ukoliko se funkcija pozove sljedećim izrazom: » [V, D] = eig(X); tada je D dijagonalna matrica sa karakterističnim vrijednostima matrice X, a V je matrica čije su kolone odgovarajući desni karakteristični vektori. poly(X) Ako je X kvadratna matrica dimenzije n, tada je poly(X) vektor sa n+1 elementom koji predstavljaju koeficijente karakterističnog polinoma matrice X. Ukoliko je X vektor, tada je poly(X) vektor čiji su elementi koeficijenti polinoma koji za svoje korijene ima elemente vektora X. roots(X) Rezultat funkcije je vektor čiji su elementi korijeni polinoma datog koeficijentima u vektoru X. Funkcije zaokruživanja MATLAB posjeduje 4 funkcije za zaokruživanje realnih brojeva (round, fix, floor, ceil). round - zaokružuje broj prema najbližem cjelobrojnom
fix - zaokružuje broj prema nuli
floor - zaokružuje broj prema -µ
ceil - zaokružuje broj prema +µ >>x=-pi:pi/4:pi x = Columns 1 through 7
-3.1416 -2.3562 -1.5708 -0.7854 0 0.7854 1.5708
Columns 8 through 9
2.3562 3.1416 >>round(x)
ans =
-3 -2 -2 -1 0 1 2 2 3
>>fix(x) ans =
Strana 33
-3 -2 -1 0 0 0 1 2 3 >>floor(x) ans = -4 -3 -2 -1 0 0 1 2 3 >>ceil(x) ans = -3 -2 -1 0 0 1 2 3 4
Funkcija sign vraća predznak argumenta: >>sign(x) ans = -1 -1 -1 -1 0 1 1 1 1 Zadatak za vježbu
Na osnovu gornjih primjera: Pomoću naredbe "linspace" formirajte niz od 100 vrijednosti ravnomjerno
raspoređenih između brojeva 250 i 380. Na zadani niz vrijednosti primijenite naučene funkcije za zaokruživanje
Strana 34
5. Grafika 5.1. 2D grafika Osnovna naredba dvodimenzionalne grafike u MATLAB-u je plot. Ukoliko želimo nacrtati graf funkcije f(x)=2sin(pi*x)cos(pi/2+pi*x) na intervalu [–1,1] koristeći ukupno 100 tačaka, radimo na sljedeći način:
1. Odaberemo uzorke na x - osi >>x=linspace(-1,1,100);
2. za svaki uzorak sa x osi izračunamo vrijednost funkcije y >>y=2*sin(pi*x).*cos(pi/2+pi*x);
3. pozivom naredbe plot kreiramo graf koji se iscrtava na način da se sparuju tačke iz x i y matrica, te se iscrtavaju u koordinantnom sistemu >>plot(x,y)
Ime grafa, te oznake x i y osi dodaju se na sljedeći način: >>title('Graf') >>xlabel('x os') >>ylabel('y os') Dodavanje mreže na sliku izvodi fja grid. >>grid
Strana 35
Mrežu uklanjamo sa grid ili grid off. Mijenjanje boje linije kojom je graf nacrtan izvodimo trećim parametrom funkcije plot.
>>plot(x,y,'r+')
Strana 36
gdje treći parametar može imati sljedeće vrijednosti:
BOJE LINIJE
y yellow .
m magenta o
c cyan x
r red +
g green -
b blue :
w white -.
k black --
Na isti crtež može se prikazati i više grafikona. Npr.: >>plot(x,y,'k', x,y/2,'g'); Uključimo još prikaz legende: >>legend('Funkcija','Pola funkcije');
Poziv funkcije plot prebriše sadržaj postojećeg crteža. Naredba hold omogućava da svi daljnji pozivi funkciji plot crtaju grafikone na istom crtežu. Isključuje se sa hold off.
Strana 37
Za brisanje crteža koristimo clg (ili clf).
Za povećavanje prikaza koristimo naredbu zoom. Klikom na sliku povećavamo željeni dio. Zoom out vraća prikaz na standardnu veličinu.
Mijenjanje područja x i y ose vrši f-ja axis u obliku axis([xmin xmax ymin ymax]). Npr:
>>axis ([-2 2 -1 1])
PRIMJER 1: Nacrtati vektor (1,2,4,8,16)x .
>> x=[1,2,4,8,16];plot(x)
1 1.5 2 2.5 3 3.5 4 4.5 50
2
4
6
8
10
12
14
16
Strana 38
Iz ovog PRIMJERA možemo vidjeti da je MATLAB za vrijednosti nezavisno promjenljive x uzeo redni broj elementa, a njihove slike su vrijednosti vektora x , tj. tačke nacrtanog grafika imaju koordinate 1,1 , 2, 2 , 3,4 , 4,6 ....
U opštem slučaju naredba plot(x) crta grafik spajajući tačke (i, x(i)), i=1, 2, 3,…, N, gde je N dužina vektora.
Nezavisno promjenljiva može biti zadata posebno. U tom slučaju se koristi naredba plot(x,y).
PRIMJER 2: Nacrtati vektor zadat koordinatama (1,2,4,8,16)x i ( 1,2, 4,8,16)y .
>> x=[1,2,4,8,16]; y=[-1,2,-4,8,16]; plot(x,y)
0 2 4 6 8 10 12 14 16-4
-2
0
2
4
6
8
10
12
14
16
Naredba plot se koristi i za crtanje funkcija jedne promjenljive.
PRIMJER 3:
Nacrtati funkciju 2 xy e u domenu 1,1x sa korakom 0.1 .
>> x=-1:0.1:1; y=2*exp(x); plot(x,y)
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
Strana 39
PRIMJER 4: U istom koordinatnom sistemu nacrtati funkcije xy 2 i 2 xy e , u domenu
1,1x sa korakom 0.1
>> x=-1:0.1:1; y1=2*x ;y2=2*exp(x); plot(x,y1,x,y2)
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-2
-1
0
1
2
3
4
5
6
PRIMJER 5:
U prethodnom PRIMJERU uvedimo oznake za vrstu i boju linije.
>> x=-1:0.1:1;y1=2*x; y2=2*exp(x); >> plot(x,y2,'g',x,y1,'m+')
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-2
-1
0
1
2
3
4
5
6
Za crtanje grafika funkcija možemo da koristimo naredbu fplot(f,xmin,xmax). Funkcija koju crtamo ima oblik f x , gde je x vektor čiji je prvi element
xmin, a poslednji element xmax. U naredbi fplot funkcija se piše pod navodnicima ' f '.
Strana 40
PRIMJER 6:
Nacrtati funkciju 92 xy u domenu 3,3x .
>> y='x^2-9'; fplot(y,[-3,3])
-3 -2 -1 0 1 2 3-9
-8
-7
-6
-5
-4
-3
-2
-1
0
5.2. Označavanje grafika i osa
MATLAB nudi mogućnosti označavanja osa, pisanja različitog teksta i razne
druge mogućnosti.
Oznaka Opistitle naziv grafika xlabel naziv x ose ylabel naziv y ose text naziv teksta na grafiku gtext tekst na poziciji označenoj mišem grid crtanje linija mreže
Tekst u prethodnim naredbama piše se u zagradi pod navodnicima. Naredba
hold on zadržava sliku na ekranu. Suprotna njoj je naredba hold off . U naredbi gtext korisnik naknadno sam određuje mišem mjesto na koje želi da smjesti tekst. PRIMJER 9:
Nacrtati funkciju siny x na domenu 2 , 2x i korišenjem naredbi iz
tabele obilježiti sliku.
>> y='sin(x)';fplot(y,[-2*pi,2*pi]) >> hold on >> grid >> title('sinusna funkcija') >> xlabel('x osa') >> ylabel('y osa') >> gtext('max')
Strana 41
-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
1sinusna funkcija
x osa
y os
a
max
Naredba subplot(m, n, p) formira više grafika na ekranu. Ekran se dijeli na m n dijelova, a grafik se crta u p -tom dijelu ekrana.
PRIMJER 11: Korišćenjem naredbe subplot, nacrtati funkcije: 1,1y x x ,
0,1xy xe x , 2 2, 2y x x , cos ,y x x .
>> x1=-1:1:1; y1=x1; >> x2=0:0.5:1; y2=x2.*exp(x2); >> x3=-2:.1:2; y3=x3.^2; >> x4=-pi:pi/16:pi; y4=cos(x4); >> subplot(2,2,1),plot(x1,y1) >> subplot(2,2,2),plot(x2,y2) >> subplot(2,2,3),plot(x3,y3) >> subplot(2,2,4),plot(x4,y4)
-4 -2 0 2 4-1
-0.5
0
0.5
1
-1 -0.5 0 0.5 1-1
-0.5
0
0.5
1
0 0.5 10
1
2
3
-2 -1 0 1 20
1
2
3
4
Strana 42
Skaliranje osa Ose x i y automatski se postavljaju na osnovu minimalne i maksimalne
vrijednosti koordinata. Oznaka Opis
axis('equal') Provjerava se da li je priraštaj po osama isti
axis(xmin,xmax,ymin,ymax) Zadaju se granice u kojima će biti nacrtan grafik
axis('normal') Vraćanje na prvobitne dimenzije grafika
axis('axis') Vraćanje na prvobitno skaliranje
axis Dobija se informacija o trenutnim dimenzijama
PRIMJER 12:
Nacrtati funkciju siny x za -2 2x , a zatim postaviti da opseg po x
osi bude - x , a po y osi bude 2, 2 .
>> x=-2*pi:pi/16:2*pi; y=sin(x);plot(x,y),grid
-8 -6 -4 -2 0 2 4 6 8-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
>> axis([-pi,pi,-2,2])
-3 -2 -1 0 1 2 3-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Strana 43
VJEŽBA:
1. Nacrtati funkcije siny x i cosy x u opsegu od 0,2 .
2. Nacrtati krug sa centrom u tački (2,2) i poluprečnikom 4.
3. Nacrtati funkciju 2 5 6y x x u proizvoljnom opsegu i opisati je tekstom.
4. Korišćenjem naredbe subplot, nacrtati funkcije , 1,6ny x n .
5.3. Specijalni oblici 2D grafičkih prikaza Prikazaćemo i dvije specijalne grafičke naredbe za 2D prikaz. Prvi primjer prikazuje funkcije dvije varijable kao konturni dijagram (naredba contour), što je zapravo prikaz izo-linija matrice Z. Funkcija dvije varijable Z u ovom primjeru generisana je demo naredbom peaks. [X,Y,Z] = peaks; contour(X,Y,Z,25) axis([-2 2 -2 2])
Na narednoj slici je prikazan konturni dijagram funkcije dvije varijable.
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Sl. Konturni dijagram funkcije dvije varijable
Strana 44
Drugi primjer prikazuje vektor u tačkama 2D prostora. Naredbom quiver(X,Y,U,V) u svakoj x-y koordinati (matrice X i Y) definisan je vektor sa svojim x i y koordinatama (matrice U i V). [U,V] = gradient(Z,.25); hold on quiver(X,Y,U,V)
Na narednoj slici prikazan je istovremeno konturni dijagram funkcije s dvije varijable s vektorskim prikazom gradijenta funkcije.
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
5.4. 3D grafika
Osnovna naredba koju koristimo za prikaz 3D grafike je plot3. >>t = 0:pi/50:10*pi; >>plot3(sin(t),cos(t),t) >>grid on >>axis square
Slika Konturni dijagram funkcije s dvije varijable s vektorskim prikazom gradijenta funkcije
Strana 45
Druga naredba koja se koristi za prikaz 3D slike je naredba "mesh(x,y,z)". Pri tom, x i y su vektori dimenzija n, odnosno m, a z je matrica dimenzija nxm. Ako izostavimo x i y, u tom će slučaju odgovarajućim vrijednostima na x, odnosno y osi biti pridružena odgovarajuća vrijednost matrice z. Konkretno: >>a=1:10; >>b=11:20; >>c=21:30; >>d=linspace(25,30,10); >>e=linspace(35,40,10); >>m=[a;b;c;d;e;e;d;c;b;a]; >>mesh(m) rezultira prikazom
Takođe je moguće oblike prikazati s ispunjenim površinama >>surf(m), što rezultira prikazom:
Strana 46
Zadatak za vježbu
Napisati naredbu u MATLAB-u koja računa traženu funkciju, a zatim nacrtati graf funkcije za zadane intervale varijable x sa korakom 0.01. 1. f(x)=(x+1).^(0.5) , x=[1,100] 2. f(x)=(x+1).^(1/3) , x=[1,100] 3. f(x)=sqrt(1./(4+x.^2)) , x=[1,10] 4. f(x)=sqrt(x.^2-2) , x=[1.5,10] 5. f(x)=(-(cos(x))./(3*((sin(x)).^3))+4/3*1./tan(x) , x=[1,3], x=[6,7], x=[10,20], x=[1,100]
Strana 47
6. Polinomi MATLAB-om je vrlo jednostavno pronaći nultačke polinoma, skicirati njegov graf ili odrediti vrijednost za proizvoljan argument. Ako želimo naći nultačke polinoma f(x)=3x4-2x3+x2-5x-7, skicirati njegov graf na području –10<x<10, te izračunati f(3+2i) pišemo: >>f=[3 -2 1 -5 -7] f = 3 -2 1 -5 -7 Funkcija roots traži nultačke polinoma: >>roots(f) ans = 1.6293 -0.0781 + 1.3303i -0.0781 - 1.3303i -0.8064 f(3+2i) lako izračunamo koristeći f-ju polyval: >>polyval(f,3+2*i) ans = -3.5600e+002 +2.7000e+002i Skiciranje polinoma u rasponu –10<x<10 vršimo na sljedeći način: >>x=-10:0.1:10; >>plot(x,polyval(f,x))
Strana 48
6.1. Numeričko rješavanje sistema linearnih jednačina MATLAB značajno olakšava rješavanje sistema linearnih jednačina. Npr. potrebno je riješiti ovakav sistem linearnih jednačina: 4x1+9x2+2x3+4x4+6x5=6 3x1+9x2+6x3+7x4+2x5=3 8x1+7x2+3x3+2x4+8x5=8 4x2+9x3+4x4+6x5=8 7x1+4x2+7x3+9x4+1x5=5 Koeficijente uz nepoznate unesemo u matricu A, dok članove s desne strane unesemo u vektor B. Račun se svodi na AX=B, što se formalno rješava jednostavnim dijeljenjem X=A\B. >>A=[4 9 2 4 6 3 9 6 7 2 8 7 3 2 8 0 4 9 4 6 7 4 7 9 1]; >>B=[6 3 8 8 5]' B = 6 3 8 8 5 >>X=A\B X = -0.0000 -0.4000 0 0.6000 1.2000 Dakle, vrijednosti nepoznatih su: x1=0 x2=-0.4 x3=0 x4=0.6 x5=1.2
Strana 49
PRIMJER 1: Odrediti nule polinoma 2 5 6 0x x .
>> p=[1 -5 6]; >> r=roots(p) r = 3.0000 2.0000
Sa druge strane, kada su poznata rješenja polinoma, pomoću naredbe poly mogu se odrediti koeficijenti polinoma, odnosno napisati polinom.
Naredba ima oblik p=poly (r), gdje je r vektor koji sadrži rješenja polinoma, a p vektor koji
sadrži koeficijente polinoma.
PRIMJER 2:
Odrediti polinom čija su rješenja 2x i 3x .
>> r=[2 3]; >> p=poly(r) p = 1 -5 6
Dakle, traženi polinom je 2 5 6x x .
6.1.1. Operacije sa polinomima Polinomi se sabiraju i oduzimaju tako što se saberu, odnosno oduzmu
koeficijenti polinoma (odgovarajućih monoma). PRIMJER 3:
Sabrati polinome 3 21 3 2 4 6p x x x x i 4 3 2
2 2 7 3 1p x x x x x .
>> p1=[3 -2 -4 6]; >> p2=[1 2 -7 -3 1]; >> p=[0 p1]+p2 p = 1 5 -9 -7 7
Kako polinomi nisu istog stepena, kraći vektor se mora dopuniti nulama da bi
bio iste veličine kao duži vektor.
Strana 50
Polinomi se množe pomoću naredbe conv.
Naredba ima oblik:
c=conv (a,b), gdje je c vektor koeficijenata polinoma rezultata, a a i b su
vektori koeficijenta polinoma koji se množe.
PRIMJER4: Pomnožiti polinome 1p i 2p .
>> c=conv(p1,p2) c = 3 4 -29 3 49 -32 -22 6
Dakle, rješenje je polinom 7 6 5 4 3 23 4 29 3 49 32 22 6x x x x x x x
Polinomi se dijele pomoću naredbe deconv.
Naredba ima oblik
[q,r]=deconv (a,b), gdje je q vektor koeficijenata polinoma količnika, r vektor
koeficijenata polinoma ostatka, a je vektor koeficijenta polinoma brojioca, b je
vektor koeficijenta polinoma imenioca.
PRIMJER 5: Podijeliti polinome 3 21 2 9 7 6p x x x x i 2 3p x x .
>> p1=[2 9 7 -6]; >> p2=[1 3]; >> [q r]=deconv(p1,p2) q = 2 3 -2 r = 0 0 0 0
Dobijamo da je količnik polinom 22 3 2x x , bez ostatka.
6.1.2. Rješavanje jednačina sa jednom promjenljivom Jednačina sa jednom promjenljivom ima oblik 0f x .
Za izračunavanje nula funkcije koristi se naredba fzero. Naredba ima oblik x=fzero('funkcija',x0) x je skalarna vrijednost Funkcija se unosi u obliku znakovnog niza ( string ). Funkcija se prethodno
može definisati u funkcijskom fajlu, a ime funkcije se zadaje u obliku znakovnog niza.
Strana 51
0x je vrijednost promjenjive x u blizini mjesta gde funkcija presijeca x osu.
0x može biti skalar čija je vrijednost bliska tački preseka funkcije sa x osom ili
vektor sa dva elementa čije su vrijednosti tačke na suprotnim stranama rješenja. Ako ima više rješenja, svako se izračunava za sebe.
Početno rješenje 0x se može odrediti grafičkim putem.
Funkcija fzero pronalazi samo rješenja u kojima funkcija presijeca x osu.
PRIMJER 6:
Naći rješenja jednačine 0.2xxe
Približna rješenja određujemo grafički.
>> fplot('x*exp(-x)-0.2',[0 8]);grid
Sa slike vidimo da su približna rješenja 0,7 i 2,8 .
>> x1=fzero('x*exp(-x)-0.2',0.7) x1 = 0.2592 >> x1=fzero('x*exp(-x)-0.2',2.8) x1 = 2.5426
Strana 52
6.1.3. Rješavanje sistema linearnih jednačina Ako je determinanta sistema od n linearnih algebarskih jednačina sa n
promjenljivih različita od nule, tada taj sistem ima jedinstveno rješenje dato formulom
, ( 0, 1,2,..., )jj
Dx D j n
D ,
gdje je D determinanta tog sistema, a jD determinanta dobijena tako što su u
D koeficijenti uz jx zamijenjeni, redom, slobodnim članovima jb .
Navedene formule su poznate Kramerove formule.
PRIMJER 7: Kreirati fajl Cramer za rješavanje sistema linearnih algebarskih jednačina
koristeći Kramerovo pravilo.
% Novi fajl pod imenom Cramer %Rjesavanje sistema AX=B Cramerovim pravilom function X=Cramer(A,B) [m,n]=size(A); if m ~= n, error('Matrica nije kvadratna'), end if det(A)==0, error('Matrica je singularna'), end for j=1:n, C=A; C(:,j)=B; X(j)=det(C)/det(A); end X=X';
PRIMJER 8:
Koristeći kreirani fajl Cramer, riješiti sistem jednačina
2 4 0
2 2 6
3 6 6
x y z
x y z
x y
>> A=[2 –4 –1 ; –1 2 2 ; 3 6 0]; >> B=[0 ; 6 ; 6]; >> Cramer(A , B) ans = 2 0 4
Strana 53
PRIMJER 9: Koristeći kreirani fajl Cramer riješiti sistem jednačina
2 3 1
3 2 1
6 3
x y z
x y z
x y z
.
>> A1=[–2 3 1;1 3 –2;1 –6 1] A1 = -2 3 1 1 3 -2 1 -6 1 >> B1=[1;1;3] B1 = 1 1 3 Cramer(A1,B1) ??? Error using ==> cramer Matrica je singularna
PRIMJER 10: Rješiti sistem jednačina matričnom metodom
2 3 1
3 2 1
6 3
x y z
x y z
x y z
.
>> A=[-2 3 1;1 3 -2;1 -6 -1] A = -2 3 1 1 3 -2 1 -6 -1 >> B=[1;1;3] B = 1 1 3 >> X=inv(A)*B X = -2.5000 -0.5000 -2.5000
Strana 54
PRIMJER 11: Riješiti sistem jednačina matričnom metodom i koristeći kreirani fajl Cramer.
Uporediti ovako dobijena rješenja.
2 3 11
3 5 2 19
2 3 14
x y z
x y z
x y z
>> M=[2, 3, 1 ; 3, 5, 2 ; 1, 2, 3]
M =
2 3 1
3 5 2
1 2 3
>> N=[11 ; 19 ; 14]
N =
11
19
14
>> X1=inv(M)*N
X1 =
1.0000
2.0000
3.0000
>> X2=Cramer(M,N)
X2 =
1
2
3
Zadaci 1) Naći nultačke polinoma, izračunati vrijednost za traženi x i skicirati polinom na zadanom intervalu: a. f(x)=2x2-4x-5, f(4+4i), [0,5] b. f(x)=3x3+2x2-x, f(-5), [-1000,1000] c. f(x)=5x4+x2+x+2, f(-1-i), [-1,1]
Strana 55
2) Riješiti sljedeće sisteme linearnih jednačina:
Sistem 1: Sistem 2:
3x1+2x2+8x3=5 8x1-3x3+5x4=2
x1+9x2+6x3=1 x2+7x4=3
x1-x2+3x3=2 4x1+12x2-2x3+2x4=-5
2x1-3x2+4x3=5
3) Odrediti koeficijente polinoma 1 2 3y x x x .
4) Riješiti jednačinu 4 22 1 0x x .
5) Riješiti jednačinu 2 5 2 0ax bx .
6) Riješiti sistem jednačina 22 2 1 0x x y i 2 1 0y x .
7) Riješiti sistem jednačina matričnom metodom i koristeći kreirani fajl Cramer.
Uporediti ovako dobijena rješenja.
2 3 9
3 2 4 11
2
x y z
x y z
x y z
.
Strana 56
7. Programiranje u MATLAB-u Iako je osnovni način rada MATLAB-a interaktivan rad, za rješavanje složenijih problema potrebno je napisati odgovarajuće MATLAB programe. MATLAB programi se smještaju u tekstualne ili binarne datoteke. Tekstualne datoteke (sa ekstenzijom .m) su zapravo ASCII datoteke sa tekstom programa. Binarne datoteke (sa ekstenzijom .mat) su datoteke zapisane u posebnom MATLAB-ovom formatu koji omogućuje razmjenu datoteka između različitih računarskih platformi. 7.1. MATLAB kao programski jezik Slično kao u FORTRAN-u i drugim programskim jezicima, MATLAB naredbe se izvršavaju onim redoslijedom kojim su napisane. Redoslijed izvršavanja naredbi se može promijeniti, ukoliko to zahtijeva algoritam rješenja nekog zadatka, korišćenjem funkcija za kontrolu toka programa. Kombinacijom ovih funkcija formiraju se programske konstrukcije poznate kao ciklusi. MATLAB karakterišu tri tipa ciklusa: if, for i while. Funkcija if u kombinaciji sa else i elseif omogućava konstruisanje više različitih formi if ciklusa. Tabela 2: Kontrola toka programa
Funkcija Opis break zaustavljanje izvršenja (for, while) else koristi se sa funkcijom if elseif koristi se sa funkcijom if end kraj petlje (for, while) error pokazivanje poruke o grešci for ponavljanje bloka naredbi definisani broj puta if označavanje uslovnog izvršenja naredbi return povratak na pozivnu funkciju while ponavljanje izvršavanja naredbi neodređen broj puta (sve dok...)
7.2. Kontrola toka MATLAB programa MATLAB ima više naredbi koje omogućavaju korisniku da upravlja tokom programa.
To su: if, for, while, else, break, error, while...
Posebno će se prikazati tri uobičajene strukture za kontrolu toka programa: for, if i while. Naredba for ima sljedeći opšti oblik: for brojac = vektor naredbe … end
Strana 57
pri čemu vektor može biti bilo koji vektor definisan u MATLAB-u. Promjenljiva brojac će u svakoj iteraciji petlje kao vrijednost primati odgovarajući element vektora. Naredba if ima sljedeći opšti oblik:
Naredba if se koristi za uslovno izvršavanje programa.
Oblik if naredbe je: if izraz naredbe end
ili if izraz naredba 1 else naredba 2 end
ili if izraz 1 naredba 1 elseif izraz 2 naredba 2 else naredba 3 end
gdje su izraz 1,izraz 2,... logički izrazi.
Ako uslovni izraz u iskazu ima vrijednost tačno - true (1), program izvršava komande koje neposredno slede sve do komande end. Ako je uslovni izraz netačan – false (0 ) , program preskače grupu komandi između if i end i nastavlja da izvršava komande iza end.
Vrijednost nezavisno promjenljive može da se unese i korišćenjem naredbe input(‘tekst’).
x=input ('unesi promenljivu x=');
y=input ('unesi promenljivu y=');
Za ispisivanje izlaznih rezultata koristi se naredba disp(‘tekst’).
PRIMJER 1: Unijeti godine starosti, i ako je broj godina manji od 21, na izlazu ispisati 'zabranjen alkohol', a u suprotnom izaći iz programa.
Strana 58
start
Unesi godine
Ako sugodine
manje od21
Nema alkohola
крај
Formirati m-file: ab % primjer jednograne if naredbe function y=ab godine=input('god='); if godine <21 disp('zabranjen alkohol'); end
PRIMJER 2: Unijeti godine starosti, i ako je broj godina manji od 21, ispisati na izlazu 'zabranjen alkohol', a u suprotnom ispisati 'dozvoljen alkohol'.
Formirati m-file: ab2 % primjer dvograne if naredbe function y=ab2 godine =input ('godine su:'); if godine <21 disp( 'zabranjen alkohol' ) else disp( 'dozvoljen alkohol' ) end
Strana 59
PRIMJER 3: Za unaprijed zadatu vrijednost promjenljive x izračunati vrijednost izraza y , tako da, ako je 2x , slijedi da je 2y x , za 2x je 2y , inače je
2y x . x=input('x=')
if x<2
y=-2*x;
else if x==2
y=2;
else y=2*x;
end
end
disp('y=')
disp(y)
Napomena: Treba obratiti pažnju da se u izrazu x= =2 koristi oznaka = = , a ne =, zato što se u ovom izrazu koristi logički operator za upoređivanje veličina. PRIMJER 4: Za unijeta dva broja ispisati veći?
broj1=input('prvi broj ');
broj2=input('drugi broj ');
if(broj1>=broj2) disp(broj2);
else disp(broj2);
end
PRIMJER 5: Za unijeta tri broja ispisati najveći:
broj1=input('prvi broj ');
broj2=input('drugi broj ');
broj3=input('treći broj ');
if(broj1>=broj2)
if(broj1>=broj3) disp(broj1);
end
else if (broj2>=broj3) disp(broj2);
else disp(broj3);
end
end
Strana 60
PRIMJER 6: Za unijeti broj n ispisati da li je on paran ili neparan.
a=input('unesi a:');
if rem(a,2)==0
disp(‘broj je paran’)
else
disp('broj je neparan’)
end
PRIMJER 7: Formirati script u kome su dva vektora-vrste X i Y, sa po pet elemenata. Odrediti skalarni proizvod tih vektora: S = XY' i u zavisnosti od vrijednosti S definisati promjenljivu P prema formulama: P= 1 za S>0 ; P= 0 za S=0 ;P=-1 za S<0;
X=input('vektor X:');
Y=input('vektor Y:');
S=X*Y’
disp('skalarni proizvod:')
disp(S)
if S>0
P=1
else if S==0
P=0
else
P=-l
end
end
Strana 61
PRIMJER 8: Formirati MATLAB skript u kome će biti obavljene sljedeće operacije: (l) Unošenje preko tastature: rednog broja mjeseca i indikatora 1 ako je godina prestupna ili indikatora 0 ako nije. (2) Određivanje broja dana u datom mjesecu. (3) Prikazati rezultat na ekranu. Predvidjeti prikaz teksta 'podaci su neispravni’, ako su podaci koji su zadati pogrešni (tj. ako je redni broj mjeseca pogrešno zadat).
mjesec=input('unesi mjesec:’);
godina=input('unesi indikator za prestupnu godinu:');
switch mjesec
case{l,3,5,7,8,10,12}
dani=31
case{4,6,9,11}
dani=30
case 2
if godina
dani=29
else
dani=28
end
otherwise
disp(‘podaci su neispravni’)
disp (mjesec)
disp (godina)
end
For petlja omogućava ponavljanje dijela programa zadati broj puta. Završava se komandom end.
Oblik petlje:
for promjenljiva=izraz naredbe end
Strana 62
PRIMJER 9: Za sve vrijednosti promjenljive 1, 2,3,4,5x izračunati vrijednost
funkcije sin 2y x .
for x=1:5
y (x)=sin(2*x);
end
PRIMJER 10: Napisati program koji računa matricu A čiji se elementi izračunavaju
po zakonu 1,
2 2a i j
i j
, a koja ima 4 vrste i 3 kolone.
for i=1:4
for j=1:3
A(i,j)=1/(2*i+j-2);
end
end
A
U ovom PRIMJERU korišćena je dupla for petlja.
PRIMJER 11: Napisati program koji računa sumu svih brojeva do unijetog broja? function y=unos x=input(‘Unesi broj ’); s=0; for i=1:x s=s+i; end disp ('Suma do unesenog broja ='); disp(s);
NAPOMENA: Ako se iza izraza s=s+i izostavi znak ; biće vidljiva promjena sume s.
Strana 63
PRIMJER 12: Napisati program koji računa 20. član fibonačijevog niza.
function fibo=niz(pr1)
pr=0;
pr1=1;
for i=1:18
s=pr+pr1;
pr=pr1;
pr1=s;
end
disp ('20-ti clan fibonaci-jevog niza je:')
disp(s); PRIMJER 13: Ako je potrebno ispisati sve neparne brojeve Fibonači-jevog niza
manje od 300:
function fibo=niz(pr1) pr=0; pr1=1; for i=1:18 s=pr+pr1; pr=pr1; pr1=s; if (s<300 & rem(s,2)~=0) s end end
Naredba while ima sljedeći opšti oblik: while izraz naredbe end gdje je izraz logički izraz. PRIMJER 1: Izračunavati vrijednosti promjenljive x , po zakonu 2x x , dok god je
15x . x=1;
while x <=15
Strana 64
x=2*x;
end
disp(x);
Dio programa između while i end izvršava se sve dok je izraz koji slijedi posle while
istinit.
PRIMJER 2: Izračunati zbir reda
21
1 1 1 11
4 9 16
n
n
sn
sa tačnošću
410 . s=0;
n=1;
while abs((-1)^n/n^2)>10^(-4)
s=s+(-1)^n/n^2;
n=n+1;
end
disp(s);
PRIMJER 3: Napisati kôd koji za unijeti broj n ispisuje da li je on prost ili nije?
n=input('Unesi broj n= ');
brojac=0;
for i=2:n-1
if(rem(n,i)==0)brojac=brojac+1;
end
end
if(brojac==0)disp('Broj je prost ');
else disp('Broj nije prost ');
end
PRIMJER 4: Napisati kôd koji za unijeti broj n ispisuje sve brojeve do n koji su djeljivi sa 2 ili sa 3?
n=input('broj n= ');
for i=1:n;
if(rem(i,2)==0 | rem(i,3)==0) disp(i);
end
end
Strana 65
PRIMJER 5: Napisati kôd koji za unijeti broj n ispisuje proste činioce tog broja. Primjer broj 36 ima proste činioce 2,2,3,3.
function zaok=yy n=input('broj n= '); i=2; while n>1 if rem(n,i)==0 n=fix(n/i); disp(i); else i=i+1; end end
PRIMJER 6: Napisati kôd koji unosi niz brojeva a(n) i zatim ga sortirati u opadajući.
function niz=zzz
n=input('broj n= ');
for i=1:n
a(i)=input(' ');
end
for i=1:n-1
for j=i+1:n
if(a(j)>a(i))
c=a(i);
a(i)=a(j);
a(j)=c;
end
end
end
disp(a);
PRIMJER 7: Napisati kôd koji unosi niz brojeva a(n) i izdvaja one koji su parni i smješta u novi niz b.
function par=parni
n=input('broj n= ');
for i=1:n
a(i)=input(' ');
end
c=1;
for i=1:n
{Omogućuje unos “element po element” (nakon unosa prvog elementa pritisne se Enter, pa se unosi drugi element, ...)}
Strana 66
if rem(a(i),2)==0
b(c)=a(i);
c=c+1;
end
end
disp(b);
PRIMJER 8: Dati su realni brojevi a i ε, kao i broj x u dvostrukoj tačnosti (|x| < l).
Približno odrediti vrijednost f koja je data sljedećom formulom:
...!3!2!1
1 33221 xa
xa
xa
f gdje su:
),...21
)(11
(1
),11
(1
,1
321
aaa Vrijednost f odrediti u dvostrukoj
tačnosti. Proračun prekinuti kada posljednji član reda bude po apsolutnoj vrijednosti
manji od broja ε. Na izlazu prikazati date podatke i dobivenu vrijednost f. Program
izvršiti sa sljedećim podacima: α=3., x=0.2, ε=1.10-5
alfa=input('alfa=');
x=input('x=');
eps=input('epsilon:');
c=l.;
f=l.;
a=l/alfa;
i=1.;
fk=1.;
while abs(c)>=eps
fk=fk*i;
c=a*x^i/fk;
f=f+c;
a=a*(l/alfa-i);
i=i+1;
end
alfa
eps
x
f
i
Strana 67
8. Vrste MATLAB datoteka MATLAB aplikacija se sastoji od M i MAT datoteka. MAT datoteke sadrže binarne podatke i u imenu imaju nastavak mat. M datoteke su ASCII datoteke koje sadrže običan tekst i u imenu imaju nastavak m. Oba tipa datoteka se mogu prenositi između različitih računarskih sistema i arhitektura. M datoteke se mogu prenositi između različitih računara zato što sadrže mašinsku signaturu u zaglavlju datoteke. Kada se datoteka pozove, MATLAB provjerava signaturu, i ako ona označava da se radi o stranoj datoteci, izvodi neophodnu konverziju. Prenošenje datoteka između različitih mašinskih arhitektura omogućavaju komunikacijski programi. MAT datoteke omogućuju prenošenje podataka između različitih platformi, kao i prebacivanje MATLAB podataka u druge aplikacije i obrnuto. Direktorijum matlab\extern sadrži funkcije koje omogućavaju učitavanje i ispisivanje MAT datoteka korišćenjem programa napisanih u FORTRAN-u ili C-u, čime se pojednostavljuje korišćenje MAT datoteka u drugim aplikacijama. Treća vrsta datoteka koja je posebno značajna sa stanovišta proširenja opsega mogućnosti MATLAB-a su MEX datoteke pod kojima se podrazumijevaju C i FORTRAN programi koji se mogu pozvati iz MATLAB-a. Ponašaju se isto kao M datoteke ili ugrađene funkcije, tako da ih MATLAB može automatski pozvati i izvršiti. MEX datoteke su zapravo dinamički povezani potprogrami napisani u C ili FORTRAN izvornom kodu. MATLAB za Windows podržava dva formata MEX datoteka: REX i DLL format. MEX datoteke imaju nastavak .mex za REX format i .dll za DLL format. Ukoliko u jednom direktoriju postoje datoteke sa istim imenom koje imaju nastavke .m, .mex i .dll, prednost imaju .mex nad .dll, odnosno .dll nad .m. M-datoteke M-datoteka se formira tekst-editorom i smješta u odgovarajući direktorijum. Program koji se nalazi u M-datoteci poziva se navođenjem imena datoteke u komandnoj liniji MATLAB-a. MATLAB će datoteku potražiti u svom tekućem direktorijumu i u direktorijumima koji su navedeni kao matlabpath u okviru konfiguracione datoteke matlabrc.m. Podrazumijevani tekući direktorijum MATLAB-a je direktorijum u kome se nalazi datoteka matlab.exe (najčešće je to \matlab\bin). Tekući direktorijum se može promijeniti komandom cd, koja ima sintaksu identičnu odgovarajućoj DOS komandi. Postoje dvije vrste M-datoteka: komandne (skript) i funkcijske. Komandna datoteka sadrži niz MATLAB izraza i komandi. U toku izvršavanja skripta sve prethodno definisane promjenljive su vidljive i imaju odgovarajuće vrijednosti. Promjenljive koje su definisane u okviru skripta vidljive su i nakon izvršavanja skripta. Funkcijske datoteke su namijenjene za definisanje novih funkcija od strane korisnika. Nakon formiranja, funkcije definisane u odgovarajućim funkcijskim datotekama koriste se jednako kao i ugrađene funkcije MATLAB-a. Funkcijska M-datoteka mora da u prvoj liniji sadrži izraz sljedećeg oblika: function [y1, y2, …] = ime_funkcije (x1, x2, …)
Strana 68
gdje y1,y2,… predstavljaju rezultate izvršavanja funkcije, ime_funkcije je naziv MATLAB funkcije koja se definiše, a x1, x2,… su ulazni parametri funkcije. Promjenljive koje su definisane prije poziva funkcije nisu vidljive unutar same funkcije. Slično tome, promjenljive koje se definišu unutar funkcije nisu vidljive izvan nje. Ukoliko je potrebno da neke promjenljive budu vidljive i unutar funkcije, one moraju biti proglašene globalnim pomoću naredbe global. Naziv funkcije mora biti jednak nazivu datoteke u kojoj je smještena funkcija.
Korisničke funkcije je moguće definisati i u okviru REX ili DLL datoteka (u verziji MATLAB-a za Windows operativne sisteme).
Dodatni skupovi funkcija organizovani u toolbox-ove se, nakon instaliranja, nalaze u nekom od poddirektorijuma \matlab\toolbox direktorijuma. Da bi stalno bila vidljiva, promjenljivu matlabpath definisanu u matlabrc.m datoteci treba dopuniti odgovarajućim vrijednostima. Tu se nalaze primjeri M, MAT, REX, i DLL funkcijskih datoteka.
MATLAB posjeduje i skup komandi namijenjen debagiranju komandnih i funkcijskih datoteka.
Dosadašnju komunikaciju s MATLAB-om izvodili smo u prozoru programa gdje bi MATLAB odmah po upisivanju naredbi vraćao rezultat. Ovaj način zgodan je kada radimo nešto kratko i nešto što nije potrebno ponavljati, odnosno računati više puta. Osim ovakvog načina rada, MATLAB omogućava da mu se slijed naredbi zada u obliku tekstualne datoteke (tzv. m-file zbog ekstenzije .m). Pozivanje imena te datoteke u komandnom prozoru MATLAB-a pokreće izvršavanje slijeda naredbi pohranjenih u njoj. Npr., u nekom tekst editoru (Notepad ili MATLAB editor) napišemo sljedeće: clear A=fix(rand(3)*10) B=fix(rand(3)*10) Whos Datoteku snimimo pod imenom test.m. Ukoliko sada u MATLAB-u napišemo: >>test MATLAB će potražiti m-file sa navedenim imenom i izvršiti naredbe zapisane u njemu, što će rezultirati brisanjem svih postojećih varijabli (clear), stvaranjem dviju slučajnih matrica A i B, te ispisivanjem trenutnih varijabli sa prikazom potrošnje memorije svake varijable (whos). Imena m-datoteka ne smiju biti ista kao i imena standardnih naredbi ili funkcija, te se one moraju snimiti u neki od foldera koji MATLAB pregledava prilikom izvođenja (path).
A = 3 7 0 6 0 0 1 2 8
Strana 69
B = 6 0 7 3 4 7 9 3 1 Name Size Bytes Class Attributes
A 3x3 72 double B 3x3 72 double Funkcijski M-file, osim običnog izvođenja slijeda naredbi m-datoteke, mogu se programirati tako da izvršavaju neke funkcije. Npr., sljedeći m-file računa površinu trougla stranica a, b, c, po formuli: P=(s*(s-a)*(s-b)*(s-c))^0.5, s=(a+b+c)/2. function P=povrsina(a,b,c) s=(a+b+c)/2; P=sqrt(s*(s-a)*(s-b)*(s-c)); Ukoliko ovaj m-file snimimo pod imenom povrsina.m, pozivamo ga u MATLAB-u na sljedeći način: >> povrsina(3,4,5) ans = 6 ili ukoliko rezultat želimo pridružiti nekoj varijabli: » S=povrsina(3,4,5) S = 6 Naredbe input i disp % m- file izbor.m
r=input('izaberite \n a \n b ili \n c \n');
if r=='a'
disp('izabrali ste a');
elseif r=='b'
disp('izabrali ste b');
elseif r=='c'
disp('izabrali ste c');
else
Strana 70
disp('pogresan izbor');
end
>> izbor izaberite a b ili c 'b' izabrali ste b >> PRIMJER 1: Odrediti zbir kvadrata prvih deset prirodnih brojeva i sačuvati fajl pod imenom zbir.
s=0;
for i=1:10
s=s+i^2;
end
disp(s);
Svaki put kada nam je potreban ovaj rezultat, dovoljno je samo otkucati riječ zbir, pod kojom smo upamtili ovaj fajl.
Ovako sačuvani fajl je otvoren prema podacima koje smo unosili tokom rada, tako da može da se dogodi greška. Zato je bolje formirati funkcijske fajlove koji su zatvoreni sistemi i zaštićeni od nepoželjnih podataka.
Funkcijski fajl omogućava korisniku MATLAB-a da stvara nove funkcije. Funkcijski fajlovi moraju u prvoj liniji da sadrže naredbu oblika:
function [y1, y2,…] = ime funkcije (x1, x2,…) function ime funkcije (x1, x2,…) function [y1, y2,…] = ime funkcije
Ulazni argumenti su 1 2, ,x x , izlazni argumenti 1 2, ,y y su funkcije, koje
se dobijaju kada se funkcija pozove. Poslije ovoga izraza slijedi niz MATLAB komandi i izraza.
Strana 71
PRIMJER 2:
Formirati funkcijski fajl u kome se definiše nova funkcija sinxf x e x
pod imenom fi. % funkcijski fajl
% ime nove funkcije je fi
function y=fi(x)
y=exp(x)+sin(x);
Ako želimo da izračunamo vrijednost ove funkcije, dovoljno je da pozovemo
funkciju fi i definišemo vrijednost promjenljive, na PRIMJER 2
x
.
>> fi(pi/2) PRIMJER 3:
Formirati funkcijski fajl u kome se definiše nova funkcija sinxf x e x
pod imenom fa, a da se vrijednost nezavisno promjenljive unese korišćenjem naredbe input (‘tekst‘).
% ime nove funkcije je fa function y=fa x=input('unesi promjenljivu x=') y=exp(x)+sin(x);
Pozivanjem funkcije fa i odgovorom na postavljeno pitanje dobićemo odgovor:
>> fa unesi promjenljivu x=3 x = 3 ans = 20.2267
PRIMJER 4: Formirati funkcijski fajl pod imenom ime, kojim se određuje broj slova u nekom imenu.
% funkcijski fajl ime kojim se odredjuje broj slova u imenu
function n=br(x)
x=input('unesi svoje ime:','s');
% oznaka s u naredbi oznacava da se unose stringovi
n=length(x);
disp(['broj slova u imenu je',num2str(n)];
U naredbi disp, tekst je definisan kao dvodimenzioni vektor, čija je prva
komponenta znak (string), a druga koja je kao rezultat programa broj koji mora da se naredbom num2str prebaci u znak (string).
Strana 72
PRIMJER 5: Napisati program za računanje faktorijel broja. function f=fakt(x);
if(x==0)f=0;
else
f=1;
for i=1:x
f=f*i;
end
end
PRIMJER 6: Napisati program koji ispisuje trocifrene brojeve kojima je zbir faktorijela cifara jedanak tom broju. Zadatak uraditi pomo'u potprograma iz prethodnog zadatka.
for i=100:999 c1=fix(i/100); c2=fix((rem(i,100))/10); c3=rem(i,10); suma=fakt(c1)+fakt(c2)+fakt(c3); if(suma==i)disp(i); end end
Strana 73
9. Rješavanje integrala Pod numeričkom integracijom (koristi se i termin kvadratura) podrazumijeva se
aproksimacija određenog integrala:
b
a
dxxf )(
U MATLAB-u postoje dvije glavne funkcije za kvadraturu: quad i quad8, koje rade za konačne vrijednosti a i b i za slučaj da podintegralna funkcija f(x) nema singularitet u [a,b].
Funkcija quad se aktivira na sljedeći način:
q=quad(fun,a,b,tol)
gdje su: fun – tekstualni niz kojim se zadaje ime funkcijskog potprograma u kome se
određuje podintegralna funkcija a,b – granice intervala tol – apsolutna tolerancija greške, koja služi za definisanje željene tačnosti
rezultata. Ako se ne zada – program uzima vrijednost 0.001 Funkcija trapz
Koristi se za izračunavanje integrala pomoću trapeznog pravila.
z=trapz(x,y)
x, y su vektori iste dužine Određuje se trapeznim pravilom integral y s obzirom na x.
Moguće je zadati samo jedan argument, tj. vektor y:
z=trapz(y)
gdje se ordinate funkcije uzimaju na jediničnom odstojanju. PRIMJER 1:
Trapeznim pravilom za grubu podjelu intervala [0,2π] određen je integral
2
02
2
cos1
sindx
x
x
Dobijena vrijednost u ovom slučaju ima grešku reda veličine 10-7.
»x=linspace(0,2*pi,100); »y=sin(x).^2./sqrt(1+cos(x).^2); »trapz(x,y) ans
2.84783411343745
Strana 74
Funkcija dblquad Služi za proračun dvostrukog integrala, naredbom
r=dblquad(‘dfun’,umin,umax,smin,smax)
Određujemo dvostruki integral funkcije fun(u,s), gdje je u tzv. unutrašnja promjenljiva koja se mijenja od umin do umax, a s je spoljašnja promjenljiva koja se mijenja od smin do smax.
Prvi argument je tekstualni niz ili inline objekat kojim se zadaje podintegralna funkcija. Ta funkcija mora da bude funkcija od dvije promjenljive oblika: f=fun(u,s), gdje je u vektor, a s je skalar, dok je rezultat f vektor koji sadrži vrijednosti funkcije za dato s i za svaku od vrijednosti u vektoru u.
Naredba r=dblquad(‘dfun’,umin,umax,smin,smax) znači:
dsdusufunrs
s
u
u
max
min
max
min
),(
Funkciju dblquad je moguće aktivirati i sa više argumenata:
r=dblquad(‘dfun’,umin,umax,smin,smax, tol)
r=dblquad(‘dfun’,umin,umax,smin,smax,tol,metod)
tol - pokazatelj greške metod – ime funkcije koja se koristi za izračunavanje jednostrukog integrala
/quad ili quad8/
PRIMJER 2:
Određivanje numeričkim putem integrala:
dydxyxey x
6
4
1
0
2 cos
Formira se funkcijski potprogram za proračun podintegralne funkcije:
function izlaz=fxy(x,y)
izlaz=y^2*exp(x)+cos(y)*x;
Zatim se aktivira funkcija dblquad:
»dblquad(‘fxy’,0,1,4,6)
ans =
87.2983
Strana 75
10. Diferencijalne jednačine U MATLAB-u postoje funkcije kojima se rješavaju problemi početnih
vrijednosti i granični problemi. Problem početnih vrijednosti koji je n-tog reda definiše se diferencijalnom jednačinom:
),...)(),(),(,(*)( ...)(
tytytytfdt
tdy n
i početnim uslovima:
,...)(,)()(..
00
..
0
.
0
.
,00 ytyytyyty
Granični problem može da bude linearan i nelinearan. Npr. ako je data diferencijalna jednačina:
0)()()(2
2
xryxqdx
dyxp
dx
yd
zajedno sa uslovima na krajevima intervala [a,b]:
y(a) = α i y(b) = β,
onda je riječ o linearnom graničnom problemu, tj. u diferencijalnoj jednačini svi izvodi stepena su 1.
Za rješavanje početnih problema 1. reda u MATLAB-u postoji na raspolaganju nekoliko funkcija.
Obradićemo dvije: ode23 i ode45. Funkcija ode potiče od: ordinary differential eqations ode23 koristi metode
Runge-Kutta 2. i 3. reda.
Kako su metode višeg reda tačnije, ovdje se metod 3. reda koristi da bi se razlika po rješenjima dvije metode upotrijebila kao pokazatelj greške metode 2. reda
Funkcija ode45 je analogna po svemu sa funkcijom ode23, osim po tome što se u njoj primjenjuju metodi Runge-Kutta 4. i 5. reda.
Ako je pokazatelj greške izvan zadatih granica u potprogramu, onda se mijenja veličina koraka integracije i proračun se ponavlja. Redukovanje koraka i ponavljanje proračuna biće prekinuto ako bude prekoračen u programu prethodno definisani broj ponavljanja, s tim što će biti data poruka o mogućem postojanju singulariteta. PRIMJER 1 – Korišćenje funkcije ode45
Riješiti početni problem:
,1 tydt
dy1)0( y
za koji postoji egzaktno rješenje
tetty )(
Strana 76
koje ćemo upotrijebiti radi analize dobijenog numeričkog rješenja. Rješenje tražimo za vrijeme t koje ispunjava uslove 0 ≤ t ≤ 1.
NAPOMENA:
Način definisanja funkcije ode45. [t,y]=ode45(‘izvod’,interval, y0), gdje su: ‘izvod’ – tekstualni niz u kome stoji ime funkcije u kojoj se određuje izvod
tražene funkcije
Funkcija izvod(t,y) – t je vrijeme, a drugi argument je vrijednost funkcije y, određuje izvod za dato t
Interval - [t,y] – početno i krajnje vrijeme za određivanje funkcije y
y0 je početna vrijednost funkcije za t=tp
Da bismo dobili rješenja u željenim trenucima vremena (za pojedinačne trenutke vremena), drugi argument se zadaje na sljedeći način:
interval = [tp t1 t2 ... tk], gdje članovi niza moraju da čine rastući, odnosno opadajući niz vrijednosti.
Kod rješavanja navedenog problema prvo se formira funkcijski potprogram radi proračuna izvoda:
function dydt=izv(t,y)
dydt=-y+t+1;
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11
1.05
1.1
1.15
1.2
1.25
1.3
1.35
1.4
vrijeme u sec
y(t)
pocetni problem 1. reda
ans= 41 1 »ystv=t+exp(-t); »greska=abs(y-zstv); »greska ans= 1.0e-008 * ....
ans= 41 1
»y0=1; »[t,y]=ode45(‘izv’, [0,1],y0); »plot(t,y) »xlabel(‘vrijeme u sec’) »ylabel(‘y(t)’) »title(‘pocetni problem 1. reda’) »size(t)
Strana 77
11. Razni zadaci U nastavku je dat primjer jedne komandne M-datoteke: sistem.m A = [10 2 6; 1 10 9; 2 -7 -10]; b = [28 7 -17]’; x = A\b Datoteka sistem.m se iz MATLAB okruženja poziva na sljedeći način:
» sistem Tokom izvršavanja skripta će se u komandnom prozoru MATLAB-a ispisati:
x = 1.0000 -3.0000 4.0000 Zadatak br. 1: Nacrtajte graf funkcija sin(n*pi*x) na intervalu –1<=x<=1 (korak=0.05) za n=1 do 8. Svi grafovi moraju biti na jednom ekranu. >> x=-1:0.05:1 >>for n=1:8 subplot (4,2,n), plot(x, sin(n*pi*x)) end
Strana 78
Objašnjenje: Funkcija subplot(m,n,p) služi nam za "dijeljenje" ekrana na mxn dijelova, s tim da parametar "p" naznačava trenutno aktivni dio u kojem se crta naznačeni graf. Zadatak se može riješiti i korištenjem funkcije "hold on", tako da dobijemo 8 grafova na jednom koordinatnom sistemu preko čitavog ekrana >> x=-1:0.05:1 >>for n=1:8 plot(x, sin(n*pi*x)), hold on end
Zadatak br. 2: Generisanje matrice čiji su svi dijagonalni elementi jednaki 2, svi ostali elementi u prvoj vrsti jednaki 1, svi ostali elementi jednaki nuli. >> n=5; for i=1:n for j=1:n if i==j a(i,j)=2; elseif abs(i)==1 a(i,j)=1; else a(i,j)=0; end end end >> a a = 2 1 1 1 1 0 2 0 0 0
Strana 79
0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 Zadatak br. 3: Korišćenje funkcijske M datoteke koja služi za izračunavanje sljedećeg izraza, odnosno funkcije:
))5.1(5.1sin()5.1(1
2)(
2tarctgtty
Iz menija File komandnog prozora bira se komanda New, a zatim opcija M-file. Pri tome se otvara prozor programa za uređivanje teksta koji će poslužiti za formiranje komandne ili funkcijske M datoteke. U novootvorenom prozoru definiše se prethodna funkcija pomoću MATLAB promjenljivih i funkcija na sljedeći način: function y=dfun(t) y=2./sqrt(1+(t*1.5).^3).*sin(1.5*t+atan(-1.5*t)); Po definisanju funkcije, da bi se datoteka snimila, iz menija File prozora programa za uređivanje teksta bira se funkcija Save As. Otvara se dijalog koji omogućava čuvanje datoteke pod željenim nazivom (u primjeru je: dfun.m) u odabranom direktorijumu. Kada se u radnom prostoru promjenljivoj t dodijeli neka vrijednost i zatim pozove funkcija dfun, dobiće se odgovarajuća vrijednost funkcije. >>fplot('dfun', [0 30]) >>ylabel('dfun') >>xlabel('t')
Strana 80
Zadatak br. 4:
Nacrtati funkciju: 1
123 xxx
>> x=0.1:0.1:10; >> y=1./(x.^3+x.^2+x+1); >> loglog(x,y) >> grid
Zadatak br. 5: Za vektor x=[2 5 9] izračunati funkcije: a) xexy )1(
b) 1)122( xexz Zadatak br. 6: Formiran je .m file: dfun1 od f-je:
dxxxz )2( 33
1
2
function z=dfun1(x) z=x.^2-2*x.^3;
U komandnom prozoru: >> s=quad('dfun1',1,3)
s = -31.3333
Strana 81
Zadatak br. 7: Formiran je .m file: dfun1 od f-je:
dxxxz ))cos(2(3
1
2
U komandnom prozoru: s=quad('dfun2',1,3) s = 10.0674
Strana 82
12. Kreiranje grafičkog interfejsa Savremeni grafički korisnički interfejs (Graphical User Interface - GUI) omogućuju korisnicima izbor naredbi pomoću različitih kontrola poput dugmadi (buttons), polja za unos teksta (text fields), klizača (sliders), i izbornika (menus). Kontrole je potrebno dizajnirati na način da je korisniku jasno koja će akcija slijediti iz njegovog odabira. Osnovna uloga korisničkog interfejsa (engl. user interface) jeste olakšavanje komunikacije čovjeka i računara. Korišćenje grafičkog interfejsa omogućuje:
– Intuitivnost (korisnik pokreće aktivnosti u skladu sa poslovnim zahtjevima) – Interaktivnost (program korisniku omogućuje dovoljno informacija i
kontrole za pravovremene reakcije) – Estetika (dizajn korisničkog interfejsa omogućava opušteniji i prirodniji
dugotrajni rad u programu) Kreiranje grafičkog interfejsa u Matlab-u odvija se u tri koraka: 1. dizajniranje grafičkog interfejsa dodavanjem i razmještanjem kontrola 2. programiranje aktivnosti dodatih kontrola na GUI formular kojim se postiže zahtijevana akcija korisnika (kontrola služi da se prenese zahtjev korisnika za nekom akcijom) 3. pokretanje formulara grafičkog interfejsa. Dizajniranje GUI formulara Za kreiranje formulara grafičkog interfejsa biramo sljedeće opcije na meniju: File -> "Show GUI Layout Tool" ili >>guide a zatim biramo da se kreira novi GUI formular birajući opciju „Blank GUI“. Naredna slika ilustruje izbor opcije za kreiranje novog grafičkog interfejsa.
Strana 83
Izborom opcije za kreiranje novog praznog interfejsa (Blank GUI) aktivira se forma za dodavanje i podešavanje rasporeda elemenata na GUI formular. Paleta alata sa lijeve strane sadrži opcije za izbor zavisno od kontrole koju želimo dodati na formular.
Naredna slika ilustruje dodavanje elemenata sa strelicama koje ukazuju na vezu izabrane opcije na paleti sa kreiranim elementima na GUI formularu.
Strana 84
GUI kontrole Na sljedećim slikama ilustrovane se pojedinačne opcije kreiranih kontrola sa objašnjenjima za svaku.
Koristeći paletu za izbor kontrola, dodajemo kontrole na kreirani formular.
Nama najvažniji Elementi (GUI kontrole) grafičkog okruženja jesu kontrole za ulaz/izlaz:
Edit Text Static Text Check Boxes Radio Buttons Frames List Boxes Popup Menus Push Buttons Sliders Axis
Svaka kontrola ima svoju grupu svojstava koja se postavljaju u prozoru za njihovo podešavanje (Property Editor). U daljem tekstu, objasnićemo samo specifična svojstva za neku kontrolu.
Strana 85
Edit Text
- Ova kontrola se koristi za unos i izmjenu tekstualnog podatka. - Prilikom kreiranja postavljamo svojstvo 'Tag', putem kojeg mu pristupamo
programski. - Svojstvo 'String' sadrži vrijednost teksta koji je upisan u polje za unos i
izmjenu i služi za direktan pristup programski.
Static Text
- Ova kontrola se koristi za prikaz linije teksta (ne za unos i izmjenu). - Obično se koristi za označavaje drugih kontrola. - Korisnik nema mogućnost promjene inicijalne vrijednosti teksta, sem
programski. - Nema Callback rutinu povezanu.
Strana 86
Check Boxes
- Ova kontrola se koristi za unos dvovalentnih stanja. Ima dvije moguće
vrijednosti (1, 0, odnosno uključen, isključen). - Kada su označeni, vrijednost 'Value' svojstva je 1, odnosno 0 ako nisu
označeni. Preko svojstva 'Value' se kontroli pristupa programski. Radio Buttons
Slični su kao check boxes, ali zamišljeni su da se koriste u povezanim grupama na način da se može odabrati samo jedna od ponuđenih opcija. Koriste se kada korisnik treba izabrati jednu od više ponuđenih opcija. Svaka opcija ima svoj redni broj u grupi te na osnovu rednog broja se zna koju opciju je korisnik odabrao.
Frames
Predstavljaju okvire koje zatvaraju regije prozora i koriste se za vizuelno grupisanje kontrola. Nemaju Callback proceduru. Mogu sadržavati samo kontrole za ulaz/izlaz.
List Boxes
- Prikazuju liste stavki definisane u 'String' svojstvu i omogućavaju korisniku da odabere jednu ili više.
- Svojstva min i max definišu koliko stavki se može odabrati.
Strana 87
Popup Menus
- Otvaraju listu izbora. - Kada se klikne na strelicu, otvaraju listu izbora i omogućavaju
korisniku da odabere jedan od više ponuđenih. - Kada nije otvoren, prikazuje trenutno odabranu stavku. Stavke
imaju indekse, prva stavka ima indeks 1. - Mogu imati definisanu Callback proceduru. Može se koristiti
umjesto Radio buttons kontrole.
Push Buttons
- Izvršavaju akciju definisanu u Callback svojstvu, kada se aktivira.
- Callback je procedura (potprogram) koja se poziva kada se aktivira objekt kontrole.
- Svaka kontrola ima callback svojstvo koje postavimo na ime procedure ili m-filea.
- Callback procedura izvršava se u radnom prostoru Matlab-a. Sliders
Primjenjuju numeričku vrijednost između definisanog minimuma i maksimuma sa zadanim korakom koji opisuje položaj klizača. Potrebno je postaviti sljedeća svojstva:
- Value - trenutna vrijednost - Max - minimalna vrijednost - Min - maksimalna vrijednost - SliderStep – osjetljivost
Preporuke za kreiranje GUI interfejsa
- Kreirati izgled grafičkog interfejsa - Postaviti Tag svojstvo svim kontrolama u Property editor prozoru - Postaviti String svojstva svim kontrolama koje imaju natpis
Strana 88
13. Zadaci za vježbu VJEŽBA 1:
1. Utvrditi šta je veće eπ ili πe?
2. Izračunati z , ako je
9896
100
11
1
iii
iz
.
3. Izračunati 5
x za 0x .
4. Izračunati 0
0x .
5. Kao znakovnu promjenljivu unijeti svoje ime i prezime i odrediti broj slova u njemu.
6.Korišćenjem različitih izlaznih formata ispisati broj 2 .
7.Izračunati u MATLAB-u vrijednost tražene funkcije za zadani x: f(x)=(x+1)0.5, x=5 f(x)=(x+1)1/3, x=6 f(x)=1/(4-x2), x=7 f(x)=sqrt(x2-2), x=8 f(x)=(-cos(x)/(3*sin2(x)))+4/3*ctg(x), x=14 VJEŽBA 2: a) Korišćenjem proizvoljne matrice A dimenzija 3x3 odrediti:
1) član na mjestu (3,1), 2) drugu vrstu matrice A, 3) determinantu matrice 2A , 4) transponovanu matricu matrice 1A .
b) Napisati naredbe u MATLAB-u koje rade sljedeće:
1. Kreirati jednostupčanu matricu A s elementima –10, -8, -6, ..., 6, 8, 10. 2. Kreirati vektor B čiji su elementi kosinusi ekvivalentnih elemenata vektora A 3. Kreirati vektor C čiji su elementi redom umnošci ekvivalentnih elemenata vektora A i B 4. Kreirati matricu D čiji će stupci biti redom vektori A, B i C 5. Kreirati matricu E čiji su reci redom 2., 5., 10. i 8. redak matrice D
c) Napisati naredbe u MATLAB-u koje rade sljedeće: 1. Kreirati jednorednu matricu A s 10 elemenata od 0 do 4 (funkcija linspace) 2. Kreirati jednorednu matricu B s elementima 1..10.
Strana 89
d) Pomoću matrice A=
2 1
-1 -5
i funkcija ones, zeros i eye kreirati matricu
0 0 2 1 1 0
0 0 -1 -5 0 1
4 2 5 5 -2 -1
-2 -10 5 5 1 5
3 2 0 0 1 1
0 -4 0 0 1 1
e) Date su matrice A i P i vektori x0, f. Metodom najmanjeg kvadrata izračunati: N, n, x, x1 i v.
1000.0000 1000.0000
x0 = 1000.0000 1000.0000
1 0 0 0
-1 1 0 0A = 0 -1 1 0
0 0 -1 10 0 0 1
-1 0 1 0
0.4545 0 0 0 0 0 0 0.6329 0 0 0 0
P = 0 0 0.4762 0 0 0 0 0 0 0.8696 0 0 0 0 0 0 0.4808 0 0 0 0 0 0 0.5102
-37.8425 -1.4258
f = -0.5288 -0.6927
-40.4860 -1.9520
Strana 90
Metod najmanjeg kvadrata:
f) Izračunati 2 1
4 det
TA A
A
, korišćenjem date matrice A .
g) Riješiti matričnu jednačinu CXBA 2 (na dva načina), ako je:
01
21A ,
12
30B ,
118
178C .
h) Dati su elementi , , 2e . Formirati matricu 3x3, čiju prvu vrstu čine dati brojevi, drugu vrstu njihovi logaritmi, a treću vrstu kvadratni korijeni datih brojeva. VJEŽBA 3:
1. Formirati funkcijski fajl pod imenom si, kojim se izračunava funkcija x
x)sin(,
zatim izračunati 2
si
, 0si .
2. Formirati funkcijski fajl pod imenom ime, kojim svako unosi svoje ime i prezime, prebrojava broj slova, i ako je taj broj manji od 15, određuje moduo i argument
kompleksnog broja 1 3z i ; ako je broj slova između 15 i 20, definiše jediničnu matricu 3 3 ; a ako je veći od 20, izračunava sumu kvadrata prvih 100 prirodnih brojeva. 3. Uz pomoć potprograma za računanje da li je broj prost ili nije, ispisati sve brojeve do 1.000 koji su prosti. Napisati i kod za function p=prost(x);
fAxv
xxx
nQnNx
PfAn
PAAN
x
T
T
01
1
Strana 91
VJEŽBA 4:
1. Napišite m file za analiziranje polinoma! Nakon pokretanja program pita korisnika stepen polinoma koji želi analizirati. Nakon toga jedan po jedan koeficijent. Program iscrtava graf na kojem naglasi nul tačke (zaokružiti crvenom bojom).
2. Napišite m file, za iscrtavanje jednog perioda sinusoide! Program pita korisnika za frekvenciju, amplitudu i ugao pomaka sinusoide, te iscrtava jedan period na grafu
3. Kreirajte m file koji generiše slučajan vektor od 10 elemenata u intervalu od [0,100], te kao rezultat ispisuje novi vektor sastavljen od članova slučajnog vektora ispisanih po veličini. (Napomena: slučajan stupčasti vektor sa elementima u intervalu [0,1] generiše se naredbom rand(m,1), gdje je m broj članova vektora).
4. Kreirajte funkcijski m file koji kao ulaznu varijablu učitava dva broja - cijeli broj, a zatim ispisuje sve cijele brojeve djeljive sa 6 između učitanih brojeva.
5. Kreirajte funkcijski m file koji učitava vrijednost poluprečnika kruga, a članovi izlaznog vektora su mu redom obim i površina kruga, te površina i volumen kugle istog polumjera.
6. Kreirajte grafičko okruženje kao na slici:
klikom na dugme run izvršava se program koji čita koeficijente polinoma, iscrtava polinom u području 0 do 100, te ispisuje korijene polinoma.
Strana 92
Literatura: [1] Savić, M. Programiranje u Matlab-u, drugo izdanje, Građevinski fakultet u
Beogradu, 2005. [2] Ćalasan, L., Petkovska, M. Matlab i dodatni moduli Control System Toolbox i
Simulink, Mikro knjiga, Beograd, 1996. [3] Kovačević, I. Matlab, drugo izdanje, Singidunum, Beograd, 2006. [4] Matlab – uputstvo za upotrebu, Elektrotehnički fakultet, Banja Luka [5] Matlab – praktikum, Arhitektonsko-građevinski fakultet, Banja Luka, 2010. Poštovani studenti,
Skripta je nastala iz potrebe olakšanja korišćenja i primjene MATLAB-a. Materijali su prvenstveno korišćeni iz naznačene literature, kao i iz raznih izvora sa Interneta.
Materijal nije autorizovan, te se može koristiti samo za internu upotrebu.