uždavinių sprendimas matlab...

17
Operacijų tyrimas. Įvadas. Laboratoriniai darbai 1 Uždavinių sprendimas MATLAB aplinkoje Matlab – tai interaktyvi sistema, skirta atlikti inžinerinius bei mokslinius skaičiavimus. Sistemos aplinkoje galima dirbti dviem režimais: dialoginiu, kai skaičiavimai atliekami iš karto užrašius komandą arba išraišką Matlab komandiniame lange (Command Window); programiniu, kai uždavinio sprendimo algoritmas užrašomas Matlab programavimo kalba ir saugomas M-faile (M-file). Įvykdžius grafikos komandą, atveriamas grafinis langas (Figure). Komandiniame lange įvedimo vietą žymi simbolis >>. Užrašius išraišką ir paspaudus <Enter> ekrane išvedamas rezultatas, pavyzdžiui: >> 2/3+sin(5) ans = -0.2923 Jei išraiška neįvardinta, atsakymas turi standartinį vardą ans. Jei apskaičiuota reikšmė bus naudojama vėliau, tikslinga ją priskirti kintamajam. Kaip ir matematikoje, tam naudojamas lygybės (=) ženklas, pavyzdžiui: >> a1=2/3+sin(5) a1 = -0.2923 Atsakymas į komandinį langą neišvedamas, jei eilutės gale parašytas kabliataškis (;). Visi kintamieji ir komandos saugomi atmintyje iki darbo pabaigos. Pašalinti kintamąjį galima komanda clear <kintamojo_vardas>, visus kintamuosius iškart – komanda clear. Komandinis langas išvalomas komanda clc. Visi grafiniai langai užveriami komanda close all. Kintamojo reikšmė į ekraną išvedama parašius jo vardą ir paspaudus <Enter>. Visų darbalaukio kintamųjų sąrašas iškviečiamas komanda who, detalus sąrašas – komanda whos. Žymeklio valdymo klavišais (↑↓) galima pakartotinai iškviesti ir redaguoti jau įvestas eilutes. Aukščiau pateiktame pavyzdyje skaičiai vaizduojami numatytuoju (Default) formatu Short (trumpas). Išvedamų skaičių formatas nustatomas File meniu komandos Preferences… langelyje Numeric Format arba komanda format, pavyzdžiui: >> format long >> a1 a1 = -0.29225760799647 Žemiau pateiktoje lentelėje parodyta, kaip įvairiais formatais išvedama išraiška 2/3. short Trumpas skaičius 0.6667 long Ilgas skaičius 0.66666666666667 short e Trumpas normalizuotas skaičius su dešimtainiu daugikliu 6.6667e-001 long e Ilgas normalizuotas skaičius su dešimtainiu daugikliu 6.666666666666666e-001 bank Valiutos formatas 0.67 rational Racionalioji trupmena 2/3 Dialogo lange Preferences… galima nustatyti komandinio lango šriftą (Font); jo stilių, dydį, atskirų elementų vaizdavimo spalvas bei kitas grafinės sąsajos savybes.

Upload: others

Post on 01-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 1

Uždavinių sprendimas MATLAB aplinkoje Matlab – tai interaktyvi sistema, skirta atlikti inžinerinius bei mokslinius

skaičiavimus. Sistemos aplinkoje galima dirbti dviem režimais: • dialoginiu, kai skaičiavimai atliekami iš karto užrašius komandą arba

išraišką Matlab komandiniame lange (Command Window); • programiniu, kai uždavinio sprendimo algoritmas užrašomas Matlab

programavimo kalba ir saugomas M-faile (M-file). Įvykdžius grafikos komandą, atveriamas grafinis langas (Figure). Komandiniame lange įvedimo vietą žymi simbolis >>. Užrašius išraišką ir

paspaudus <Enter> ekrane išvedamas rezultatas, pavyzdžiui: >> 2/3+sin(5) ans = -0.2923 Jei išraiška neįvardinta, atsakymas turi standartinį vardą ans. Jei apskaičiuota

reikšmė bus naudojama vėliau, tikslinga ją priskirti kintamajam. Kaip ir matematikoje, tam naudojamas lygybės (=) ženklas, pavyzdžiui:

>> a1=2/3+sin(5) a1 = -0.2923 Atsakymas į komandinį langą neišvedamas, jei eilutės gale parašytas

kabliataškis (;). Visi kintamieji ir komandos saugomi atmintyje iki darbo pabaigos. Pašalinti

kintamąjį galima komanda clear <kintamojo_vardas>, visus kintamuosius iškart – komanda clear. Komandinis langas išvalomas komanda clc. Visi grafiniai langai užveriami komanda close all. Kintamojo reikšmė į ekraną išvedama parašius jo vardą ir paspaudus <Enter>. Visų darbalaukio kintamųjų sąrašas iškviečiamas komanda who, detalus sąrašas – komanda whos. Žymeklio valdymo klavišais (↑↓) galima pakartotinai iškviesti ir redaguoti jau įvestas eilutes.

Aukščiau pateiktame pavyzdyje skaičiai vaizduojami numatytuoju (Default) formatu Short (trumpas). Išvedamų skaičių formatas nustatomas File meniu komandos Preferences… langelyje Numeric Format arba komanda format, pavyzdžiui:

>> format long >> a1 a1 = -0.29225760799647 Žemiau pateiktoje lentelėje parodyta, kaip įvairiais formatais išvedama

išraiška 2/3.

short Trumpas skaičius 0.6667 long Ilgas skaičius 0.66666666666667 short e Trumpas normalizuotas skaičius su

