19
Branislav Vuksanovic Matlab za inžinjere Dio 3: Programiranje u Matlabu 27 Dio 3: Programiranje u Matlabu 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 – mfile). 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.

Matlab za ininjere dio 3.pdf

  • Upload
    iko1402

  • View
    287

  • Download
    9

Embed Size (px)

Citation preview

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    27

    Dio3:ProgramiranjeuMatlabu1. MatlabSkriptiUprijanjimlekcijamaivjebamasmokorisitiliinteraktivanradsaMatlabom.UnosvelikogbrojakomandiizkomandnogprostoraoduzimadostavremenaavrloestojeuMatlabu,kaoiudrugimprogramskimjezicimapotrebnoponovitiistinizkomandiimodifikovatiihdabismopostiglieljenerezultate.UovomsluajujelakeraditisaMatlabskriptimanizovimakomandisauvanihudokumentukojeseutomsluajumoguizvrsitiautomatskijednazadrugomjednostavnimpozivomtogskripta.Skriptisemogupisatiubilokomeditorskomprogramu(akiuWordu,tonijepreporuljivo)aliihjenajlakepisatiusamomprogramskomprozoru(EditorWindow)uMatlabu.DabistezapoelinoviscriptmoetekoristitiMatlabmeni(FileNewmfile).MatlabskriptinemajuulaznihiliizlaznihvrijednostitopredstavljajednuodglavnihrazlikaizmedjuMatlabskriptiiMatlabfunkcijaokojimaemopriatinetokasnije.IstotakoMatlabskriptimogukoristitiioperiratijedinonavarijablamakojesenalazeurandomprostoru.NovevarijablesemogukreiratiizMatlabskriptananainkaotosmotoradiliuprethodnojlekcijialiu(komandnomprozoru)anakonizvrenjaskriptaovevarijableostajuidaljeuMatlabovomrandomprostoru.DabisepokrenioscriptizvrilekomandeiztogMatlabskripta,potrebnojeukomandnomprozoru,poslijestandardnogMatlabodziva>>otkucatiimeskripta.Dabiselakerazumjeli,skriptimogusadravatiilinijekomentara.Dabiseoznailikomentari,linijusakomentaromtrebazapoetisa%.BojatekstanatojlinijieseutomsluajuobinopromijenitiuzelenuiMatlabeignorisatiovakvelinijeprilikomizvrenjaskripta,alieprogrameruidrugimkorisnicimabitiodkoristijereboljeobjasnitioperacijusamogskripta.NekekomandekojesukorisneupisanjuMatlabskriptasupause zaustavljaizvodjenjeskriptaiekadakorisnikpritisnebilokojutipkuna

    tastaturidabisenastaviloprocesiranjekomandiizskripta.keyboard zaustavljaizvodjenjeskriptaivraakomandustandardnomMatlabodzivu

    >>;kadaseukucakomandareturnprocesiranjekomandiizskriptasenatavlja.

    break zaustavljaizvodjenjepetljeiliskriptaukomseprogramnaao.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    28

    return izlaziizfunkcijeukojojseprogramnaao.2. PrimjerSlijedeiuputstva(#)napiitesvojprvimatlabscript.(#sekoristiuostatkutekstadabivamdaloindikacijudajepotrebnodanetouradite.)#PokreniteMatlabiotvoritenoviscriptuprogramskomprozoru.#Uprozoruupiiteslijedee:% Lecture 2 Example 1 A1 = [1 2 3]; A2 = [4 5 6]; % bez koritenja toke-zareza komande i rezultati % e biti ispisani na ekranu A = [A1; A2] B = [A1' A2'] C = A*B #Sauvajtedatotekuuvaemdirektoriju(FileSaveas)idajtejojodgovarajueime.#Pokreniteovajscripttakotoeteotkucatiimekojestedaliovomskriptuukomandnomprozoru.NaekranueseispisativrijednostimatricaA,BiCukomandnomprozoru.Radniprozoretakodjesadravatiistevarijable.TakozvanidebugMatlabprograma(testiranje,provjeraiotklanjanjegrekiuprogramu)semoeobavitinaraznenaine.OvdjeemopokazatinekeosnovnepostupkepomoukojihsetestiraIdebugujeprogram.#Dabistevidjelitrenutnevrijednostivarijabliuvaemrandomprostorupozicionirajtekursornavarijablukojavasinteresujeuprogramskomprostoru.Pravokutnikkojisepokaeesadravativrijednosttevarijable.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    29

    #Akoelitedaseprocesiranjeskriptazaustavinatonoodredjenommjestumoetepostavitibreakpointnatulinijuuprogramu.PostavitekursornalinijuuprogramskomprostoruiumenijuizaberiteSet/Clearbreakpointopciju.Postavljenibreakpointeseindiciraticrvenomtokomnalijevojmarginiskriptaporedtelinijeakosteovouradilikakotreba.#Sadaponovopokreniteprocesiranjeskriptaiprogramesezaustavitinazadatojliniji.Zelenastrelicaeoznaavatilinijunakojojseprogramzaustavio.Istotako,moemoprimjetitidajestandardniMatlabodziv>>promijenjenuK>>kaoindikacijadajeMatlabpresaoudebugoperaciju.Naovajnain,vrijednostivarijabliurandomprostorusesadamoguispitati(whoskomandajepoprilicnokorisnauovimsituacijama).Sveovosemoeuraditiibezmenija,koristeiopcijenatraciiznadprogramskogprozora.Pokuajtesveovoponovitikoristeiovumogunost.Uzto,istraiteidrugemogunostikojemogubitikorisnekoddebugaMatlabskriptiifunkcijaubudunosti.Clear serijeavasvihpostavljenihbreakpointaSingleStep izvravascript(ilifunkciju)linijupoliniju.StepInto ulaziudrugufunkcijuakojepozvanaizskripta.StepOut zavravaprocesiranjefunkcijeiliskripta.Quit zavravadebugprograma.#Pokuajteiskoristitinekeodovihmogunostiuskriptukojistenapisali.Matlabimaimogunostpostavljanajaautomatskogzaustavljanjanapojedinojlinijiprogramaupojedinimsituacijama(akonaprimjervarijablaizlaziizopsegakojisekoristiuMatlabu,ilijeotkrivenagrekailiupozorenjeuskriptu).Ovosutakozvaneautomaticbreakpoints.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    30

    3. KontrolatokaprogramaKodpisanajamatlabskriptiseponekadmoetenaiusituaijidanekuoperacijumorateponovitiveibrojputa.OvakvesituacijetrebaizbjegavatijerusporavajuradMatlaba,kadgodjemoguepokuajteiskoristitimogunostioperacijesavektorima,npr.dabisteizraunalisumusvihelemenatauvektoru,jedanodbrihiefikasnijihnainajedapomnozitetajvektorsavektoromukomesusvielementijediniceaveliinamujekompatibilnasaveliinomvektoraijusumuelitedobiti.Ipak,akonemadrugogizlaza,maratekoristitipetljeuMatlabu.forpetljusteveimaliprilikevidjetiiisprobatiuprethodnojlekciji.OnaseinajvisekoristiuMatlabu.Porednjeestosekoristiidrugavrstpetlje,tzv.whilepetlja.forpetljasekorsitidabisejednaoperacijailidioprogramaponoviovieputa.Unutarjedneforpetljemoguejesmjestitidrugumanjuforpetlju.Ovosenazivaugnjedenaforpetlja.IsprobajtepromjerugnjedenepetljeukomandnomprozoruMatlaba: for k = 1:4 for p = 1:4 A(k,p)=1/(k+p-1);

    end end A DrugividkontroleprogramauMatlabujetestiranjeuslovanaosnovukojihseprogramondamoepreusmjeritiinastavitinarazliitenaine.Grananjeprogramanakontestiranjasepostieifkonstukcijom.ifkonstrukcijasemoekorsititisamazasebeilisemoekombiniratisaelseifielseMatlabrijeima.Koritenjeifelseifiifelsekonstrukcijajevrloslinokaoidrugimprogramskimjezicima.Testovisudanizasvakiifilielseifiskazuskriptusetestirajudoksenepronadjetoaniskaz.Operacijailiskupoperacijakojipotpadajupodtajiskazseizvreiprogramseondanastavljasakomandamakojeslijedeendiskazkojisemoranalazitinakrajusvakeifelseiliifelseifkonstrukcijeuskriptu.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

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    31

    end B Usloviiizrazikojisenajeejavljajuuifkonstrukcijamaobinokoristeoperatore== dalijejednako?~= dalinijejednako? dalijevee?= dalijeveeilijednako?Ovioperatorisemogukombiniratisasljedeimlogikimoperatorima& logikoi.| logikoili.~ logikone.xor iskljuivoili(ilijedanilidrugialineoba).any tono,akojeijedanelementvektorarazliitodnule.all tono,akosusvielementivektorarazliitiodnule.switchkonstrukcijajepogodnazamjenazaifelseifkonstrukcijuusluajevimakadajemogunostizboranakontestiranjaifuslovavelika.switchizraunavaiprovjeravavrijednostkojajedananakonterijeiuprogramuinakontogaizvravakomandukojaslijediposlijeodgovarajuecaseizjave.itavaswitchkonstrukcijaseobinozavravasalinijomkojasadravarijeotherwiseijednomilinizomkomandikojeslijedeizatoga.Ovekomandeilinizkomandiebitiizvreneakonijednaodcaseizjavaneodgovaravrijednostiizraunatojuswitchliniji.Usluajudajeviecasevrijednostiistinito,izraunavasesamoprva.Uovomprimjeru,operacijakojaslijedidrugicaseebitiizvrena.ProvjeritekakoovoradiuMatlabu.switch (12/6) case 1 a = 1;

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    32

    case 2 a = 2; case 3 a = 3; case 4 a = 4; otherwise a = 5; end a Nakraju,spomenimojojednuvrstupetljekojasekoristiumjestoforpetljeusluajevimakadasetoanbrojponavljanjaMatlabkomandiupetljineznaprijepoetkaizvrenjasamepetlje.Uovimsituacijamasekorstiwhilepetlja.Evoprimjerakojiilustriraupotrebuovepetlje.Pokuajmo,koristeiwhilepetljuodreditibrojuzastopnihcijelihbrojevaijajesumajednakailiteknetomanjaod210.int = 1; int_sum = 0; max_val = 210; while int_sum < max_val int_sum = int_sum + int; int = int + 1; end 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 RaznioblicipetljiiuslovazagrananjeuMatlabprogramimasuprikazaninasljedeojstranici.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    33

    forpetljaforbroja=izrazkojiuveavabroja grupaMatlabkomandiend

    whilepetljawhileuslov1 grupaMatlabkomandi1endgrupaMatlabkomandi2

    ifgrananjeifuslov1 grupaMatlabkomandi1end

    ugnjedenoifgrananjeifuslov1 grupaMatlabkomandi1 ifuslov2 grupaMatlabkomandi2 end grupaMatlabkomandi3endgrupaMatlabkomandi4

    ifelsegrananjeifuslov1 grupaMatlabkomandi1else grupaMatlabkomandi2end

    ifelseifgrananjeifuslov1 grupaMatlabkomandi1elseifuslov2 grupaMatlabkomandi2elseifuslov3 grupaMatlabkomandi3elseifuslov4 grupaMatlabkomandi4end

    switchcasegrananjeswitchindikatorcasevrijednostindikatora1 grupaMatlabkomandi1casevrijednostindikatora2 grupaMatlabkomandi2otherwise grupaMatlabkomandi3end

    Ifelseifelsegrananjeifuslov1 grupaMatlabkomandi1elseifuslov2 grupaMatlabkomandi2elseifuslov3 grupaMatlabkomandi3elseifuslov4 grupaMatlabkomandi4else grupaMatlabkomandi5end

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    34

    4. MatlabfunkcijeIporedsvegaprethodnonavedenogoMatlabskriptima,najveasnagaMatlabaipopularnostovogprogramaipakleiufunkcijama.itavMatlabjezikjeibazirannafunkcijama.UMatlabupostojivelikibrojugradjenihfunkcijakaotosunpr.sin,sqrt,invitd.OvesufunkcijeugradjeneuosnovnujezgruMatlaba,veomasuefikasneibrzoseizvodealisunepristupane,nemoeseimsepriiividjetikakosutononapisane.DrugagrupaugradjenihMatlabfunkcijasupristupaneuMatlabdadotekama,kojekaoiMatlabskriptiimajuproduetak~.muimenu.Potoseovimfunkcijamamoepristupiti,onesemogudaljemijenjatiiprilagodjavatipotrebamakorisnika.Dobraidejajedaseutomsluajusauvajupoddrugimimenomkakobioriginalneugradjenefunkcijeidaljeobavljalezadatakkojiimjepoetnoinamjenjen.Takvafunkcijajenpr.sinh.ListeraznoraznihfunkcijasemoguvidjetikoristeiMatlabhelpkomandu,npr.help elfun eispisatilistuosnovnihmatematikihfunkcija.help specfun eispisatilistuspecijalnihmatematikihfunkcijahelp elmat enaekranu(komandniprozor)ispisatilistuosnovnihfunkcijaza

    manipulacijusamatricamaivektorima.SnagaifleksibilnostMatlabasekrijeumognunostidasvakikorisnik/programerkreirasvojesopstvenefunkcijepremapotrebi(imogunostima).PisanjefunkcijejevrloslinopisanjuMatlabskripta,koristiseistiMatlabeditor(programskiprozor)izavrenafunkcijasespremaudatoteku,tj.dokumentsaproduetkom~.m.DvijeosnovnerazlikeizmedjukreiranjaMatlabskriptaifunkcijesuslijedee:

    1. Funkcijamorasadravatikljunurijefunctionnapoetkuprvelinije.2. Varijablekojesekoristeufunkcijisenenalazeumatlabovomrandomprostoru.Naovja

    nainsesprijeavajukonfliktniizmedjuvarijablikojebimogleimatiistaimenaurazliitimfunkcijama.RadnomprostorusvakefunkcijesemoepristupitisaK>>odzivakojijedostupanjedinoudebugoperaiji.Informacijeivarijableseipakmorajukomuniciratii

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    35

    izmedjupojedinihfunkcijakaoiizmedjufunkcijaiMatlabskriptikojekoristetefunkcije.Ovoseodvijapomouulaznihiizlaznihvarijablikojemogubitidefiniranezasvakufunkciju.

    Procesdeifniranjaikreiranjafunkcijesemoeopisatikrozslijedeestepenice:1. Izaberiteimezavaufunkciju.Priovomevoditepanjudanekoristiteimekojejevedano

    nekojodugradjenihMatlabfunkcijailinekojodfunkcijakojesteranijekreirali.2. UMatlabeditoru(tj.programskomprozoru)otvoritenovidokument.3. Prvalinijafunkcijemoraimatislijedeioblik:

    function[listaizlaznihvarijabli]=ime_funkcije(listaulaznihvarijabli)4. Nakonovogaupiitekratkiopisfunkcije,npr.kojajesvrhafunkcije,kakoradiikakose

    poziva.Svakaodovihlinijatrebadazaponesa%tj.,moradabudedatakaokomentar.OveinformacijeesepojavitikadafunkcijabudezavrenaaukomandnomprozorusekaoizabilokojudruguMatlabfunkcijuotkuca:

    helpime_funkcije5. Nakraju,slijedinajteiposao,ukucajteMatlabfunkcijunizkomandikojeeimatieljeni

    rezultatnakonizvodjenjaovefunkcije.Korisnojedasekodfunkcija,kaoikodMatlabskriptidodadovoljnokomentarakakobikorisnicima(aivama)bilijasnidetaljioperacijeovefunkcije.StudentivrloestozaboravljajuiliizbjegavajudodavanjekomentaranjihovimMatlabfunkcijama,tokasnijetefunkcijeestoinipotpunonerazumljivimineupotrebljivim.Pokuajtetoizbjei.(Dakle,pokuaosam.)

    SlijediprimjervrlojednostavneMatlabfunkcijekojaizraunavapovrinutrokutaakosupoznateduljinesvihstranicatogtrokuta.Jednabakojasekoristiikojaebitiglavnidionaefunkcijeje:

    P s s a s b s c Pjepovrinakojaseizraunava,a,bicsuduljinestranicaasjedefinisanosa:

    2s a b c DabistekreiraliovufunkcijuuMatlabu:#OtvoritenovidokumentuMatlabeditoriotkucajteslijedeitekstovefunkcije:function [A] = area(a,b,c) %compute the area of the triangle whose sides %have lengths a,b,c %uses the perimeter formula

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    36

    %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)); %%%%%%%%% end of area %%%%%%%%% #Spremiteovajdokument.Imepodkojimstespremilidokumentmoraodgovaratiimenukojestedaliovojfunkciji,tj.imedokumentaukojispremateovufunkcijumorabitiarea.m.Ovoimevambitiautomatskiponudjenokodspremanjaovefunkcije,provjeriteiprihvatite.#Otkucajtehelpareaukomandnomprozorudabistedobilipomozaovufunkciju.#Pozovitefunkcijusakomandnogprozora,definiuipritomulazneveliine,npr.area(1,1,1).Ovimeteizraunatipovrinujednakostraninogtrokutagdjejesvakastranicaduljine1.#Nakonovogaotkucajtesukomandnomprozorudabisteprovjerilivrijednostovevarijable.Porukakojustedobilibitrebalabiti:Undefinedfunctionorvariable's'.Matlabneprepoznajeovuvarijabluiakojekoritenaufunkcijiarea.Moeteliobjasnitizato?#Izmjenitevaufunkcijutakodaporedizlaznevarijableareadefinietejojednuizlaznuvarijablus.Ponovopozovitefunkciju.Kolikorezultatasadadobijate?Akojouvijekdobijatesamojedanrezultatpovrinuuemujesadaproblem?#Pokuajteproiritivaufunkcijutakodaprijenotosekrenenaizraunavanjepovrinefunkcijaprovjerijelisumadvijekraestraniceveaodtreestranice.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    37

    5. MalovieoMatlabgraficiUprvojlekcijisteseupoznalisaosnovnimmogunostimamatlabgrafike.PoredfunkcijaglavnirazlogpopularnostiMatlabajeusnanojgrafici.Mogunostisupunoveenegotosetodanaslutitiizprvelekcije.ZapocnimoponovotakotoemokreiratijednostavangrafuMatlabu.#Ukomandnomprozoru,otkucajteslijedeematlabkomande.>> 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+-'); Trebalibistedobitidvijeslike.Akoihneviditedobro,moguejedajejednapostavljenatonoprekodruge.Maloihrazmaknite.#Odaberiteopcijuzarunopopravljanjeslikesamenijanaslici(ToolsEditPlot).Pomouoveopcijemoeteizbrisatigraf,kopiratigaitakogaprebacitinadrugusliku.Pokuajtetouinitisaovimgrafovima.Umjestovieslika,iliiscrtavanjaviegrafovanajednojsliciuMatlabusekoristiiopcijakojomseslikadijelinaviepodslikakojeseondaponaajukaoindividualneslikeokojimajedosadabilorijei.#Zatvoriteprethodneslikeiprouiteefektesljediihkomandi: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) Svakapodslikasemoeoznaavati,bakaotostetoradiliisaobinimslikamauprvojlekciji.Dabistesajednepodslikepreslinadrugumorateizvrsitikomandusubplot(?,?,?).

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    38

    6. TrodimenzionalnagrafikaPovrinasemoematematikidefiniratikaofunkcijakojapovezujesvakutokunamreisanekomvrijednou.Naprimjer,koristeidvodimenzionalnumreu(tj.ravninu)povrinasemoeiskazatijednadbom:

    ,z f x y Dabismoiscrtalipovrinuz,opsegvrijednostivarijablixiymorabitidefiniran.Istotakorezolucijamreerazmakizmedjudvijesusjednexidvijesusjedneyveliinetakodjemorabitidefiniran.Akonaprimjerizaberemoopsegzaxod2do4aopsegzayod1do3irezloucijuobevarijablepostavimona0.5,odgovarajuamreasemoedefiniratikoristeiMatlabkomandumeshgrid:>> [X,Y] = meshgrid(2:0.5:4, 1:0.5:3) ElementiovemreesuustvarikoordinatetoakauXYravnini.VrijednostpovrinesesadamoeizraunatizasvakutokuuovakodefiniranojXYravnini.Koristeiovumreu,moemonaprimjerpovrinupredstavitijednadbom:

    2 2( 3) ( 2)z x y UMatlabubismoovoizraunalinaslijedeinain: >> Z = (X-3).^2-(Y-2).^2

    MatricaZkojajerezultatgornjekomandepredstavljavrijednostovepovrineusvakojtokiprethodnodefiniranemree.Svetosadatrebauinitidabisepredstavilaivizualiziralaovapovrinajeispravnoupotrijebitimatlabkomandumesh. >> mesh(X,Y,Z) >> title('saddle'), xlabel('x'), ylabel('y') #IzvriteovedvijekomandeuMatlabkomandnomprozoruitrebalibistedobiti3Dslikuovepovrine.#ZanimljivemogunostuMatlabujerotacijadobijenepovrine.Pokuajte(ToolsRotate3D).#Dabistedobilikontureovepovrinemoeteiskoristiticontourkomandu:

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    39

    >> contour(X,Y,Z)

    7. elijeistruktureuMatlabuIakosumatricenajprirodnijeiosnovnevarijableuMatlabu,postojeikompleksnijiformatikojisedostakoristeunaprednijimMatlabprogramima,kakouskriptama,takoiufunkcijama.elijeistructuresukolekcijevarijablirazliitihvrsta.Ovdjeemosamokratkoobjasnititosuustvarielijeistruktureiosnovneprincipenjihovogkoritenja.

    7.1. elijeelijajeustvarimatricasaelementimaraznihvrstaidimenzija.Kreirasekoristeivitiastezagrade,{}.Napimjer,akoukucateiizvriteslijedeuMatlabkomandu: A = {rand(2,2,2), 'Hello', 17.35} vidjeteteprvielementoveelijekao[2*2*2double]jerjeprevelikihdimenzijadabiseprikazaoalidrugadvaelementatextikonstantasudovoljnomalidabibiliprikazaniukomandnomprozoru.Dabisepristupilopojedinimelementimaelije,ponovosemogukoristitivitiastezagrade,aakojepotrebno,kutnezagradesekoristedabisepristupilopojedinimelementimatogaelementa.JasnijejeakoseovouradiuMatlabu: A{1,1}(2, :, 1) ans = 0.2311 0.4860 Nasliannainsemoguidefiniratinovielementielije: B {1,1} = 1:10 B{2,2} = A Nekestvarikojejevrijednoprimjetitiuradusaelijama

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    40

    Veliinaelijeje2x2iakosmokreiralisamodvaelementa.Drugakomandajeodredilaveliinuelijeanedefiniranielementielijesuautomatskidobilivrijednost0.DimezijeelijaseuredjujudinamikiuMatlabu(kaoiusluajumatrica).

    elijamoesadravatidrugeelije. Dabisepristupilosadrajuelije,indexpristupajeodredjenindeximauvitiastim

    zagradama elijekojesadredrugeelijesenemijenjajuautomatski.AkosesadrajelijeAu

    prethodnomprimjerupromijeni,sadrajelijeBseneeautomatskipromijeniti.Podsijetimoseprimjeraizprolevjebe,gdjesmoiskoristilimatricudabismospojiliisauvaliveidioteksta.Stringovepretvoriliumatricukoristeistr2matfunkciju:negative = str2mat(... 'We regret to inform you,',... 'your application has been rejected.') closing = 'Sincerely, Big Boss'; name = 'Mr. Looser'; message = str2mat(['Dear', name], negative, closing) Slianrezultatsemoepostiikorsiteielijuumjestomatrice.Utomsluajupojedinanistringovisemogukombiniratinaslijedeinain:cellmessage = {['Dear', name], negative, closing} Uovomsluajujesvakiodstringova,elementupoljuelijapodnazivomcellmessage.Matricujemoguepretvoritiupoljeelijaiobrnuto.Ovosepostiefunkcijamacharicellstr.message = char(cellmessage) cellmessage = cellstr(message)

    7.2. StruktureStrukturesekoristezagrupiranjedvijeilivieMatlabvarijablikojesunanekinainpovezaneilisekoristedaopiuistiobjektiliproblem.Naprimjer,pokuajmoopisatiloptukojajeusplobodnompadusanekevisine.Masaloptesemoeiskazatijednimbrojem,apozicijalopteuprostorusemoeprikazativektoromkojiimatrielementa.

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    41

    Brzinaloptebimoglabitijojednadodatnavarijablauovogrupi.SveoveosobinesemoguskupitiujednustrukturuuMatlabunasljedeinain:>>ball.mass = 10; >>ball.position = [0, 0, 100]; >>ball.velocity = [0, 0, 0]; Dabistevidjelisadrajnovoformiranestructure,ukomandnomprozoru,kaoIkoddrugihMatlabvarijabli,otkucajteimestructurekodMatlabodziva:>>ball Pojedinanielementistructuresenazivajupoljima.Poljimastructuresepristupanaslijedeinain: >> ball.position ans = 0 0 100

    StandardneMatlaboperacijesemoguprimjenitinaelementestrukturekaoinasvakudruguvarijablu.Dabismopromijenilipozicijulopteza10uysmjeru: >> ball.position = ball.position + [0, 10, 0] ball = mass: 10 position: [0 10 100] velocity: [0 0 0]

    Novapoljasemogudodavatistrukturama.Akonaprimjerelitedodatinovipodatak,polumjerlopteustrukturukojustekreirali: >> ball.radius = 2.0

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    42

    Akoeliteraditisavieobjekatauvaojstrukturi,noviobjektiseistotakomogudodatiusvakomtrenutkurada.Ispitajtekojajeposljedicaslijedeenaredbe:>> ball(2:3,1) = ball;

    Stukturaballjesadapromijeniladimenzijesa1x1na3x1,dodanasujojdvanovaelementa.Nepolja,negodvijeitavegrupepoljakojasuinilapoetnustrukturu.Svakiodovihelemenataimaisteelementekaoiprijanjaballstruktura.Elementizasadaimajuiistevrijednostikojesadamoemoizmjeniti.Pokuajmosvakojodovihloptidatirazliitumasu:>> ball(1).mass = 1.0; >> ball(2).mass = 5.0; >> ball(3).mass = 10.0;

    Provjerimotojesadrajdrugelopte,tj.drugogelementauovomvektorustruktura: >> ball(2)

    Masesvihloptiustrukturisemogubrzoprovjeritinasljedeinain: >> ball.mass ans = 1 ans = 5 ans = 10

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    43

    Matlabjedaotriodvojenaodgovoranaovajupit.Boljinaindaseovouradijedasesvatriodgovoraskupeuvektorkoristei[]zagrade.Pokuajteovukomandu: >> [ball.mass]

    Kakobisteujednojlinijiizraunaliukupnumasusvihloptiuovojstrukturi?>> totalMass = sum([ball.mass])

    tobisedesilodasteumjestoovekomandeotkucali: >> totalMass = sum(ball.mass)

    Poruka:[]zagradesuvane!

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    44

    8. Vjebe

    1. Fibonnaciserijajedfiniranasa:

    1 2n n nf f f 3, 4,5...n if1=0,f2=1.NapiiteMatlabfunkcijukojaeizraunavatintielementoveserije(ulazna

    varijablajen,rezultatjefn). Nakontostenapisalisvojufunkcijuzatraiteodgovorodpredavaa(dokumentiL2Fib1,

    L2Fib2,L2Fib3andL2Fib4).Pomoukomandeprofileispitajteefikasnostsvakogodovihrijeenja.

    2. Prikaitegrafovefunkcija:

    12 3

    2 122 2

    10 1sin 1 1, , , 41 4

    xx xy u x v wx xx x

    najednojsliciza0x10ipravilnooznaiteslike.

    PokuajteisprobatiIiskoristitisljedeeMatlabkomande:

    >> subplot(222), axis([0 10 0 10])

    >> grid

    >> grid

    >> hold on

    >> plot(x,v,'- -'), hold off, plot(x,y,':')

    3. Napiitefunkcijukojaesimuliratibacanjekocke.(Matlabfunkcijafloorevammoda

    korisnodoidabisterijeiliovajzadatak.)

  • BranislavVuksanovic Matlabzaininjere Dio3:ProgramiranjeuMatlabu

    45

    4. Nacrtajtepovrinukojajedefiniranafunkcijom:

    2 22, x yf x y x y e udomenudefiniranomsa2x2,2y2.Pronadjiteminimumimaximumove

    funkcijekaoivrijednostixiyuovimtokama.Naistojslicinacrtajtekontureovepovrineioznaitepoloajpronadjenihtoakanaovomcrteu.Funkcijefindimaxbivammoglebitiodkoristiuovojvjebi.

    5. NapiiteMatlabfunkcijukojaceseponaatinasljedeinain:

    Akojupozovetebezikakvihulaznihvrijednost,neeraditinita Akojupozoveteidatejojnekivektorkaoulaznuvrijednost,funkcijaenacrtati

    ovajvektor AkojupozoveteIdatejojdvavektorakaoulaz,funkcijaenacrtatiprvivektorkao

    funkcijudrugogvektora. Akojupozovetesavieoddvijeulaznevrijednost,funkcijaeautomatski

    razumijetidajeprvaulaznavarijablavektorkojitrebanacrtatiadasuostaliulaziparametrisakojimatrebaoznaitiovajgraf.Oveoznakemogubitisamosljedee:naslovslike,oznakanaxosiioznakanayosi,tj.uMatlabu:'title','xlabel'and'ylabel'.

    DabisterijeiliovajproblemmoratietekoristitiMatlabkomandevaragin,nargina

    vjerovatnoiisempty,isnumeric,lowerandlength.SvakaMatlabfunkcijamoeimatinajvieosamulaznihvrijednosti.