92
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 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.

matlab

  • Upload
    -m

  • View
    332

  • Download
    5

Embed Size (px)

DESCRIPTION

matlab

Citation preview

Page 1: matlab

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.

Page 2: matlab

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.

Page 3: matlab

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

Page 4: matlab

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)

Page 5: matlab

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

Page 6: matlab

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

Page 7: matlab

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

Page 8: matlab

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)];

Page 9: matlab

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:

Page 10: matlab

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

Page 11: matlab

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'.

Page 12: matlab

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

Page 13: matlab

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 =

Page 14: matlab

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)

Page 15: matlab

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

Page 16: matlab

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

Page 17: matlab

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

Page 18: matlab

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.

Page 19: matlab

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

Page 20: matlab

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

Page 21: matlab

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

Page 22: matlab

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

Page 23: matlab

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

Page 24: matlab

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.

Page 25: matlab

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

Page 26: matlab

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

Page 27: matlab

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

Page 28: matlab

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 .

Page 29: matlab

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

Page 30: matlab

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

Page 31: matlab

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.

Page 32: matlab

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 =

Page 33: matlab

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

Page 34: matlab

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

Page 35: matlab

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+')

Page 36: matlab

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.

Page 37: matlab

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

Page 38: matlab

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

Page 39: matlab

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 '.

Page 40: matlab

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')

Page 41: matlab

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

Page 42: matlab

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

Page 43: matlab

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

Page 44: matlab

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

Page 45: matlab

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:

Page 46: matlab

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]

Page 47: matlab

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))

Page 48: matlab

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

Page 49: matlab

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.

Page 50: matlab

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.

Page 51: matlab

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

Page 52: matlab

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

Page 53: matlab

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

Page 54: matlab

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]

Page 55: matlab

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

.

Page 56: matlab

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

Page 57: matlab

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.

Page 58: matlab

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

Page 59: matlab

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

Page 60: matlab

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

Page 61: matlab

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

Page 62: matlab

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.

Page 63: matlab

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

Page 64: matlab

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

Page 65: matlab

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, ...)}

Page 66: matlab

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

Page 67: matlab

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, …)

Page 68: matlab

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

Page 69: matlab

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

Page 70: matlab

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.

Page 71: matlab

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).

Page 72: matlab

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

Page 73: matlab

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

Page 74: matlab

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

Page 75: matlab

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 )(

Page 76: matlab

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)

Page 77: matlab

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

Page 78: matlab

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

Page 79: matlab

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')

Page 80: matlab

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

Page 81: matlab

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

Page 82: matlab

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.

Page 83: matlab

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.

Page 84: matlab

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.

Page 85: matlab

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.

Page 86: matlab

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.

Page 87: matlab

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

Page 88: matlab

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.

Page 89: matlab

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

Page 90: matlab

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

Page 91: matlab

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.

Page 92: matlab

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.