dešimtainiu daugikliu 6.6667e-001

long e Ilgas normalizuotas skaičius su dešimtainiu daugikliu

6.666666666666666e-001

bank Valiutos formatas 0.67 rational Racionalioji trupmena 2/3

Dialogo lange Preferences… galima nustatyti komandinio lango šriftą (Font); jo stilių, dydį, atskirų elementų vaizdavimo spalvas bei kitas grafinės sąsajos savybes.

Page 2: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 2

Katalogo, kuriame saugomi vartotojo failai, kelias nurodomas įrankių juostos langelyje Current Directory naudojantis šalia esančiu mygtuku (…).

Kintamųjų vardai parenkami laikantis šių taisyklių: • vardas sudaromas iš lotyniškų raidžių, skaitmenų, pabraukimo

simbolių ir turi prasidėti raide; • skiriamos didžiosios ir mažosios raidės (a ir A – skirtingi vardai); • vardas turi būti ne ilgesnis kaip 19 simbolių (Matlab 5 versija) arba 31

simbolis (Matlab 6 versija). Matlab turi rezervuotus žodžius, kurių negalima vartoti kaip kintamųjų vardų:

for, end, if, while, function, return, elseif, case, otherwise, switch, continue, else, try catch, global, persistent, break.

Taip pat yra kitiems tikslams nenaudotinų specialiųjų kintamųjų. Be jau minėto ans, skirto paskutiniam apskaičiuotam rezultatui įvardinti, galima paminėti tokius specialiuosius kintamuosius: i (arba j) – 1− , pi – skaičius π, inf – begalybė, NaN – neapibrėžtumas 0/0 arba ∞/∞, realmin – mažiausias realusis skaičius (2.2251e-308), realmax – didžiausias realusis skaičius (1.7977e+308).

Eilutės dalis, prasidedanti %, – komentarai. Jie skirti skaitytojui, o vykdant Matlab programą į juos nekreipiama dėmesio.

Paprastieji skaičiavimai Aritmetiniai veiksmai. Aritmetinėse išraiškose naudojami šie aritmetinių

operacijų ženklai: +, –, *, /, \ (atvirkštinė dalyba), ^ (kėlimas laipsniu). Didžiausią prioritetą turi kėlimas laipsniu, po to daugyba ir dalyba, sudėtis ir atimtis. Vienodo prioriteto operacijos vykdomos iš kairės į dešinę. Norint pakeisti eiliškumą, naudojami skliaustai. Būtina apskliausti trupmenos skaitiklyje arba vardiklyje esančias išraiškas.

Išraiškose galima naudoti vidines ir išorines funkcijas. Vidinės funkcijos saugomos Matlab bibliotekose, išorinės (jas gali programuoti vartotojas) – M-failuose. Funkcijų argumentai rašomi skliausteliuose, pvz. sin(x) reiškia skaičiaus x sinusą, exp(x) – ex, sqrt(2*x-1) – 12 −x , abs(5^(1/3)) – skaičiaus 3 5 modulį.

Dažniausiai naudojamos šios matematinės funkcijos: sin – sinusas, asin – arksinusas, cos – kosinusas, acos – arkkosinusas, tan – tangentas, atan – arktangentas , cot – kotangentas,

exp – eksponentinė funkcija, log – natūrinis logaritmas, log10 – dešimtainis logaritmas, log2 – dvejetainis logaritmas, sqrt – kvadratinė šaknis, abs – modulis (absoliutinis dydis), pow2(x) – 2x.

Įvykdžius komandą help <funkcijos_vardas>, pateikiama informacija apie norimą funkciją. Visas vidinių funkcijų sąrašas išvedamas komanda help elfun.

Masyvai (vektoriai) ir daugianariai Masyvo elementų reikšmės (vektorių komponentės) užrašomos laužtiniuose

skliaustuose ir skiriamos tarpais arba kableliais: V=[v1 v2 v3 … vn];

čia v1, v2, v3, … vn – masyvo V elementų reikšmės, pavyzdžiui: V=[5 –4 9 14]. Jei jos sudaro aritmetinę progresiją, galima užrašyti trumpiau:

V= x0: hx: xg; x0 – pradinė reikšmė, hx – kitimo žingsnis, xg – galinė reikšmė, t.y. x=x0(hx)xg. Jei hx=1, jį galima praleisti, t.y.

Page 3: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 3

V = x0: xg. Pavyzdžiai >> V=[1 4 -5] V = 1 4 -5 >> x=-1:1.5:6 x = -1.0000 0.5000 2.0000 3.5000 5.0000 Užrašas A(i) reiškia i-ąjį masyvo A elementą. Užrašas A=[A1 A2] – masyvų A1 ir A2 suliejimas į vieną masyvą A. Su masyvais Matlab galima atlikti tokius veiksmus:

• transponuoti, t.y. eilutę paversti stulpeliu ir priešingai (užrašoma A′); • sudėti bei atimti (jei abu vienodo ilgio); • padauginti iš skaičiaus; • sudauginti (jei abu vienodo ilgio; pirmasis vektorius – eilutė, antrasis –

stulpelis arba atvirkščiai). Pavyzdys >> y=[1 2 3] y = 1 2 3 >> z=[4 5 6] z = 4 5 6 >> u=y+z u = 5 7 9 >> u1=y*z' u1 = 32 >> u2=y'*z u2 = 4 5 6 8 10 12 12 15 18 Dirbant su masyvais galima naudoti standartines funkcijas. Dažniausiai

