Professional Documents
Culture Documents
Matlab Za Inžinjere Dio 3 PDF
Matlab Za Inžinjere Dio 3 PDF
1. Matlab Skripti
U prijašnjim lekcijama i vježbama smo korisitili interaktivan rad sa Matlabom. Unos velikog broja
komandi iz komandnog prostora oduzima dosta vremena a vrlo često je u Matlabu, kao i u drugim
programskim jezicima potrebno ponoviti isti niz komandi i modifikovati ih da bi smo postigli željene
rezultate. U ovom slučaju je lakše raditi sa Matlab skriptima – nizovima komandi sačuvanih u
dokumentu koje se u tom slučaju mogu izvrsiti automatski jedna za drugom jednostavnim pozivom
tog skripta.
Skripti se mogu pisati u bilo kom editorskom programu (čak i u Wordu, što nije preporučljivo) ali ih je
najlakše pisati u samom programskom prozoru (Editor Window) u Matlabu. Da bi ste započeli novi
script možete koristiti Matlab meni (File – New – m‐file). Matlab skripti nemaju ulaznih ili izlaznih
vrijednosti što predstavlja jednu od glavnih razlika izmedju Matlab skripti i Matlab funkcija o kojima
ćemo pričati nešto kasnije. Isto tako Matlab skripti mogu koristiti i operirati jedino na varijablama
koje se nalaze u random prostoru. Nove varijable se mogu kreirati iz Matlab skripta na način kao što
smo to radili u prethodnoj lekciji ali u (komandnom prozoru) a nakon izvršenja skripta ove varijable
ostaju i dalje u Matlabovom random prostoru.
Da bi se pokrenio script izvršile komande iz tog Matlab skripta, potrebno je u komandnom prozoru,
poslije standardnog Matlab odziva “>>” otkucati ime skripta.
Da bi se lakše razumjeli, skripti mogu sadržavati i linije komentara. Da bi se označili komentari, liniju
sa komentarom treba započeti sa “%”. Boja teksta na toj liniji će se u tom slučaju obično promijeniti
u zelenu i Matlab će ignorisati ovakve linije prilikom izvršenja skripta, ali će programeru i drugim
korisnicima biti od koristi jer će bolje objasniti operaciju samog skripta.
Neke komande koje su korisne u pisanju Matlab skripta su
pause zaustavlja izvodjenje skripta i čeka da korisnik pritisne bilo koju tipku na
tastaturi da bi se nastavilo procesiranje komandi iz skripta.
keyboard zaustavlja izvodjenje skripta i vraća komandu standardnom Matlab odzivu
“>>”; kada se ukuca komanda return procesiranje komandi iz skripta se
natavlja.
break zaustavlja izvodjenje petlje ili skripta u kom se program našao.
27
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
return izlazi iz funkcije u kojoj se program našao.
2. Primjer
Slijedeći uputstva (#) napišite svoj prvi matlab script.
(# se koristi u ostatku teksta da bi vam dalo indikaciju da je potrebno da nešto uradite.)
# Pokrenite Matlab i otvorite novi script u programskom prozoru.
# U prozoru upišite slijedeće:
% Lecture 2 Example 1
A1 = [1 2 3];
A2 = [4 5 6];
A = [A1; A2]
B = [A1' A2']
C = A*B
# Sačuvajte datoteku u vašem direktoriju (File – Save‐as) i dajte joj odgovarajuće ime.
# Pokrenite ovaj script tako što ćete otkucati ime koje ste dali ovom skriptu u komandnom prozoru.
Na ekranu će se ispisati vrijednosti matrica A, B i C u komandnom prozoru. Radni prozor će takodje
sadržavati iste varijable.
Takozvani “debug” Matlab programa (testiranje, provjera i otklanjanje greški u programu) se može
obaviti na razne načine. Ovdje ćemo pokazati neke osnovne postupke pomoću kojih se testira I
“debug”‐uje program.
# Da bi ste vidjeli trenutne vrijednosti varijabli u vašem random prostoru pozicionirajte kursor na
varijablu koja vas interesuje u programskom prostoru. Pravokutnik koji se pokaže će sadržavati
vrijednost te varijable.
28
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
# Ako želite da se procesiranje skripta zaustavi na točno odredjenom mjestu možete postaviti
“breakpoint” na tu liniju u programu. Postavite kursor na liniju u programskom prostoru i u meniju
izaberite Set/Clear breakpoint opciju. Postavljeni “breakpoint” će se indicirati crvenom točkom na
lijevoj margini skripta pored te linije ako ste ovo uradili kako treba.
# Sada ponovo pokrenite procesiranje skripta i program će se zaustaviti na zadatoj liniji. Zelena
strelica će označavati liniju na kojoj se program zaustavio.
Isto tako, možemo primjetiti da je standardni Matlab odziv “>>” promijenjen u “K>>” kao indikacija
da je Matlab presao u “debug” operaciju. Na ovaj način, vrijednosti varijabli u random prostoru se
sada mogu ispitati (whos komanda je poprilicno korisna u ovim situacijama).
Sve ovo se može uraditi i bez menija, koristeći opcije na traci iznad programskog prozora. Pokušajte
sve ovo ponoviti koristeći ovu mogućnost. Uz to, istražite i druge mogućnosti koje mogu biti korisne
kod “debug”‐a Matlab skripti i funkcija u budućnosti.
Clear se riješava svih postavljenih “breakpoint”‐a
Single Step izvršava script (ili funkciju) liniju po liniju.
Step Into ulazi u drugu funkciju ako je pozvana iz skripta.
Step Out završava procesiranje funkcije ili skripta.
Quit završava “debug” programa.
# Pokušajte iskoristiti neke od ovih mogućnosti u skriptu koji ste napisali.
Matlab ima i mogućnost postavljanaja automatskog zaustavljanja na pojedinoj liniji programa u
pojedinim situacijama (ako na primjer varijabla izlazi iz opsega koji se koristi u Matlabu, ili je
otkrivena greška ili upozorenje u skriptu). Ovo su takozvane “automatic breakpoints”.
29
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
Kod pisanaja matlab skripti se ponekad možete naći u situačiji da neku operaciju morate ponoviti
veći broj puta. Ovakve situacije treba izbjegavati jer usporavaju rad Matlaba, kad god je moguće
pokušajte iskoristiti mogućnosti operacije sa vektorima, npr. da bi ste izračunali sumu svih
elemenata u vektoru, jedan od bržih i efikasnijih načina je da pomnozite taj vektor sa vektorom u
kome su svi elementi jedinice a veličina mu je kompatibilna sa veličinom vektora čiju sumu želite
dobiti. Ipak, ako nema drugog izlaza, marate koristiti petlje u Matlabu. for petlju ste već imali prilike
vidjeti i isprobati u prethodnoj lekciji. Ona se i najvise koristi u Matlabu. Pored nje često se koristi i
druga vrst petlje, tzv. while petlja.
for petlja se korsiti da bi se jedna operacija ili dio programa ponovio više puta. Unutar jedne for
petlje moguće je smjestiti drugu manju for petlju. Ovo se naziva ugnježdena for petlja. Isprobajte
promjer ugnježdene petlje u komandnom prozoru Matlaba:
for k = 1:4
for p = 1:4
A(k,p)=1/(k+p-1);
end
end
A
Drugi vid kontrole programa u Matlabu je testiranje uslova na osnovu kojih se program onda može
preusmjeriti i nastaviti na različite načine. Grananje programa nakon testiranja se postiže if
konstukcijom. if konstrukcija se može korsititi sama za sebe ili se može kombinirati sa elseif i else
Matlab riječima. Korištenje if‐elseif i if‐else konstrukcija je vrlo slično kao i drugim programskim
jezicima. Testovi su dani za svaki if ili elseif iskaz u skriptu se testiraju dok se ne pronadje točan iskaz.
Operacija ili skup operacija koji potpadaju pod taj iskaz se izvrše i program se onda nastavlja sa
komandama koje slijede end iskaz koji se mora nalaziti na kraju svake if‐else ili if‐elseif konstrukcije u
skriptu.
for I = 1:4
for J = 1:4
if I == J
B(I,J)= 2;
elseif abs(I-J)==1
B(I,J) = -1;
else
B(I,J) = 0;
end
end
30
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
end
B
Uslovi i izrazi koji se najčešće javljaju u if konstrukcijama obično koriste operatore
== da li je jednako?
~= da li nije jednako?
< da li je manje?
> da li je veće?
<= da li je manje ili jednako?
>= da li je veće ili jednako?
Ovi operatori se mogu kombinirati sa sljedećim logičkim operatorima
& logičko “i”.
| logičko “ili”.
~ logičko “ne”.
xor isključivo “ili” (ili jedan ili drugi ali ne oba).
any točno, ako je ijedan element vektora različit od nule.
all točno, ako su svi elementi vektora različiti od nule.
switch konstrukcija je pogodna zamjena za if‐elseif konstrukciju u slučajevima kada je mogućnost
izbora nakon testiranja if uslova velika. switch izračunava i provjerava vrijednost koja je dana nakon
te riječi u programu i nakon toga izvršava komandu koja slijedi poslije odgovarajuće case izjave.
Čitava switch konstrukcija se obično završava sa linijom koja sadržava riječ otherwise i jednom ili
nizom komandi koje slijede iza toga. Ove komande ili niz komandi će biti izvršene ako nijedna od
case izjava ne odgovara vrijednosti izračunatoj u switch liniji. U slučaju da je više case vrijednosti
istinito, izračunava se samo prva.
U ovom primjeru, operacija koja slijedi drugi case će biti izvršena. Provjerite kako ovo radi u Matlabu.
switch (12/6)
case 1
a = 1;
31
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
case 2
a = 2;
case 3
a = 3;
case 4
a = 4;
otherwise
a = 5;
end
a
Na kraju, spomenimo još jednu vrstu petlje koja se koristi umjesto “for” petlje u slučajevima kada se
točan broj ponavljanja Matlab komandi u petlji ne zna prije početka izvršenja same petlje. U ovim
situacijama se korsti “while” petlja. Evo primjera koji ilustrira upotrebu ove petlje. Pokušajmo,
koristeći “while” petlju odrediti broj uzastopnih cijelih brojeva čija je suma jednaka ili tek nešto
manja od 210.
int = 1;
int_sum = 0;
max_val = 210;
last_int = int
if int_sum == max_val
num_int = int - 1
tt_int_ct = int_sum
elseif int_sum > max_val
num_int = int - 1
tt_int_ct = int_sum - last_int
end
Razni oblici petlji i uslova za grananje u Matlab programima su prikazani na sljedećoj stranici.
32
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
“for” petlja “while” petlja
for brojač = izraz koji uvećava brojač while uslov 1
grupa Matlab komandi grupa Matlab komandi 1
end end
grupa Matlab komandi 2
“if” grananje ugnježdeno “if” grananje
if uslov 1 if uslov 1
grupa Matlab komandi 1 grupa Matlab komandi 1
end if uslov 2
grupa Matlab komandi 2
end
grupa Matlab komandi 3
end
grupa Matlab komandi 4
“if‐else” grananje “if‐elseif” grananje
if uslov 1 if uslov 1
grupa Matlab komandi 1 grupa Matlab komandi 1
else elseif uslov 2
grupa Matlab komandi 2 grupa Matlab komandi 2
end elseif uslov 3
grupa Matlab komandi 3
elseif uslov 4
grupa Matlab komandi 4
end
“switch – case” grananje “If‐elseif‐else” grananje
switch indikator if uslov 1
case vrijednost indikatora 1 grupa Matlab komandi 1
grupa Matlab komandi 1 elseif uslov 2
case vrijednost indikatora 2 grupa Matlab komandi 2
grupa Matlab komandi 2 elseif uslov 3
otherwise grupa Matlab komandi 3
grupa Matlab komandi 3 elseif uslov 4
end grupa Matlab komandi 4
else
grupa Matlab komandi 5
end
33
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
4. Matlab funkcije
I pored svega prethodno navedenog o Matlab skriptima, najveća snaga Matlaba i popularnost ovog
programa ipak leži u funkcijama. Čitav Matlab jezik je i baziran na funkcijama. U Matlabu postoji
veliki broj ugradjenih funkcija kao što su npr. sin, sqrt, inv itd. Ove su funkcije ugradjene u osnovnu
jezgru Matlaba, veoma su efikasne i brzo se izvode ali su nepristupačne, ne može se im se prići i
vidjeti kako su točno napisane. Druga grupa ugradjenih Matlab funkcija su pristupačne u Matlab
dadotekama, koje kao i Matlab skripti imaju produžetak ~.m u imenu. Pošto se ovim funkcijama
može pristupiti, one se mogu dalje mijenjati i prilagodjavati potrebama korisnika. Dobra ideja je da
se u tom slučaju sačuvaju pod drugim imenom kako bi originalne ugradjene funkcije i dalje obavljale
zadatak koji im je početno i namjenjen. Takva funkcija je npr. sinh.
Liste raznoraznih funkcija se mogu vidjeti koristeći Matlab help komandu, npr.
Snaga i fleksibilnost Matlaba se krije u mognućnosti da svaki korisnik/programer kreira svoje
sopstvene funkcije prema potrebi (i mogućnostima). Pisanje funkcije je vrlo slično pisanju Matlab
skripta, koristi se isti Matlab editor (programski prozor) i završena funkcija se sprema u datoteku, tj.
dokument sa produžetkom ~.m.
Dvije osnovne razlike izmedju kreiranja Matlab skripta i funkcije su slijedeće:
1. Funkcija mora sadržavati ključnu riječ “function” na početku prve linije.
2. Varijable koje se koriste u funkciji se ne nalaze u matlabovom random prostoru. Na ovja
način se spriječavaju konfliktni izmedju varijabli koje bi mogle imati ista imenau različitim
funkcijama. Radnom prostoru svake funkcije se može pristupiti sa “K>>” odziva koji je
dostupan jedino u “debug” operačiji. Informacije i varijable se ipak moraju komunicirati i
34
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
izmedju pojedinih funkcija kao i izmedju funkcija i Matlab skripti koje koriste te funkcije. Ovo
se odvija pomoću ulaznih i izlaznih varijabli koje mogu biti definirane za svaku funkciju.
Proces deifniranja i kreiranja funkcije se može opisati kroz slijedeće stepenice:
1. Izaberite ime za vašu funkciju. Pri ovome vodite pažnju da ne koristite ime koje je već dano
nekoj od ugradjenih Matlab funkcija ili nekoj od funkcija koje ste ranije kreirali.
2. U Matlab editor‐u (tj. programskom prozoru) otvorite novi dokument.
3. Prva linija funkcije mora imati slijedeći oblik:
function [lista izlaznih varijabli] = ime_funkcije(lista ulaznih varijabli)
4. Nakon ovoga upišite kratki opis funkcije, npr. koja je svrha funkcije, kako radi i kako se
poziva. Svaka od ovih linija treba da započne sa “%” tj., mora da bude data kao komentar.
Ove informacije će se pojaviti kada funkcija bude završena a u komandnom prozoru se kao i
za bilo koju drugu Matlab funkciju otkuca:
help ime_funkcije
5. Na kraju, slijedi najteži posao, ukucajte Matlab funkciju ‐ niz komandi koje će imati željeni
rezultat nakon izvodjenja ove funkcije. Korisno je da se kod funkcija, kao i kod Matlab skripti
doda dovoljno komentara kako bi korisnicima (a i vama) bili jasni detalji operacije ove
funkcije. Studenti vrlo često zaboravljaju ili izbjegavaju dodavanje komentara njihovim
Matlab funkcijama, što kasnije te funkcije često čini potpuno nerazumljivim i
neupotrebljivim. Pokušajte to izbjeći. (Dakle, pokušao sam.)
Slijedi primjer vrlo jednostavne Matlab funkcije koja izračunava površinu trokuta ako su poznate
duljine svih stranica tog trokuta. Jednažba koja se koristi i koja će biti glavni dio naše funkcije je:
P s s a s b s c
P je površina koja se izračunava, a, b i c su duljine stranica a s je definisano sa:
s a b c 2
Da bi ste kreirali ovu funkciju u Matlabu:
# Otvorite novi dokument u Matlab editor i otkucajte slijedeći tekst ove funkcije:
35
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
%Inputs:
% a,b,c: lengths of the sides
%Output:
% A: area of the triangle
%Usage:
% Area = area(2,3,4)
%written by ****, May 2013
s = (a+b+c)/2
A = sqrt(s*(s-a)*(s-b)*(s-c));
# Spremite ovaj dokument. Ime pod kojim ste spremili dokument mora odgovarati imenu koje ste
dali ovoj funkciji, tj. ime dokumenta u koji spremate ovu funkciju mora biti “area.m”. Ovo im će vam
biti automatski ponudjeno kod spremanja ove funkcije, provjerite i prihvatite.
# Otkucajte “help area” u komandnom prozoru da bi ste dobili pomoć za ovu funkciju.
# Pozovite funkciju sa komandnog prozora, definišući pri tom ulazne veličine, npr. “area(1,1,1)”.
Ovim će te izračunati površinu jednakostraničnog trokuta gdje je svaka stranica duljine 1.
# Nakon ovoga otkucajte “s” u komandnom prozoru da bi ste provjerili vrijednost ove varijable.
Poruka koju ste dobili bi trebala biti: Undefined function or variable 's'. Matlab ne prepoznaje ovu
varijablu iako je korištena u funkciji “area”. Možete li objasniti zašto?
# Izmjenite vašu funkciju tako da pored izlazne varijable “area” definišete još jednu izlaznu varijablu
“s”. Ponovo pozovite funkciju. Koliko rezultata sada dobijate? Ako još uvijek dobijate samo jedan
rezultat ‐ površinu – u čemu je sada problem?
# Pokušajte proširiti vašu funkciju tako da prije no što se krene na izračunavanje površine funkcija
provjeri je li suma dvije kraće stranice veća od treće stranice.
36
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
U prvoj lekciji ste se upoznali sa osnovnim mogućnostima matlab grafike. Pored funkcija glavni razlog
popularnosti Matlaba je u snažnoj grafici. Mogućnosti su puno veće nego što se to da naslutiti iz prve
lekcije.
Zapocnimo ponovo tako što ćemo kreirati jednostavan graf u Matlabu.
# U komandnom prozoru, otkucajte slijedeće matlab komande.
>> x = 0:0.1:10;
>> y = sin(x) + cos(2*x);
>> z = sin(2*x) + cos(x);
>> plot(x,y,'b*-');
>> figure
>> plot(x,z,'r+-');
Treba li bi ste dobiti dvije slike. Ako ih ne vidite dobro, moguće je da je jedna postavljena točno
preko druge. Malo ih razmaknite.
# Odaberite opciju za ručno popravljanje slike sa menija na slici (Tools‐Edit Plot). Pomoću ove opcije
možete izbrisati graf, kopirati ga i tako ga prebaciti na drugu sliku. Pokušajte to učiniti sa ovim
grafovima.
Umjesto više slika, ili iscrtavanja više grafova na jednoj slici u Matlabu se koristi i opcija kojom se
slika dijeli na više podslika koje se onda ponašaju kao individualne slike o kojima je do sada bilo riječi.
# Zatvorite prethodne slike i proučite efekte sljedićih komandi:
subplot(2,2,1);
plot(1:10)
subplot(2,2,2)
x = 0;0.1:2*pi;
plot(x,sin(x))
subplot(2,2,3)
x = 0:0.1:2*pi;
plot(x, exp(-x),'r')
subplot(2,2,4)
plot(peaks)
Svaka podslika se može označavati, baš kao što ste to radili i sa običnim slikama u prvoj lekciji. Da bi
ste sa jedne podslike presli na drugu morate izvrsiti komandu subplot(?,?,?).
37
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
6. Trodimenzionalna grafika
Površina se može matematički definirati kao funkcija koja povezuje svaku točku na mreži sa nekom
vrijednošću. Na primjer, koristeći dvodimenzionalnu mrežu (tj. ravninu) površina se može iskazati
jednadžbom:
z f x, y
Da bi smo iscrtali površinu z, opseg vrijednosti varijabli x i y mora biti definiran. Isto tako rezolucija
mreže ‐ razmak izmedju dvije susjedne x i dvije susjedne y veličine takodje mora biti definiran. Ako
na primjer izaberemo opseg za x od 2 do 4 a opseg za y od 1 do 3 i rezlouciju obe varijable postavimo
na 0.5, odgovarajuća mreža se može definirati koristeći Matlab komandu meshgrid:
Elementi ove mreže su u stvari koordinate točaka u X‐Y ravnini.
Vrijednost površine se sada može izračunati za svaku točku u ovako definiranoj X‐Y ravnini. Koristeći
ovu mrežu, možemo na primjer površinu predstaviti jednadžbom:
z ( x 3) 2 ( y 2) 2
U Matlabu bi smo ovo izračunali na slijedeći način:
>> Z = (X-3).^2-(Y-2).^2
Matrica Z koja je rezultat gornje komande predstavlja vrijednost ove površine u svakoj točki
prethodno definirane mreže. Sve što sada treba učiniti da bi se predstavila i vizualizirala ova površina
je ispravno upotrijebiti matlab komandu mesh.
>> mesh(X,Y,Z)
>> title('saddle'), xlabel('x'), ylabel('y')
# Izvršite ove dvije komande u Matlab komandnom prozoru i trebali bi ste dobiti 3D sliku ove
površine.
# Zanimljive mogućnost u Matlabu je rotacija dobijene površine. Pokušajte (Tools‐Rotate 3D).
# Da bi ste dobili konture ove površine možete iskoristiti contour komandu:
38
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
>> contour(X,Y,Z)
Iako su matrice najprirodnije i osnovne varijable u Matlabu, postoje i kompleksniji formati koji se
dosta koriste u naprednijim Matlab programima, kako u skriptama, tako i u funkcijama. Ćelije i
structure su kolekcije varijabli različitih vrsta. Ovdje ćemo samo kratko objasniti što su u stvari ćelije i
strukture i osnovne principe njihovog korištenja.
7.1.Ćelije
Ćelija je u stvari matrica sa elementima raznih vrsta i dimenzija. Kreira se koristeći vitičaste zagrade,
“{ }”. Na pimjer, ako ukucate i izvršite slijedeću Matlab komandu:
vidjet ćete prvi element ove ćelije kao [2*2*2 double] jer je prevelikih dimenzija da bi se prikazao ali
druga dva elementa ‐ text i konstanta su dovoljno mali da bi bili prikazani u komandnom prozoru.
Da bi se pristupilo pojedinim elementima ćelije, ponovo se mogu koristiti vitičaste zagrade, a ako je
potrebno, kutne zagrade se koriste da bi se pristupilo pojedinim elementima toga elementa. Jasnije
je ako se ovo uradi u Matlabu:
A{1,1}(2, :, 1)
ans =
0.2311 0.4860
Na sličan način se mogu i definirati novi elementi ćelije:
B {1,1} = 1:10
B{2,2} = A
Neke stvari koje je vrijedno primjetiti u radu sa ćelijama
39
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
Veličina ćelije je 2x2 iako smo kreirali samo dva elementa. Druga komanda je odredila
veličinu ćelije a nedefinirani elementi ćelije su automatski dobili vrijednost 0. Dimezije ćelija
se uredjuju dinamički u Matlabu (kao i u slučaju matrica).
Ćelija može sadržavati druge ćelije.
Da bi se pristupilo sadržaju ćelije, index pristupa je odredjen indexima u vitičastim
zagradama
Ćelije koje sadrže druge ćelije se ne mijenjaju automatski. Ako se sadržaj ćelije A u
prethodnom primjeru promijeni, sadržaj ćelije B se neće automatski promijeniti.
Podsijetimo se primjera iz prošle vježbe, gdje smo iskoristili matricu da bi smo spojili i sačuvali veći
dio teksta. Stringove pretvorili u matricu koristeći ‘str2mat’ funkciju:
negative = str2mat(...
'We regret to inform you,',...
'your application has been rejected.')
closing = 'Sincerely, Big Boss';
name = 'Mr. Looser';
7.2. Strukture
Strukture se koriste za grupiranje dvije ili više Matlab varijabli koje su na neki način povezane ili se
koriste da opišu isti objekt ili problem.
Na primjer, pokušajmo opisati loptu koja je u splobodnom padu sa neke visine. Masa lopte se može
iskazati jednim brojem, a pozicija lopte u prostoru se može prikazati vektorom koji ima tri elementa.
40
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
Brzina lopte bi mogla biti još jedna dodatna varijabla u ovo grupi. Sve ove osobine se mogu skupiti u
jednu strukturu u Matlabu na sljedeći način:
>> ball.mass = 10;
>> ball.position = [0, 0, 100];
>> ball.velocity = [0, 0, 0];
Da bi ste vidjeli sadržaj novoformirane structure, u komandnom prozoru , kao I kod drugih Matlab
varijabli, otkucajte ime structure kod Matlab odziva:
>> ball
Pojedinačni elementi structure se nazivaju poljima. Poljima structure se pristupa na slijedeći način:
>> ball.position
ans =
0 0 100
Standardne Matlab operacije se mogu primjeniti na elemente strukture kao i na svaku drugu
varijablu. Da bi smo promijenili poziciju lopte za 10 u y smjeru:
ball =
mass: 10
position: [0 10 100]
velocity: [0 0 0]
Nova polja se mogu dodavati strukturama. Ako na primjer želite dodati novi podatak, polumjer lopte
u strukturu koju ste kreirali:
41
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
Ako želite raditi sa više objekata u vašoj strukturi, novi objekti se isto tako mogu dodati u svakom
trenutku rada. Ispitajte koja je posljedica slijedeće naredbe:
Stuktura “ball” je sada promijenila dimenzije sa 1x1 na 3x1, dodana su joj dva nova elementa. Ne
polja, nego dvije čitave grupe polja koja su činila početnu strukturu. Svaki od ovih elemenata ima iste
elemente kao i prijašnja “ball” struktura. Elementi za sada imaju i iste vrijednosti koje sada možemo
izmjeniti. Pokušajmo svakoj od ovih lopti dati različitu masu:
Provjerimo što je sadržaj druge lopte, tj. drugog elementa u ovom vektoru struktura:
>> ball(2)
Mase svih lopti u strukturi se mogu brzo provjeriti na sljedeći način:
>> ball.mass
ans =
ans =
ans =
10
42
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
Matlab je dao tri odvojena odgovora na ovaj upit. Bolji način da se ovo uradi je da se sva tri odgovora
skupe u vektor koristeći “[ ]” zagrade. Pokušajte ovu komandu:
>> [ball.mass]
Kako bi ste u jednoj liniji izračunali ukupnu masu svih lopti u ovoj strukturi?
Što bi se desilo da ste umjesto ove komande otkucali:
Poruka: “[ ]” zagrade su važne !
43
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
8. Vježbe
1. Fibonnaci serija je dfinirana sa:
f n f n 1 f n 2 n 3, 4, 5...
i f1 = 0, f2 = 1. Napišite Matlab funkciju koja će izračunavati n‐ti element ove serije (ulazna
varijabla je n, rezultat je fn).
Nakon što ste napisali svoju funkciju zatražite odgovor od predavača (dokumenti L2Fib1,
L2Fib2, L2Fib3 and L2Fib4). Pomoću komande profile ispitajte efikasnost svakog od ovih
riješenja.
2. Prikažite grafove funkcija:
1
y
sin x
, u
1 x2 1
x, v 2 , w
10 x 3 1
x 1 x 4
2 1
x
4 x
2 2
na jednoj slici za 0 x 10 i pravilno označite slike.
Pokušajte isprobati I iskoristiti sljedeće Matlab komande:
>> grid
>> grid
>> hold on
3. Napišite funkciju koja će simulirati bacanje kocke. (Matlab funkcija floor će vam možda
korisno doći da bi ste riješili ovaj zadatak.)
44
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu
4. Nacrtajte površinu koja je definirana funkcijom:
f x, y x y e
2 x 2 y 2
u domenu definiranom sa ‐2 x 2, ‐2 y 2. Pronadjite minimum i maximum ove
funkcije kao i vrijednosti x i y u ovim točkama. Na istoj slici nacrtajte konture ove površine
i označite položaj pronadjenih točaka na ovom crtežu. Funkcije find i max bi vam mogle
biti od koristi u ovoj vježbi.
5. Napišite Matlab funkciju koja ce se ponašati na sljedeći način:
Ako ju pozovete bez ikakvih ulaznih vrijednost, neće raditi ništa
Ako ju pozovete i date joj neki vektor kao ulaznu vrijednost, funkcija će nacrtati
ovaj vektor
Ako ju pozovete I date joj dva vektora kao ulaz, funkcija će nacrtati prvi vektor kao
funkciju drugog vektora.
Ako ju pozovete sa više od dvije ulazne vrijednost, funkcija će automatski
razumijeti da je prva ulazna varijabla vektor koji treba nacrtati a da su ostali ulazi
parametri sa kojima treba označiti ovaj graf. Ove oznake mogu biti samo sljedeće:
naslov slike, oznaka na x‐osi i oznaka na y‐osi, tj. u Matlabu: 'title', 'xlabel' and
'ylabel'.
Da bi ste riješili ovaj problem morati će te koristiti Matlab komande varagin, nargin a
vjerovatno i isempty, isnumeric, lower and length. Svaka Matlab funkcija može imati
najviše osam ulaznih vrijednosti.
45