naudojamos: length(x) – randa masyvo x elementų skaičių; max(x) – randa didžiausią masyvo x elemento reikšmę; min(x) – randa mažiausią masyvo x elemento reikšmę; [k, v]=max(x) – randa maksimalaus masyvo x elemento reikšmę k bei jo vietą

(eilės numerį) v; mean(x) – apskaičiuoja masyvo vidurkį; sort(x) – rikiuoja didėjimo tvarka; sum(x) – apskaičiuoja sumą; prod(x) – apskaičiuoja sandaugą. Masyvus galima panaudoti dirbant su daugianariais (polinomais).

Daugianario koeficientai užrašomi kaip masyvo elementai. Turint daugianarį anxn+an-1 xn-1+a n-2xn-2+…a1x+a0,

jį atitinkantis masyvas užrašomas: a=[an an-1 a n-2…a1 a0]. Darbui su daugianariais dažniausiai naudojamos šios standartinės funkcijos: conv(x, y) – daugianarių x ir y sandauga;

Page 4: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 4

deconv(x, y) – daugianarį x dalija iš daugianario y (atsakymas – dalmuo); [dalm, liekana]=deconv(x, y) – padalinus daugianarį x iš daugianario y,

pateikiami ir dalmens, ir liekanos daugianariai; roots(x) – suranda daugianario šaknis; polyval(x, task) – apskaičiuoja daugianario x reikšmę taške task. Pavyzdys. Reikia rasti daugianario 5x6+2x3-12x2+19x-7 šaknis. >> x=[5 0 0 2 -12 19 -7] x = 5 0 0 2 -12 19 -7 >> roots(x) ans = -1.5666 -0.2739 + 1.3347i -0.2739 - 1.3347i 0.7980 + 0.5403i 0.7980 - 0.5403i 0.5184 Dirbant su masyvais, galima atlikti veiksmus su atskirais jų elementais. Tam

aritmetinių ženklų kairėje pusėje dedamas taškas (.*, ./, .\, .^). Pavyzdys. Reikia apskaičiuoti funkcijos y=sin x * e-x +cos x reikšmes, kai x

kinta taip: x=-2(0.5)5. >>x=-2:0.5:5 x = Columns 1 through 7 -2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 Columns 8 through 14 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 Column 15 5.0000 >>y=sin(x).*exp(-x)+cos(x) y = Columns 1 through 7 -7.1350 -4.3997 -1.7471 0.0871 1.0000 1.1684 0.8499 Columns 8 through 14 0.2933 -0.2931 -0.7520 -0.9830 -0.9470 -0.6675 -0.2217 Column 15 0.2772 Atkreipkite dėmesį, kad čia tiek x, tiek y reikšmės pateiktos kaip matricos-

eilutės stulpelių reikšmės. Veiksmai su matricomis

Matricos elementai užrašomi laužtiniuose skliaustuose juos skiriant tarpais arba kableliais. Bendruoju atveju matrica A(n,m) užrašoma taip:

A=[a11 a12 a13 … a1m; a21 a22 a23 … a2m;…; an1 an2 an3 … anm], čia n – matricos eilučių kiekis, m –stulpelių kiekis. A(n, n) – kvadratinė matrica. Užrašas A(i,j) reiškia i-osios eilutės j-ojo stulpelio elementą.

Su matricomis Matlab galima atlikti tokius veiksmus: • transponuoti, t.y. sukeisti vietomis eilutes ir stulpelius (užrašoma A′); • sudėti bei atimti (jei tenkina matricų sudėties taisykles); • padauginti iš skaičiaus; • sudauginti (jei tenkina matricų daugybos taisykles).

Page 5: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 5

Atkreipkite dėmesį, kad matrica eilutė ir matrica stulpelis Matlab interpretuojami skirtingai. Matrica eilutė yra masyvas X(1, n), o matrica stulpelis – masyvas X(n, 1).

Pavyzdys >>A=[1 2 3; 4 5 6] A = 1 2 3 4 5 6 >>B=[-1 -2 ; -3 -4; -5 -6] B = -1 -2 -3 -4 -5 -6 >>C=A*B C = -22 -28 -49 -64 Dirbant su matricomis, galima atlikti veiksmus panariui su jų elementais (kaip

ir su masyvais). Taip pat galima naudoti vidines funkcijas. Dažniausiai naudojamos šios:

size(x) – randa matricos x matmenis; [n, m]=size(x) – randa atskirai matricos X eilučių n bei stulpelių m kiekius; eye(n, m), eye(n) – suformuoja vienetinę matricą; zeros(n, m) – suformuoja nulių matricą; ones(n, m) – suformuoja vienetų matricą; diag(x) – jei x yra masyvas, sudaro kvadratinę matricą, kurios pagrindinėje

įstrižainėje x elementai; jei x – matrica, suformuoja vektorių iš pagrindinės įstrižainės elementų;

det(x) – randa kvadratinės matricos determinantą; inv(x) – randa atvirkštinę matricą (kvadratinei matricai). Matricoms galima panaudoti funkcijas max, min, mean, sort, sum, prod. Jos

veiksmus atlieka su kiekvieno stulpelio elementais atskirai. Visų šių funkcijų, išskyrus sort, rezultatas – masyvas eilutė.

Pavyzdys >>Y=[-3 5 7; 1 2 3; -9 5 2] Y = -3 5 7 1 2 3 -9 5 2 >>min(Y) ans = -9 2 2 >>mean(Y) ans = -3.6667 4 4 >>sort(Y) ans = -9 2 2 -3 5 3 1 5 7 Matricų bei jų elementų suliejimui (išskaidymui) naudojami tokie veiksmai:

Page 6: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 6

A=[A1, A2, A3] – matricų sujungimas eilutėmis (horizontaliai). Turi sutapti visų matricų eilučių kiekiai;

A=[A1; A2; A3] – matricų sujungimas stulpeliais (vertikaliai). Turi sutapti visų matricų stulpelių kiekiai;

A(i, :) – visa i-oji eilutė; A(2:3, 4:5) – matricos dalis ( elementai A24, A25, A34, A35); A(2:3, 4:5) = B – matricos B įrašymas į nurodytą A vietą; A(2:end, 5) – 5-ojo stulpelio elementai pradedant nuo 2-osios eilutės iki galo; A(:) – matricos išskleidimas stulpeliais į vieną masyvą. Matricas galima panaudoti tiesinių lygčių sistemų sprendimui. Tam

naudojama formulė: X=A-1*B′ arba X=A\B′, čia A – sistemos koeficientų matrica; B – laisvųjų narių vektorius eilutė ( B=[b1 b2 … bn]), X – atsakymų vektorius. Jei B yra vektorius stulpelis (B=[b1; b2; …; bn]), sprendimo formulė užrašoma taip: X=A-1*B arba X=A\B.

Pavyzdys Reikia rasti lygčių sistemos

sprendinį.

=−−=+−

=−+

434x89

193125x

321

32

321

xxxx

xx

>>A=[5 12 -3;0 -1 9;4 -1 -3] A = 5 12 -3 0 -1 9 4 -1 -3 >>B=[19 8 4] B = 19 8 4 >>X=A^-1*B' X = 2 1 1

Grafikų braižymas Matlab aplinkoje grafikas išvedamas atskirame lange, vadinamame Figure. Paprastų grafikų braižymui bei jų charakteristikų nustatymui dažniausiai

naudojamos šios funkcijos: plot(x1, y1, s1, x2, y2, s2, …) – išveda grafiką. Dydžiai xi, yi – i-osios kreivės

argumentų bei funkcijų reikšmių masyvai, si – simbolinis kintamasis (nebūtinas), kuriame gali būti 3 specialūs simboliai, nurodantys kreivės charakteristikas: linijos tipą, mazgo (taško) tipą bei linijos spalvą. Galima nurodyti tik kai kurias iš šių charakteristikų. Jei si dydžio nėra, tai grafiko linija ištisinė, grafiko taškai vaizduojami pikseliais, o spalva kreivėms parenkama tokia tvarka: mėlyna, žalia, raudona, žydra, violetinė, geltona, juoda, balta.

1 lentelėje surašyti grafiko linijos tipai, spalvai ir taško tipui nurodyti naudojami simboliai.

Page 7: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 7

1 lentelė

Linijos tipas Spalva Mazgo (taško) tipas Ištisinė - Geltona y Taškas . Šešiakampis h Taškinė : Violetinė m Pliusas + ↑ ^ Punktyrinė -- Žydra c Žvaigždutė * ↓ v

Raudona r Apskritimas o ← < Žalia g Kryžiukas x Mėlyna b Kvadratas s Balta w Rombas d

Brūkšninė taškinė -.

Juoda k Penkiakampis p

→ >

plot(y,s) – grafike ant x ašies atidedami taškų eilės numeriai. grid įveda arba panaikina papildomą tinklelį. Taip pat galima naudoti grid on

tinklelio įvedimui; grid off – panaikinimui. title(‘pavadinimas) – užrašomas grafiko pavadinimas. xlabel(‘x_vardas’), ylabel(‘y_vardas’) – užrašomi ašių pavadinimai. axis – nustato ašių charakteristikas: axis([xmin xmax ymin ymax]) – nurodomos ašių ribinės reikšmės; axis square – abi ašys vienodo ilgio; axis equal – vienodas abiejų ašių mastelis; axis on, axis off – įveda arba panaikina ašis. legend(‘tekstas1’,’tekstas2’, …) įveda legendą, legend off – ją panaikina. text(x, y, ’tekstas’) – tekstas patalpinamas grafiko taške, kurio koordinatės

(x, y). gtext(‘tekstas’) – įvedamas tekstas. Naudojant pelę, jį galima patalpinti

norimoje grafiko vietoje. figure atidaro naują grafiko langą. hold įjungia arba išjungia esamo grafiko išsaugojimo režimą. Taip pat galima

naudoti: hold on – įjungia; hold off – išjungia. ezplot(‘funkcija’) – supaprastintas grafiko braižymas. x kitimo intervalas

[-2π , 2π]. set (gca, charakteristikos_pavadinimas1, charakteristika1, …)

nustato viso grafinio objekto charakteristikas; gca – deskriptorius (rašomas visais atvejais).

Dažniausiai naudojamos charakteristikos: ‘Box’(grafiko srities įrėminimas)‘On’, ‘Off’ ‘Fontsize’, šrifto dydis, pvz. ‘Fontsize’, 14 ‘Fontname’, ‘šrifto pavadinimas’, pvz. ‘Fontname’, ‘Times New Roman

Baltic’, ‘Fontweight’, ‘šrifto storis (Light, Normal, Bold)’, ‘Fontangle’, ‘šrifto pasvirimas (Normal, Italic)’, Šias charakteristikas galima panaudoti funkcijų title, xlabel, ylabel parametrų

sąraše. Tada charakteristikos taikomos tik vienam objektui. Pavyzdys. Naudojant funkciją ezplot, reikia nubraižyti funkcijos

y=cos 5x * sin x grafiką intervale [-π;2π], užrašyti ašių pavadinimus ir įvesti legendą. Sprendimas: >> ezplot('cos(5*x)*sin(x)',[-pi;2*pi]); >> set (gca,'Fontsize',14,'Fontname','Times New Roman Baltic'); >> Xlabel('x ašis');

Page 8: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 8

>> Ylabel('y ašis'); >> legend('y kreivė'); fill(X, Y, ‘spalva’) – spalvina dvimačius daugiakampius. Čia X, Y

daugiakampio viršūnių koordinačių masyvai, spalva gali būti žymima raide (1 lentelė).

Pavyzdys. Reikia nubraižyti daugiakampį ir nuspalvinti raudonai.

X=[0 3 4 3 2 0]; Y=[0 0 2 3 3 1]; fill(X,Y,'r') axis equal clf – išvalo grafinį langą. [x,y] = polybool('intersection', X1, Y1, X2, Y2) – dviejų daugiakampių

sankirta (intersection). Čia X1 ir Y1 – pirmojo daugiakampio viršūnių koordinačių masyvai, X2 ir Y2 – antrojo daugiakampio viršūnių koordinačių masyvai. Šie masyvai turi būti vektoriai stulpeliai. Rezultatas – gauto sankirtos daugiakampio viršūnių koordinačių masyvai x ir y.

Pavyzdys. Reikia rasti dviejų daugiakampių sankirtą. X1 = [0 6 0]; Y1 = [3 0 0]; fill(X1,Y1,'r') hold on X2 = [0 4 0]; Y2 = [8 0 0]; fill(X2,Y2,'b') hold on [x,y] =

polybool('intersection',X1',Y1',X2',Y2'); fill(x,y,'k') axis equal [X1,X2] = meshgrid(x1,x2) – generuoja dviejų kintamųjų funkcijos f(x1,x2)

argumentų vektorių x1 ir x2 matricas X1 ir X2, kurios naudojamos funkcijos f(x1,x2) grafiniam pavaizdavimui.

surf(X1,X2,Z) – grafiškai pavaizduoja dviejų kintamųjų funkcijos paviršių. X1 ir X2 – funkcijos argumentų reikšmių matricos, Z – funkcijos reikšmių matrica. Spalvų mastelis parinktas pagal funkcijos reikšmę.

contour(X1,X2,Z,v) – dviejų kintamųjų funkcijos Z=f(X1,X2) pavaizdavimas izolinijomis (lygio linijomis), v – lygio linijų reikšmių vektorius.

surf(X1,X2,Z,gradient(Z)) – grafiškai pavaizduoja dviejų kintamųjų funkcijos paviršių. X1 ir X2 – funkcijos argumentų reikšmių matricos, Z – funkcijos reikšmių matrica. Spalvų mastelis parinktas pagal funkcijos gradiento reikšmę.

colorbar – pavaizduoja funkcijos reikšmių spalvų mastelio stulpelį. camlight('right') – grafinio objekto apšvietimas iš dešinės. colormap(flipud(colormap)) – grafinio objekto spalvinės gamos nustatymai. shading interp - grafinio objekto šešėlio savybių nustatymas. lighting phong - grafinio objekto apšvietimo būdas.

Page 9: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 9

Pavyzdys. Reikia grafiškai pavaizduoti funkciją )(

121

22

21),( xxexxxfZ −−== , kai 2222 21 ≤≤−≤≤− x,x

Pateikti reikšmes atitinkančių spalvų mastelį. x1=-2:.2:2; x2=-2:.2:2; [X1,X2] = meshgrid(x1,x2); Z = X1.*exp(-X1.^2-X2.^2); surf(X1,X2,Z) colorbar contour(X1,X2,Z,[min(Z) max(Z)]); contour(X1,X2,Z,min(Z)); colorbar colorbar

surf(X1,X2,Z,gradient(Z)) colorbar camlight('right') colormap(flipud(colormap)) shading interp; lighting phong plot3(X1,X2,Z) – 3D grafikų išvedimas. X1,X2,Z – vektoriai, kurių

elementai, tai taškų koordinatės, per kurias brėžiama linija.

Page 10: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 10

[x_opt,f_min,exitflag] = fminsearch(fun,x0) – minimizuoja kelių kintamųjų funkciją. Minimizuojamos funkcijos fun pradinės kintamųjų reikšmės aprašomos vektoriumi x0. Randamas funkcijos fun lokalinis minimumas x_opt bei jį atitinkanti funkcijos reikšmė f_min. Proceso sėkmę nusako exitflag reikšmė: >0 – funkcija konvergavo į sprendinį x_opt; =0 – viršytas leistinas iteracijų skaičius; <0 – funkcija nekonvergavo į sprendinį.

Pavyzdys. Rasti funkcijos minimumą, t.y.

, kai 21

221221 )1()(100),(minmin_ xxxxxff −+−== )1,2.1(0 −=x .

Tegul M-faile banana.m yra funkcija: function f = banana(x) f = 100*(x(2)-x(1)^2)^2+(1-x(1))^2; Tuomet parašę >> [x,fval,exitflag] = fminsearch(@banana,[-1.2, 1]) gausime: x = 1.0000 1.0000 fval = 8.1777e-010 exitflag = 1

Page 11: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 11

Matlab algoritminė kalba Matlab yra programavimo kalba, naudojama algoritmams koduoti. Operatorių

seką galima surašyti į failą ir vykdyti kaip vieną komandą. Programa saugoma tekstiniame faile su prievardžiu .m, kuris sukuriamas File meniu komanda New→M-file. M-failas gali būti tiek scenarijus (script), kuriame saugoma Matlab operatorių seka, tiek funkcija (function), priimanti argumentų reikšmes ir grąžinanti rezultatus.

Matlab kalboje yra du pagrindiniai skirtumai nuo kai kurių kitų algoritminių kalbų, pvz. Pascal:

• nereikia aprašyti skaitinio tipo kintamųjų, masyvų ir matricų, • nėra nukreipimo sakinio (besąlyginio perėjimo) goto.

Matlab operatoriai Matlab kalbos operatoriai gali būti naudojami atliekant skaičiavimus

komandiniame lange. Ir priešingai, visi skaičiavimai, vykdomi dialogo režime, gali būti surašyti M-faile. Todėl vardų parinkimo taisyklių, priskyrimo operatoriaus bei matematinių išraiškų užrašymo taisyklių ir aritmetinių operacijų čia nekartosime.

Matlab naudojami santykio operatoriai <, <=, >, >=, == (lygu), ~= (nelygu) ir loginės funkcijos & (IR), | (ARBA), ~ (NE). Operacijų atlikimo prioritetai pateikti lentelėje.

1 ( ) 2 .' .^ ' ^ 3 + - ~ 4 .* ./ .\ * / \ 5 + - 6 : 7 < <= > >= == ~= 8 AND (&) 9 OR ( | )

Žemiau aprašyti kai kurie dažniau vartojami operatoriai. Dialogo su vartotoju operatoriai

x = input('nurodymas') – išveda į ekraną nurodymą ir laukia įvedimo iš klaviatūros. Galima įvesti skaičių, aritmetinę išraišką, masyvą arba matricą. Nurodyme užrašius ‘\n’, žymeklis perkeliamas į kitą eilutę.

Pavyzdžiai >> a=input('Įveskite a: ') Iveskite a: 3 a = 3 >> A=input('Įveskite matricą A: \n') Įveskite matricą A: [1 2;3 4] A = 1 2 3 4 keyboard – sustabdo M-failo vykdymą ir pereina į darbą su klaviatūra, t.y.

galima dirbti dialogo režime. Ekrane atsiranda ‘K>>’. Baigus darbą su klaviatūra, reikia surinkti return.

Page 12: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 12

pause, pause on – stabdo programos vykdymą ir laukia bet kokio klavišo paspaudimo. Komanda pause(n) – nutraukia vykdymą n sekundžių, o pause off – išjungia pauzės režimą.

Duomenų įvedimas iš tekstinio failo Naudojant operatorių dlmread, iš tekstinio failo galima įvesti paprastą

kintamąjį, masyvą, matricą. vardas = dlmread(failo_vardas, ’skyriklis’) – įveda visus failo elementus.

Dažniausiai naudojamas skyriklis yra “;” .Failo vardas gali būti užrašomas dlmread operatoriuje kabutėse (nurodant, jei reikia, visą kelią) arba galima įsivesti papildomą kintamąjį. Skaičiai tekstiniame faile turi būti atskirti nurodytu skyrikliu.

Pavyzdys. Tekstiniame faile pavyzdys.txt surašyta matrica: 1;2;3 4;5;6 7;8;6 Ją įvesime įvykdę komandas w=('d:\naujasMATLAB\pavyzdys.txt'); A=dlmread(w,';'); vardas = dlmread(failo_vardas, ’skyriklis’, eilutė, stulpelis) – įveda failo

elementus, pradedant nurodyta eilute ir stulpeliu. Eilutė=0, stulpelis=0 nurodo viršutinį kairįjį failo elementą.

vardas=dlmread(failo_vardas, ’skyriklis’, eilutė, stulpelis, intervalas) – įveda tik elementus, kurių vietą faile apibrėžia intervalas. Intervalas=[eilutė stulpelis galinė_eilutė galinis_stulpelis]

Pavyzdys. Faile pavyzdys.txt surašyta kvadratinės matricos A eilė (n=3) ir šios matricos elementai:

3 1.1;2.3;-3 0.4;6.5;6 0;-6.8;6 Įvykdę komandas: w=('d:\naujasMATLAB\pavyzdys.txt'); n=dlmread(w,';',0,0,[0 0 0 0]) A=dlmread(w,';',1,0,[1 0 n n-1])

gausime n = 3 A = 1.1000 2.3000 -3.0000 0.4000 6.5000 6.0000 0 -6.8000 6.0000 Rekomenduojama kiekvieną masyvą pradėti rašyti naujoje tekstinio failo

eilutėje ir nerašyti skyriklio eilutės gale. Duomenų spausdinimas

disp(X) – išveda į komandinį langą X reikšmę. Jeigu X – teksto eilutė, ji rašoma tarp kabučių. Norint atspausdinti kelis dydžius vienoje eilutėje, juos reikia apjungti į vektorių: disp([x1, x2, … xn]). Taip pat galima apjungti keletą tekstų: disp([‘tekstas1’, ‘tekstas2’, … ‘tekstasn’]). Norint toje pačioje eilutėje išvesti tekstą ir skaitines kintamųjų reikšmes, reikia naudoti funkciją num2str(X), kuri skaitinę reikšmę paverčia į tekstinį formatą: disp([‘tekstas1’, num2str(X)]).

Page 13: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 13

Pavyzdys. Reikia atspausdinti masyvą X=[-4.5 -1.2 0 6.9 7.2]. Įvykdę disp('Surikiuotas masyvas'); %teksto spausdinimas disp(X); %rezultato spausdinimas

komandiniame lange gausime Surikiuotas masyvas -4.5000 -1.2000 0 6.9000 7.2000 fprintf(failo_identifikatorius, ’formatas’, kintamieji) – spausdina į failą.

Failo identifikatorius – skaičius, gaunamas įvykdžius fopen. Jei jis praleistas arba 1, spausdinama į ekraną. Darbo pradžioje failas turi būti atvertas rašymui (fopen), darbo pabaigoje – užvertas (fclose).

failo_identifikatorius=fopen(‘failo_vardas’, veiksmas). Dažniausiai naudojami veiksmai: ’r’ – skaitymas (numatytasis veiksmas), ‘w’ – rašymas (jei reikia, failas sukuriamas), ‘a’ – papildymas (jei reikia, failas sukuriamas).

fclose(failo_identifikatorius) – uždaro atvertą failą. Grižkime prie operatoriaus fprintf. Formate rašomas norimas tekstas, eilutės

valdymo simboliai, pertvarkymo specifikatoriai bei kiti simboliai. Dažniausiai naudojami valdymo simboliai: \n – perėjimas į kitą eilutę, \t – tabuliatoriaus įvedimas. Populiariausi pertvarkymo specifikatoriai: %d – dešimtainis formatas su ženklu; %f – formatas skaičiams su fiksuotu tašku; %e – formatas su dešimtainiu daugikliu; %s – simbolių eilutė.

%nd – n (sveikas teigiamas skaičius) nurodo lauko ilgį, kuris skiriamas spausdinamam elementui, pavyzdžiui, %3d. %n.mf – nurodo visą lauko ilgį (n) ir skaitmenų po kablelio kiekį (m), pavyzdžiui, %8.2f.

Pavyzdys. Faile pavyzdys.txt surašyti duomenys, t.y. kvadratinės matricos eilė (3) ir jos elementai:

3 1.1;2.3;-3 0.4;6.5;6 0;-6.8;6 Matricos eilę ir jos pirmosios eilutės elementus reikia surašyti į rezultatų failą,

kurį pavadinsime atsakymai.txt. Tai bus atlikta įvykdžius žemiau pateiktą programos fragmentą.

u=fopen('atsakymai.txt','w'); %failas sukuriamas ir atveriamas z=('d:\naujasMATLAB\pavyzdys.txt'); n=dlmread(z,';',0,0,[0 0 0 0]); A=dlmread(z,';',1,0,[1 0 n n-1]); fprintf(u,'Matricos eilė %2d\n',n); fprintf(u,'\n') %tuščia eilutė fprintf(u,'Pirmoji matricos eilutė\n',n); fprintf(u,'%6.2f %6.2f %6.2f\n',A(1,:)); fclose(u); type failo_vardas – failo turinį atspausdina komandiniame Matlab lange.

Jeigu reikia, nurodomas visas failo kelias. Pavyzdžiui, įvykdžius komandą type d:\naujasMATLAB\atsakymai.txt

komandiniame lange bus atspausdintas šio failo turinys. Matricos eilė 3 Pirmoji matricos eilutė 1.10 2.30 -3.00 eilutė=sprintf(’formatas’, kintamieji) – suformuoja tekstinę eilutę, į kurią ,

panaudojant formatus, surašomi kintamieji. Skirtumas tarp fprintf ir sprintf, kad

Page 14: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 14

fprintf duomenis surašo į failą, o sprintf suformuoja tekstinę eilutę. Taip suformuotas eilutes galima panaudoti kitose funkcijose, pavyzdžiui, input, disp.

Pavyzdys a=2.99; b=6.99; y=sprintf('Įveskite skaičių %5.2f <= x <= %5.2f ',a,b); x=input(y); Įveskite skaičių 2.99 <= x <= 6.99 5 x = 5

Sąlygų tikrinimas Sąlygos tikrinimo operatorius if gali būti tokių formų: 1) if <sąlyga>

<operatoriai>; end

2) if <sąlyga> <operatoriai>;

else <operatoriai>;

end 3) if <sąlyga_1>

<operatoriai>; elseif <sąlyga_2>

<operatoriai>; elseif <sąlyga_3>

<operatoriai>; … else

<operatoriai>; end

Pavyzdys % Duoti trys nelygūs skaičiai. Reikia surasti % didžiausiąjį skaičių ir išvesti į ekraną jo reikšmę. a = 15; % a reikšmės priskyrimas b = 25; % b reikšmės priskyrimas c = 9; % c reikšmės priskyrimas if a > b if a > c max = a; else max = c; end elseif b > c max = b; else max = c; end max %rezultato išvedimas komandiniame lange

Page 15: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 15

Ciklų struktūros for <kintamasis>=<xp>:<hx>:<xg> <operatoriai>; end; Čia xp pradinė ciklo kintamojo reikšmė, hx – kitimo žingsnis, xg – galinė

reikšmė. xp, hx ir xg gali būti bet kokio tipo skaitiniai elementai. Jei hx=1, jį galima praleisti.

Pavyzdys % Surikiuoti masyvą X(n) didėjimo tvarka. clc; %komandinio lango išvalymas clear all; n = input('Įveskite masyvo elementų skaičių: '); for i = 1:n X(i) = input('Įveskite masyvo elementą: '); end disp('Pradinis masyvas'); %teksto spausdinimas disp(X); %pradinio masyvo spausdinimas for i = 1:n-1 for j = i+1:n if X(i) > X(j) c = X(i); X(i) = X(j); X(j) = c; end end end disp('Surikiuotas masyvas'); %teksto spausdinimas disp(X); %rezultato spausdinimas Atskiras for ciklo atvejis: for <kintamasis>=masyvas <operatoriai>; end; Šiuo atveju ciklo kintamasis paeiliui įgaus visas masyvo reikšmes. while <sąlyga> <operatoriai>; end Ciklas vykdomas, kol sąlyga tenkinama. Pavyzdys % Sudaryti funkcijos y = x*x + x +2 reikšmių skaičiavimo % algoritmą, kai x kinta nuo -2 žingsniu 0.25. % Skaičiuoti, kol funkcijos reikšmė neviršys 10. xp = -2; y = realmin; hx = 0.25; x = xp; %pradinės reikšmės priskyrimas cilo kintamajam while y < 10 %ciklo pabaigos salygos tikrinimas y = x^2 + x +2; disp([x, y]); %x ir y reikšmių spausdinimas x = x + hx; %ciklo kintamojo keitimas end

Page 16: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 16

Funkcijos Skirtingai nuo daugelio kitų programavimo kalbų, Matlab nėra skirtumo tarp

procedūrų ir funkcijų. Vartotojo sukurta funkcija saugoma M-faile, kurio vardas turi sutapti su funkcijos pavadinimu. Failų vardams taikomos tos pačios taisyklės, kaip ir kintamųjų vardams (žiūr 2 psl.)

Nuo scenarijaus (script), taip pat saugomo M-faile, funkcija skiriasi tuo, kad priima duomenų sąrašą ir grąžina rezultatų sąrašą. Funkcijos duomenų bei rezultatų sąrašų elementai vadinami formaliaisiais parametrais. Funkciją galima iškviesti tiek iš M-failo, tiek iš komandinio lango. Jos iškvietime rašomi faktiniai parametrai, su kuriais procedūroje atliekami skaičiavimai. Funkcijos viduje naudojami kintamieji vadinami lokaliais, jų galiojimo sritis – tik funkcija.

Funkcija struktūra yra tokia: function [R_1, …, R_n] = funkcijos_vardas(D_1, …, D_m); % funkcijos aprašas

· · · ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· ·· % funkcijos aprašas funkcijos tekstas % komentarai Čia R_1, …, R_n – funkcijos grąžinamų rezultatų sąrašas; D_1, …, D_m –

funkcijai perduodamų duomenų sąrašas. Jei funkcija grąžina tik vieną parametrą R, funkcijos antraštės eilutė užrašoma taip:

function R = funkcijos_vardas(D_1, …, D_m) Jei funkcija parametrų negrąžina (pavyzdžiui, skirta spausdinti), galima

užrašyti: function funkcijos_vardas(D_1, …, D_m) Funkcijos aprašas susideda iš vienos ar daugiau eilučių, prasidedančių %

ženklu. Būtina įvesti mažiausiai vieną aprašo eilutę. Tai komentarai, atspausdinami komandiniame Matlab lange įvykdžius komandą:

help funkcijos_vardas Funkcijos iškvietimas užrašomas taip: [R_1, …, R_n] = funkcijos_vardas(D_1, …, D_m); Jei funkcija grąžina vieną parametrą arba jų negrąžina, atitinkamai užrašoma: R = funkcijos_vardas(D_1, …, D_m); funkcijos_vardas(D_1, …, D_m); Pavyzdys. Duotos matricos A(n, n) ir B(n, n). Jei matricos A teigiamų ir

neigiamų elementų kiekiai sutampa su atitinkamais matricos B elementų kiekiais, matricas reikia sudauginti, jei ne – sudauginti atitinkamus ju elementus.

Duomenis ir rezultatus reikia saugoti tekstiniuose failuose. % Pagrindinė programa f=fopen('kiek_R.txt','w'); v='kiek_D.txt'; n=dlmread(v,';',0,0,[0 0 0 0]); A=dlmread(v,';',1,0,[1 0 n n-1]);%matricų skaitymas B=dlmread(v,';',n+1,0,[n+1 0 2*n n-1]); fprintf(f,'Duomenys\n');%duomenų spausdinimas kiek_S(n,A,f); %matricos spausdinimo f-ja kiek_S(n,B,f); [TKA,NKA]=kiekiai(n,A); %kiekių skaičiavimo f-ja [TKB,NKB]=kiekiai(n,B); fprintf(f,'Rezultatai\n');%rezultatų spausdinimas fprintf(f,'Matricos A TK= %2d NK= %2d\n',TKA,NKA); fprintf(f,'Matricos B TK= %2d NK= %2d\n',TKB,NKB);

Page 17: Uždavinių sprendimas MATLAB aplinkojeelibrary.lt/resursai/Leidiniai/Litfund/Lithfund_leidiniai/IT/MATLAB_LT.pdfOperacijų tyrimas.Įvadas.Laboratoriniai darbai 1 Uždavinių sprendimas

Operacijų tyrimas. Įvadas. Laboratoriniai darbai 17

if (TKA==TKB)&(NKA==NKB) C=A*B; fprintf(f,'C=A*B\n'); else C=A.*B; fprintf(f,'C=A.*B\n'); end C kiek_S(n,C,f); fclose (f); %_____________________________________ % Matricos spausdinimo funkcija function kiek_S(n,P,f); fprintf(f,'Matricos eilė n=%d\n',n); fprintf(f,'Matricos elementai \n'); for i=1:n fprintf(f,' %6.2f ',P(i,:)); fprintf(f,' \n'); end; fprintf(f,' \n'); %_____________________________________ function[TK,NK]=kiekiai(n,C); % funkcija, skaičiuojanti n-osios eilės matricos % teigiamų ir neigiamų elementų kiekius TK=0; NK=0; for i=1:n for j=1:n if C(i,j)>0 TK=TK+1 elseif C(i,j)<0 NK=NK+1 end end end Duomenų failo kiek_D.txt užpildymo pavyzdys: 3 1;2;-3 4;5;6 7;8;9 -3;6;5 8;5;3 -1.2;0.3;6