114
---- Osnovi na MatLab ---- 1 O S N O V I N A MatLab so P R I M E R I Qup~o Jordanovski

The MATLAB Notebook v1.5pees.etf.ukim.edu.mk/predmeti/kmee/nastava/literatura/... · 2005. 10. 27. · MatLab e programa koja se nao|a vo eden direktorium {to se kreira za vreme na

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

---- Osnovi na MatLab ----

1

O S N O V I N A

MatLab

so

P R I M E R I

Qup~o Jordanovski

---- Osnovi na MatLab ----

2

VOVED.......................................................................................................................................................4 1. Zapo~nuvawe .........................................................................................................................................5

1.1 MatLab kako ednostaven kalkulator ........................................................................................5 2. Broevi I Formati ..............................................................................................................................6 3. Promenlivi...........................................................................................................................................7 4. Vgradeni Funkcii ...............................................................................................................................8 5. Nizi ( Vektori ) ............................................................................................................................9

5.1 Oznaka ( : ) ....................................................................................................................................11 5.2 Izdvojuvawe Na Elementite .....................................................................................................11 5.3 Vektor kolona ..............................................................................................................................12 5.4 Transponirawe....................................................................................................................12 5.5 Skalaren proizvod na vektori (*) ..................................................................................13 5.6 To~kast proizvod (.*) ..................................................................................................................15 5.7 To~kast koli~nik ( delewe ) ( ./ ).............................................................................................16 5.8 To~kasto stepenuvawe ( .^ ).......................................................................................................18

6. Crtawe Na Elementarni Funkcii...........................................................................................18 6.1 Naslov i labeli ...........................................................................................................................20 6.2 Mre`a.............................................................................................................................................20 6.3 Stil na linija i boi....................................................................................................................20 6.4 Pove}e Grafici...........................................................................................................................20 6.5 HOLD naredbata ............................................................................................................................21 6.6 Podcrte` ( SUBPLOT) .................................................................................................................21 6.7 Kontrola Na Oskite ...................................................................................................................22 6.8 Zgolemuvawe ( zoom ) ..................................................................................................................23

7. Matrici : Dvodimenzionalni Nizi...............................................................................................23 7.1 Dimenzija Na Matricata ...........................................................................................................24 7.2 Transponirawe Na Matrica .....................................................................................................24 7.3 Specijalni Matrici ...................................................................................................................25 7.4 Edini~na Matrica.......................................................................................................................25 7.5 Dijagonalna Matrica..................................................................................................................26 7.6 Konstrukcija na matrici ...........................................................................................................27 7.7 Izdvojuvawe Na Elementi Na Matrica .................................................................................28 7.8 To~kast Proizvod Na Matrici ( .* ) .......................................................................................30 7.9 Mno`ewe Na Matrica So Vektor ...........................................................................................30 7.10 Mno`ewe na matrici................................................................................................................31

8. Ciklusi ( Petqi ) .............................................................................................................................31 9. Logi~ki Relacii ( Testirawe) .......................................................................................................35 10. Logi~ni Operatori.........................................................................................................................35 11. While Ciklus ( Petqa)....................................................................................................................38

Metoda 1: ..............................................................................................................................................39 Metoda 2. ..............................................................................................................................................39

12. if ..... then .... else .... end ...............................................................................................................40 13. Skript Datoteki I Funkcii ( m-fajlovi) ...............................................................................40

13.1 Skript m-fajlovi ......................................................................................................................41 13.2 Funkciski m-fajlovi................................................................................................................43 Primeri Na Funkcii .......................................................................................................................45

14. Drugi Vgradeni Funkcii ...............................................................................................................47 14.1 Zaokru`uvawe Na Broevi........................................................................................................47 14.2 Funkcijata sum ...........................................................................................................................48 14.3 Funkcii max i min....................................................................................................................49 14.4 Generirawe Na Slu~ajni Broevi ...........................................................................................50 14.5 Funkcija find za vektori........................................................................................................51 14.6 Funkcijata find za matrici...................................................................................................52

15. Crtawe Na Povr{ini ....................................................................................................................53 16. Nizi Na Karakteri ( Znaci).........................................................................................................56

16.1 Sporedba na K-nizi ...................................................................................................................57 16.2 Prebaruvawe i zamena ..............................................................................................................58 16.3 Konverzija na broj vo K-niza ..................................................................................................58

---- Osnovi na MatLab ----

3

17. Funkciski Funkcii .......................................................................................................................59 17.1 Pretstavuvawe na analiti~ka funkcija vo MatLab-ot....................................................59 17.2 Crtawe na analiti~ki funkcii.............................................................................................59 17.3 Minimum na funkcija so edna promenliva ..........................................................................61 17.4 Nuli na funkcija so edna promenliva ..................................................................................61 17.5 Numeri~ko integrirawe ( kvadratura) ................................................................................62

18 Vnes I Zapi{uvawe ( Eksport ) Na Podatoci ..........................................................................63 18.1 Vnes ( ~itawe ) na podatoci ....................................................................................................63 18.2 Eksport ( zapi{uvawe ) na podatoci.....................................................................................64 18.3 Funkcija input.............................................................................................................................64

19 HELP altaka ........................................................................................................................................65 VOVED VO MATLAB VTOR DEL ...................................................................................................69 1. Polinomi i Interpolacija.............................................................................................................69

1.1 Nuli na polinomot......................................................................................................................70 1.2 Presmetuvawe na vrednosta na polinomot ............................................................................70 1.3 Mno`ewe ( konvolucija) i delewe ( dekonvolucija ) na polinomi..................................71 1.4 Interpolacija na podatoci so polinim.................................................................................71

2 INTERPOLACIJA SO POLINOM .........................................................................................73 2.1 Interpolacionen polinom........................................................................................................73 2.2 Lagran`ova interpolacija........................................................................................................75 2.3 Wutnova interpolacija - napred..............................................................................................77

3. NUMERI^KO DIFERENCIRAWE ( OPREDELUVAWE NA IZVOD) .........................78 3.1 Numeri~ko diferencirawe koristej}i limes......................................................................78 3.2 Numeri~ko diferencirawe so pomo{ na Wutnoviot interpolacionen polinom .......81

4. NUMERI^KO INTEGRIRAWE..................................................................................................82 4.1 Trapezno pravilo.........................................................................................................................82 4.2 Simpsonovo pravilo ...................................................................................................................83 4.3 Gausova integracija....................................................................................................................84

5. RE[AVAWE NA SISTEMI LINEARNI ALGEBARSKI RAVENKI..........................85 5.1 Gausova metoda na eliminacija.................................................................................................88 5.2 Iterativna metoda ( Gaus - Zajdel)..........................................................................................90

6. MODELIRAWE NA PODATOCI ..............................................................................................95 6.1 Polinomna regresija ..................................................................................................................95 6.2 Op{ta funkciska regresija ......................................................................................................99

7. DISKRETNA INTERPOLACIJA ...........................................................................................101 7.1 ^itawe ( vnesuvawe) na podatoci ..........................................................................................113

---- Osnovi na MatLab ----

4

VOVED

MatLab e visoko-organiziran programski jazik za primena vo in`ewerstvoto i

tehnikata. Toj vkqu~uva vo sebe presmetuvawe, vizuelizacija i programirawe vo ramkite na ednostavna za koristewe okolina kade {to problemite i re{enijata se pretstaveni vo poznata i bliska matemati~ka notacija. Tipi~no koristewe na programot sodr`i:

• Elementarna matematika i presmetki • Linearna algebra • Razvoj na algoritmi • Modelirawe, simulacija i gradewe na prototipovi • Analiza na podatoci, istra`uvawe i vizuelna prezentacija • Nau~ni i in`ewerski grafici i grafikoni • Razvoj na aplikacii vlu~uvaj}i razvoj na Grafi~ki Interfejs za korisnici

MatLab e interaktiven sistem ~ii osnovni tipovi na podatoci se nizi i matrici

koi ne treba prethodno da se definiraat i dimenzioniraat. So toa se ovozmo`uva re{avawe na mnogu tehni~ki problemi kade {to se potrebni golemi numeri~ki presmetki. Osobeno MatLab-ot e prikladen za re{avawe na problemi koi mo`at da se formuliraat vo vektorska ili matri~na forma pri {to potrebnoto vreme za re{avawe e mnogu pomalo vo sporedba ako se koristat klasi~nite programski jazici kako {to se FORTRAN ili C.

Imeto MatLab e kratenka od matrix labaratory i originalno bil dizajniran da

obezbedi lesen pristap do softverskite paketi LINPACK i EISPACK koi pretstavuvale najsovr{eni softverski paketi za matri~no smetawe.

MatLab-ot vo tek na vreme evoluiral i bil nadograden preku kotribucija na mnogu

korisnici. Vo Univerzitetskite ramki, toj pretstavuva standardna alatka i pomo{no sredstvo na studentite po predmetite matematika, in`inerstvo i nau~nite istra`uvawa. Vo industrijata, MatLab-ot e naj~esto koristena alatka ( softver) za visoka produktivnost vo istra`uvawata, razvoj i analizi.

Edna od va`nite karakteristiki na MatLab-ot e postoewe na takanare~eni

toolboxes ( alatki ), koi pretstavuvaat kolekcija na proceduri na ve}e re{eni problemi od dadena oblast. Alatkite se seopfatni MatLab funkcii ( m-fajlovi ) so koi se pro{iruva okolinata na MatLab za re{avawe na posebni klasi na problemi.

Oblastite za koi postojat vakvi alatki vklu~uvaat: procesirawe na signali,

kontrola na sistemi, neuronski mre`i, fazi logika, simulacija, obrabotka na sliki i mnogu drugi.

MatLab-ot poseduva i svoj programski jazik koj e matri~no orjentiran no gi ima site

svojstva na programski jazik kako {to se FORTRAN i C. Toj ovozmo`uva brzo i interaktivno programirawe na mali programi so momentalna proverka na to~nosta i korektnosta na programot kako i kreirawe na celosni i kompleksni programi za korisnici. Posebna pogodnost e postoewe na biblioteki koi ovozmo`uvaat koristewe i interakcija so proceduri ili funkcii napi{ani vo C ili Fortran so {to kapacitetot i mo`nostite na MatLab-ot zna~itelno se zgolemeni.

---- Osnovi na MatLab ----

5

1. Zapo~nuvawe

MatLab e programa koja se nao|a vo eden direktorium {to se kreira za vreme na

instalacija na MatLab-ot. Za va{i potrebi, upatno e da kreirate va{ raboten direktorium vo koj bi se zapi{uvale va{ite podatoci ili m-fajlovite.

MatLab-ot se aktivira so komandata: matlab

ako se rabori pod DOS operativen sistem ili so pritiskawe na ikonata za MatLab ako se koristi WINDOWS verzijata. Po izvesno vreme, logoto na programot se poka`uva sledeno so simbolot

>>

kade >> pretstavuva MatLab promt ozna~uvaj}i deka programot e spremen da prifati nova naredba i da ja izvr{i.

So help naredbata, korisnikot ima mo`nost da na lice mesto dobie informacii i

pomo{ za nekoj naredba. So naredbata quit se izleguva od programata MatLab.

1.1 MatLab kako ednostaven kalkulator Za prvi~no zapoznavawe so MatLab-ot, mo`e da se iskoristat mo`nostite na

programot da se koristi kako ednostaven kalkulator. Osnovnite matemati~ki operacii se:+ ( sobirawe), - ( odzemawe), * ( mno`ewe), / ( delewe), ^ ( stepenuvawe) i tie se koristat vo kombinacija so zagrdite ( ). Simbolot ^ se koristi za stepenivawe.

2^4 = 16.

Komandite se ispi{uvaat posle promtot >>.

primer: >> 2+3/4*5

otkako }e se ispi{e naredbata a po pritiskawe na kop~eto, Enter MatLab-ot odgovara so:

ans =

5.7500

{to pretstavuva rezultat od presmetkite. Promenlivata ans se ispi{uva ako korisnikot prethodno ne definiral promenliva vo koja }e bide smesten rezultatot. Imeno mo`no e da se napi{e:

>> x = 2 + 3/4*5 x =

5.7500

---- Osnovi na MatLab ----

6

Sega kako rezultat se ispi{uva promenlivata x. Treba da se napomne, deka so samata naredba x = 2 + 3/4*5, programot rezervira mesto za promenlivata x vo svojot raboten prostor ( memoriski del ), taka da korisnikot ne e dol`en eksplicitno da definira promenliva, kako {to e slu~aj kaj drugite programski jazici. Vo tekot na celata sesija promenlivata x e prisutna osven ako so posebna naredba ne se izbri{e od rabotniot prostor. Vo bilo koe vreme vo tekot na rabotata so naredbata: >> x

x = 5.7500 mo`no e da se proveri vrednosta na promenlivata x.

Vo slu~aj ako ne se saka pe~ateweto na promenlivata, naredbata mora da zavr{i so to~ka-zapirka ( ;) >> x = 2 + 3/4*5; y = 2^2, z = 3^1.5;

y = 4

Vo prethodnata naredba, presmetani se tri promenlivi x,y i z, otpe~ateni vo eden red. Pri toa naredbatite so koja se opredeluvaat x i z zavr{uvaat so ; i zatoa ne se pe~atat dodeka pak naredbata so koja se opredeluva y zavr{uva so zapirka kako separator pome|u dve naredbi a ne so ; i zatoa programot vedna{ ja pe~ati vrednosta. Za da se vidat vrednostite na x i z treba da se napi{e:

>> x

x = 5.7500 >> z

z = 5.1962

2. Broevi I Formati

MatLab prepoznava nekolku vidovi ( tipovi ) na broevi.

Tip Primer Celobrojna 1362, -217897 Realna 1.234, -10.76 Kompleksna 3.21 - 4.3i ( i e imaginarna edinica) Inf Beskone~no, delewe so nula NaN Ne e broj , 0/0 Notacijata "e" se koristi za mnogu golemi ili mnogu mali brojki: -1.3412e+03 = -1.3412x103 = -1341.2 -1.3412e-01 = -1.3412x10-1 = -0.13412 Site presmetki vo MatLab se izveduvaat so dvojna preciznost ( double precision

), {to zna~i so to~nost do 15-tata decimala. Formatot na koj na~in MatLab gi pe~ati broevite se definira i se kontrolira so naredbata " format ".

---- Osnovi na MatLab ----

7

Komanda Pe~aten primer >> format short 32.4162 ( 4 decimalni mesta ) >> format short e 3.1416e+01 >> format long e 3.141592653589793e+01 >> format bank 31.42( 2 decimalni mesta) Ako treba da se vratime na standardniot format koj e definiran pri samoto

vkqu~uvawe na MatLab-ot, treba samo da se ispi{e samo format. Naredbata >> format compact

e isto taka korisna naredba ako ne sakame pe~atewe na prazni redovi. Na toj na~in pove}e informacii mo`at da bidat ispe~ateni.

3. Promenlivi

Imiwata na promenlivi pretstavuvaat kombinacija na bukvi i brojki i zapo~nuvaat so bukva. Vo sledniot primer dadeni se korektno ozna~eni promenlivi.

NetCost, Left2Pay, v3, X3, z25c5

Sledniot primer poka`uva kako ne smeat da se ozna~uvaat promenlivite:

Net-Cost, 2pay, %x, @sign Preporaka e da se koristat imiwa koi asociraat na kontekstot i prirodata za koja

se upotrebeni promenlivite. Na toj na~in polesno pri povtorno razgleduvawe na programot se identificira zna~eweto i upotrebata na dadenata promenliva.

Specijlni imiwa: MatLab-ot ima rezervirano imiwa na nekoj promenlivi ili

konstati a koi ne treba da se koristat od strana na korisnikot. Na primer eps = 2.2204e-16 = 2-54 e najmaliot broj taka da brojot 1+eps se razlikuva od 1 vo ramkite na gre{kata koja postoi vo presmetkite zaradi kone~niot zbor, ili pi = 3.14159 = π

Ako se raboti so kompleksni broevi toga{ MatLb-ot bukvite i i j gi smeta kako

imaginarni golemini ( 1− ), osven ako korisnikot ne gi smeni.

primer:

>> i,j, i=3 ans = 0 + 1.0000i ans = 0 + 1.0000i i =

3 So prvite dve naredbi se definiraat dva kompleksni broja, dodeka so tretata

naredba zna~eweto na i e smeneto i sega pretstavuva voobi~aena promenliva so vrednost 3.

VE@BI:

Presmetaj gi vrednostite na slednive aritmeti~ki izrazi:

1) -2^3+9 2) 2/3*3 3) 3*2/3 4) 3*4-5^2*2-3 5) (2/3^2*5)(3-4^3)^2 6) 3*(3*4-2*5^2-3)

---- Osnovi na MatLab ----

8

4. Vgradeni Funkcii

MatLab kako jazik od povisoko nivo ima vgradeno vo svojata implementacija i golem broj na elementarni i naj~esto koristeni matemati~ki funkcii, kako {to se naprimer trignometriskite i eksponencijlanite. Vo Tabelata dadeni se postojnite elementarni funcii koi se dostapni vo MatLabot:

Elementarni matemati~ki funkcii

Trigonometric. sin Sinus sinh Sinus hiperbolen asin Arkus-sinus asinh Inverzen sinus hiperbolen cos Cosine. cosh Hyperbolic cosine. acos Inverse cosine. acosh Inverse hyperbolic cosine. tan Tangent. tanh Hyperbolic tangent. atan Inverse tangent. atan2 Four quadrant inverse tangent. atanh Inverse hyperbolic tangent. coth Hyperbolic cotangent.

Exponential.

exp Exponential. log Natural logarithm. log10 Common (base 10) logarithm. log2 Base 2 logarithm and dissect

floating point number. pow2 Base 2 power and scale floating

point number. sqrt Square root.

Complex. abs Absolute value. angle Phase angle. conj Complex conjugate. imag Complex imaginary part. real Complex real part. unwrap Unwrap phase angle. isreal True for real array.

Rounding and remainder. fix Round towards zero. floor Round towards minus infinity. ceil Round towards plus infinity. round Round towards nearest integer. mod Modulus (signed remainder after

division). rem Remainder after division. sign Signum.

Koristeweto na elementarnite funkcii e ednostavno i se sveduva na nivno povikuvawe so naredba koja se ispi{uva na ist na~in kako i vo matematikata.

>> x = 5*cos(pi/6), y = 5*sin(pi/6) x = 4.3301

---- Osnovi na MatLab ----

9

y = 2.5000

Vo gorniot primer presmetani se sin i cos vrednostite za argumentot pi/6, pri toa argumentite se zadavaat vo radiani.

>> acos(x/5), asin(y/5) ans = 0.5236 ans = 0.5236 >> pi/6 ans = 0.5236

So predhodnite naredbi se presmetani inverznite funkcii na cos i sin i kako rezultat doben e argumentot pi/6. Argumentite x i y se zemeni od prethodnite presmetki i tie egzistiraat vo rabotniot prostor ma MatLab-ot se dodeka eksplicitno ne gi izbri{eme. Vo prodol`enie, dadeni se nekolku primeri na koristewe na elementarnite matemati~ki funkcii.

>> x = 9;format; >> sqrt(x), exp(x), log(sqrt(x)),log10(x^2+6) ans = 3 ans = 8.1031e+003 ans = 1.0986 ans = 1.9395 >> format long e, exp(log(9)), log(exp(9) ans = 9.000000000000002e+000 ans = 9 >> format short

exp(x) ozna~uva eksponencijalna funkcija xex =)exp( dodeka log(x) e inverznata fukcija. Zatoa vo prethodniot primer rezultatot i vo dvata slu~aja e 9. Vo prviot primer poradi naredbata format long e, rezultatot e pe~aten so to~nost na 15 decimali pri {to se gleda deka vo 15-tata decimala postoi mala gre{ka na zaokru`uvawe. So naredbata format short, povtorno se vra}a standardniot na~in na prezentacija na broevite.

5. Nizi ( Vektori )

Nizite odnosno vektorite mo`at da se definiraat na dva na~ina: kako vektor-red

ili vektor-kolona. Vektor-red e niza na broevi ~ii elementi se odvoeni ili so zapirka ili so prazno mesto ( space). Brojot na elementite ja opredeluva dimenzijata (dol`inata) na vektorot a elementite ~esto se narekuvaat i komponenti na vektorot. Elementite mora da bodat zatvoreni so aglesti zagradi.

>> v = [1 3, sqrt(5)] v = 1.0000 3.0000 2.2361

---- Osnovi na MatLab ----

10

>> length(v) ans = 3

So primerot e poka`ano kako se definira vektorot x so tri elementi, pri {to tretiot element e funkcija, {to zna~i deka pri definirawe na vektor, kako element mo`e da se korisiti bilo kakva funkcija ili aritmeti~ki izraz koi kako rezultat pri presmetuvawe dava brojka. Praznite mesta za razdvojuvawe na komponentite se od vitalno zna~ewe.

>> v2 = [ 3+ 4 5] v2 = 7 5 >> v3 = [ 3 +4 5] v3 = 3 4 5

Pri definirawe na v2 praznoto mesto e staveno posle + i MatLab-ot izvr{il

sobirawe na 3 i 4 i kako rezultat dobein e vektor so dva elementi. Vo slu~aj na vektorot v3, praznoto mesto e pred +, i kako rezultat se dobiva vektor so 3 elementi.

Vektori so ista dol`ina mo`at da se sobiraat, vadat kako i da se mno`at so broj.

Kako primer da gi sobereme vektorite v i v3, prethodno presmetani.

>> v + v3 ans = 4.0000 7.0000 7.2361 >> v4 = 3*v v4 = 3.0000 9.0000 6.7082 >> v5 = 2*v - 3*v v5 = -7.0000 -6.0000 -10.5279

Vektorot mo`e da se definira so pomo{ na drugi vektori:

>> w = [1 2 3], z = [8 9] >> cd = [ 2*z, -w] >> sort ( cd ) w = 1 2 3 z = 8 9 cd = 16 18 -1 -2 -3 ans = -3 -2 -1 16 18

Vektorot cd e generiran koristej}i gi vektorite w i z. Komandata sort vr{i sortirawe na elementite na vektorot cd po golemina, i ovaa komanda e vgradena funkcija na MatLab-ot.

Mo`no e isto taka da se smeni ili da se ispe~ati vrednosta na daden element na

vektorot.

>> w(2) = -2, w(3) w = 1 -2 3 ans = 3

---- Osnovi na MatLab ----

11

Vektor mo`e da se koristi i kako argument na funkcija. Na primer:

>> w = [ 2 4 9 16 25 ] w = 2 4 9 16 25 >> sqrt(w) ans = 1.4142 2.0000 3.0000 4.0000 5.0000

Funkcijata sqrt ( kvadraten koren ) zima element po element i generira nov vektor

so elementi koi pretstavuvaat kvadraten koren na originalniot vektor w. Ovaa mo`nost na MatLab-ot pretstavuva mo}no oradie vo sporedba so drugi jazici, kade treba da se napi{e nekolku reda programa za da se dobie istiot rezultat. Ovoa svojstvo se narekuva vektorizacija na aritmetikata.

5.1 Oznaka ( : ) So oznakata dve to~ki ( : ), mo`no e na pokratok i pokompakten na~in generirawe na

vektori.

>> 1:4 >> 3:7 >> 1:-1 ans = 1 2 3 4 ans = 3 4 5 6 7 ans = Empty matrix: 1-by-0

So prvata nareedba generiran e vektor so prviot element ednakov na 1 a

posledniot 4. Drugite elementi se popolnuvaat so ~ekor edinica. Sli~no i vtorata naredba generira vektor kade prviot element e 3 i so ~ekor 1 se popolnuva se do posledniot koj ima vrednsot 7. Poslednata naredba generira prazen vektor bidej}i gornata granica -1 e pomala od dolnata granica 1.

Generalno naredbata m : k : n generira vektor so elementi {to zapo~nuvaat so

m i so ~ekor k zavr{uvaat so n ( nema da se generira element pogolem od n ).

>> 0.32 : 0.1 : 0.6 >> -1.4 : -0.3 : -2 ans = 0.3200 0.4200 0.5200 ans = -1.4000 -1.7000 -2.0000

5.2 Izdvojuvawe Na Elementite

>> r5 = [1:2:6, -1:-2:-7] r5 = 1 3 5 -1 -3 -5 -7

Za da se izdvojat elementite od tretoto do {estoto mesto se koristi naredbata: >> r5(3:6) ans = 5 -1 -3 -5 ili ako sakame alternativni elementi toga{:

---- Osnovi na MatLab ----

12

>> r5( 1:2:7 ) ans = 1 5 -3 -7 Pra{awe: [to naredbata r5( 6:-2:1), dava kako rezultata ?

5.3 Vektor kolona Vektor kolona se definira na sli~en na~in kako i vektor red. Elementite se

odvoeni so to~ka-zapirka (;) ili so nov red. >> c = [ 1; 3; sqrt(5) ] c = 1.0000 3.0000 2.2361 >> c2 = [ 3

4 5]

c2 = 3 4 5 >> c3 = 2*c - 3*c c3 = -7.0000 -6.0000 -10.5279

Vektor koloni mo`at da se sobirat ili odzemaat ako imaat ista dimenzija ( broj na elementi ).

5.4 Transponirawe So postapkata na transponirawe vektorot-kolona se pretvara vo vektor-red i

obratno. Transponiraweto se ozna~uva so simbolot ( ' ).

>> w = [ 1 -2 3 ], c = [ 1; 3; sqrt(5)] w = 1 -2 3 c = 1.0000 3.0000 2.2361 >> w', c ans = 1 -2 3 ans = 1.0000 3.0000 2.2361 >> t = w + 2*c' t = 3.0000 4.0000 7.4721

---- Osnovi na MatLab ----

13

>> T = 5*w' - 2*c T = 3.0000 -16.0000 10.5279 >> T,t T = 3.0000 -16.0000 10.5279 t = 3.0000 4.0000 7.4721

Vo primerot pogore promenlivite T i t se razli~ni, {to zna~i deka MatLab-ot pravi razlika pome|u mali i golemi bukvi i promenlivite so isto ime no definirani so mali ili golemi bukvi se smetaat kako dve posebni promenlivi.

Ako promenlivata x e kompleksen vektor, toga{ x' e kompleksno kowugiran

transponiran vektor na vektorot x.

>> x = [ 1+3i, 2-2i] x = 1.0000 + 3.0000i 2.0000 - 2.0000i >> x' ans = 1.0000 - 3.0000i .0000 + 2.0000i

5.5 Skalaren proizvod na vektori (*)

Skalaren proizvod na dva vektora so ista dimenzija prestavuva broj ( skalar) , koj se dobiva so sobirawe na proizvodite na soodvetnite elementi. Zna~i, prvo se mno`at soodvetnite komponenti na vektorot a potoa rezultatite se sobiraat.

),...,( 21 nuuuu =r

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

=

5

2

1

.

.

v

vv

vr

∑=n

iivuvu1

rr

na primer ako se:

)12,11,10( −=ur a

⎥⎥⎥

⎢⎢⎢

−−=

2221

20vr

toga{

---- Osnovi na MatLab ----

14

167)22(12)21()11(2010 =−×+−×−+×=vurr Vo MatLab-ot skalarniot proizvod se presmetuva na sledniot na~in:

>> u = [10, -11, 12 ], v = [20; -21; -22] >> prod = u*v u = 10 -11 12 v = 20 -21 -22 prod = 167

MatLab-ot presmetuva skalaren proizvod pome|u vektor-red i vektor-kolona. Imeno ako imame vektor:

>> w = [2, 1, 3] w = 2 1 3 Toga{ pri presmetuvawe na skalaren proizvod pome|u vektorite u i w , MatLab-ot }e prijavi gre{ka.

>> u*v ??? Error using ==> * Inner matrix dimensions must agree. dodeka pak u*w' ans = 45 bidej}i so operacijata transponirawe, vektorot-red w e pretvoren vo vektor-kolona.

Pod Euklidova norma ili dol`ina na vektor koja se odbele`uva so simbolot ur se

podrazbira broj koj se presmetuva so formulata.

∑=n

iuu1

2r

kade n e dimenzijata na vektorot. Dol`inata na daden vektor so MatLab-ot mo`e da se presmeta na dva na~ina:

>> dol = sqrt(u*u') dol = 19.1050 ili >> dol = norm(u) dol = 19.1050

Vo poslednata naredba koristena e vgradenata funkcija za presmetuvawe na normata na daden vektor. MatLab poseduva pove}e takvi funkcii koi deluvaat na vektorite.

---- Osnovi na MatLab ----

15

Zada~a:

Agolot θ pome|u dva vektor-koloni x i y definiran e so ravenstvoto:

yxyxrr′

=θcos

Iskoristi ja formulata za da se opredeli kosinus na agolot pome|u dvata vektora

]3,2,1[ ′=xr i ]1,2,3[ ′=yr

potoa najdi go agolot izrazen vo stepeni.

5.6 To~kast proizvod (.*) Vtor na~in da se pomno`at dva vektora so isti dimenzii a taka nare~en

HADAMAROV proizvod. Toj ne se koristi ~esto vo matematikata no pretstavuva neproceniva mo`nost i korist koja ja poseduva MatLab-ot. Ako u i v se dva vektora od ist tip ( kolona ili red ), matemati~ka definicija na ovoj proizvod (to~kast proizvod ) e vektor so komponenti:

],....,,[ 2211 nnvuvuvuvu =rr

rezultatot e vektor so ista dimenzija i od ist tip. Zna~i ednostavno se mno`at soodvetnite elementi na vektorite.

Vo MatLab-ot ovoj proizvod se definira so operatorot (.*).

>>u.*v ans = 20 -11 36 >>u.*v' ans = 200 231 -264 Primer: Tabelarno pretstavi ja funkcijata )sin( xxy π= za x = 0.0, 0.25, ,1.

Polesno e da se raboti so vektor-kolona, i zatoa prvo treba da se generiraat

vrednsotite na x.

x = (0 : 0.25 : 1)' x = 0 0.2500 0.5000 0.7500 1.0000

Za da se presmeta y potrebno e da se pomno`at soodevtnite elementi na vektorot x i vektorot )sin( xπ

---- Osnovi na MatLab ----

16

x sin(πx) xsin(πx) 0.000 0.0000 0.0000

0.2500 0.7071 0.1768 0.5000 1.0000 0.5000 0.7500 0.7071 0.5303 1.0000 0.0000 0.0000

So pomo{na MatLab-ot presmetkite se vr{at so edna naredba.

>> y = x.*sin(pi*x) y = 0 0.1768 0.5000 0.5303 0.0000

^ekorite na presmetuvawe koi {to se krijat zad ovoj eden red naredba se slednive:

• Sekoj element na vektorot-kolona x se mno`i so brojot pi = 3.1495. • Funkcijata sin se presmetuva za sekoj element na vektorot dobien so prethodniot

~ekor. Pri toa se dobiva nov vektor-kolona • Se vr{i to~kasto mno`ewe pome|u novodobientiot vektor sin(pix) i vektorot x i

se generira vektorot y ,~ii elementi se baranite tabelarni vrednosti na funkcijata.

5.7 To~kast koli~nik ( delewe ) ( ./ ) Ne postoi matemati~ki ekvivalent za delewe na eden vektor so drug. Vo MatLab-ot

operatorot ( ./ ) e definiran kako operacija na delewe na elementot na prviot vektor so soodvetniot element na vtoriot vektor. Od ovaa defenicija proizleguva deka vektorite so ista dimenzija ( dol`ina ), mo`at to~kasto da se delat.

>> a = 1:5, b = 6:10, a./b a = 1 2 3 4 5 b = 6 7 8 9 10 ans = 0.1667 0.2857 0.3750 0.4444 0.5000 >> a./a ans = 1 1 1 1 1 >> c = -2:2, a./c c = -2 -1 0 1 2 Warning: Divide by zero. ans = -0.5000 -2.0000 Inf 4.0000 2.5000

Vo prethodniot primer, definiran e vektorot c ~ii tret element e nula. Pri to~kastoto delewe na a so c, se javuva poraka deka se deli so nula, a kako rezultat MatLab-ot ispi{uva Inf, ozna~uvaj}i so beskone~nost rezult na deleweto so nula.

>> a.*b - 24 , ans./c

---- Osnovi na MatLab ----

17

ans = -18 -10 0 12 26 Warning: Divide by zero. ans = 9 10 NaN 12 13

Vo ovoj primer se javuva slu~aj na 0/0, i kako rezultat MatLab-ot ispi{uva NaN, {to zna~i deka tretiot element ne e broj. Primer: Da se oceni vrednosta na limesot:

xx

x

)sin(lim0

π−

Idejata e da se presmeta vrednosta na koli~nikot sin(πx)/x za niza vrednosti na

x koi se dobli`uvaat do 0. Neka taa niza se definira kako vektor-kolona.

>> x = [0.1; 0.01; 0.001; 0.0001] x = 0.1000 0.0100 0.0010

0.0001 toga{ >> sin(pi*x)./x

ans = 3.0902 3.1411 3.1416 3.1416

{to sugerira deka vrednostite konvergiraat kon π. Za da se dobie podobro ~ustvo, neka se odzeme π od sekoj element na ans. Za pe~atewe na pogolem broj na decimalni mesta, potrebno e da se smeni formatot.

>> format long >> ans - pi ans = -0.05142270984032 -0.00051674577696 -0.00000516771023 -0.00000005167713

Sega e jasno, deka koli~nikot konvergira kon π , bidej}i kre{kata na ~etvrtiot element e vo 8-ta decimala.

To~kastoto delewe ( ./ ), se koristi i za delewe na skalar ( broj ) so vektor.

>> 1./x ans = 10 100 1000 10000

---- Osnovi na MatLab ----

18

5.8 To~kasto stepenuvawe ( .^ ) Za da sekoj element na daden vektor se kvadrira, mo`e da se iskoristi to~kastoto

mno`ewe na vektorot so samiot sebe u.*u. No pokompakten na~in e so koristewe na to~kasto stepenuvawe ( .^ ).

>> u = [ 10 11 12 ]; >> u.^2 ans = 100 121 144 >> u.*u ans = 100 121 144 >> u.^4 ans = 10000 14641 20736 >> v = [ 20; -21; -22]; w = [2, 1, 3]; >> v.^2 ans = 400 441 484 >> format, u.*w.^(-2) ans = 2.5000 11.0000 1.3333

Treba da se zabele`i deka prvo se presmetuva ( .^ ), a potoa site drugi operacii po prioritet.

6. Crtawe Na Elementarni Funkcii

MatLab-ot ima mo`nosti da na brz i ednostaven na~in, grafi~ki prezentira

elementarni funkcii kako i da ispi{uva naslovi i labeli na graficite. Da pretpostavime deka treba da se iscrta funkcijata )3sin( xy π= za 10 ≤≤ x .

Postapkata se sostoi vo generirawe na vektor x so dovolen broj na elementi so vrednosti pome|u 0 i 1 i potoa da se presmetaat vrednostite na funkcijata y. Na toj na~in se dobivaat parovi na broevi ( x,y ), koi vo x-y koordinaten sistem ja definiraat funkcijata. Da pretpostavime deka se zemeni N+1 to~ki so ednakov interval h pome|u niv.

>>N = 10; h= 1/N; x = 0:h:1;

So gornite naredbi definiran e vektorot x = 0, 2h, 3h, ,1-h,1. Soodvetnite vrednosti na funkcijata y se presmetuva so:

>> y=sin(3*pi*x);

Kone~no mo`e da se icrta grafikot so naredbata:

>>plot(x,y)

---- Osnovi na MatLab ----

19

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Slika 1: Grafik na )3sin( xy π= za h = 0.1 Rezultatot e prika`an na Sl. 1, kade e sosema uo~livo deka vrednosta na H e mala

i zatoa grafikot nee gladok. Ako H se zgolemi na 100, rezultatot e sledniot.

>>N = 100; h=1/N; x = 0:h:1; >>y = sin(3*pi*x); plot(x,y)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Slika 2: Grafik na )3sin( xy π= za h = 0.01

Kako rezultat se dobiva gafikon so pogladka kriva.

---- Osnovi na MatLab ----

20

6.1 Naslov i labeli Za da se ispi{e naslovot i za da se labeliraat oskite se koristat slednive

naredbi.

>> title(' Graph of y = sin(3pi x)') >> xlabel('x axis') >> ylabel('y-axis')

Nizata na bukvi, pome|u dvata apostrofi ( ' ' ) mo`e da se sostoi od bilo kakvi znaci. MatLab-ot gi smeta kako niza na karakteri.

6.2 Mre`a

To~kasta mre`a mo`e da se definira so naredbata.

>>grid

Mre`ata mo`e da se trgne povtorno so naredbata grid ili so grid off.

6.3 Stil na linija i boi Polnata linija e tipot na linijata so koja se crta grafikonot ako poinaku nee

definirano. Polna bela linija se definira so naredbata:

>>plot(x,y,'w-')

Tretiot argument na naredbata plot pretstavuva niza od karakteri. Prviot karakter ja specificira bojata vo koja se crta linijata a vtoriot simbol go definira stilot na linijata. Opciite za bojata i stilot dadeni se vo slednava tabela.

Boja Stil na linijata

y `olta . to~ka m magenta o krug c cijan x krst r crveno + plus g zelena - polna linija b plavo * zvezda w bela : dve to~ki k crna -. isprekinata so to~ka - - isprekinata

6.4 Pove}e Grafici Pove}e grafici mo`at da se prika`at na eden crte`, kako naprimer

>> plot(x,y,'w-',x,cos(2*pi*x),'g--')

Isto taka mo`no e da se dodade i legenda na crte`ot

>> legend('Sin kriva','Cos kriva')

So ovaa naredba se iscrtuva listata na stilovite na liniite zaedno so opisniot tekst. Matlab-ot ja smestuva legendata na soodvetna pozicija taka da ne se pojavi kolizija so samite krivi.

>> plot(x,y,x,cos(3*pi*x),'g--') >> legend('Sin kriva','Cos kriva') >> title(' Multi-plot')

---- Osnovi na MatLab ----

21

>> xlabel('x axis'), ylabel('y axis') >> grid

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1 Multi-plot

x axis

y ax

is

Sin krivaCos kriva

Slika 3: Grafik na )3sin( xy π= i )3cos( xy π= za h = 0.01

6.5 HOLD naredbata Pri sekoje povikuvawe na plot, prethodniot crte` se bri{e i se crta noviot

grfik. Toa sekako ne e soodvetno ako podocna treba na istiot crte` da se dodade nov grafik. Za da se spre~i bri{ewe na crte`ot, se koristi naredbata hold.

>> plot(x,y), hold >> plot(x,y,'gx'), hold off

Naredbata hold ja zadr`uva slikata, dodeka pak hold off ja " osloboduva ", no nee i bri{e. Ako se saka i bri{ewe na slikata se koristi naredbata clg.

6.6 Podcrte` ( SUBPLOT) Grafi~kiot ekran ( window ), mo`e da se podeli na ( m x n ), pomali xam~iwa i

vo sekoj od niv da se nacrta grafik.

>> subplot(221), plot(x,y) >> xlabel('x'), ylabel('sin 3 pi x') >> subplot(222), plot(x,cos(3*pi*x)) >> xlabel('x'),ylabel(' cos 3 pi x') >> subplot(223), plot(x,sin(6*pi*x)) >> xlabel('x'),ylabel(' sin 6 pi x') >> subplot(224),plot(x,cos(6*pi*x)) >> xlabel('x'),ylabel('cos 6 pi x')

---- Osnovi na MatLab ----

22

0 0.5 1-1

-0.5

0

0.5

1

x

sin

3 pi

x

0 0.5 1-1

-0.5

0

0.5

1

x

cos

3 p

i x0 0.5 1

-1

-0.5

0

0.5

1

x

sin

6 p

i x

0 0.5 1-1

-0.5

0

0.5

1

x

cos

6 pi

x

Naredbata subplot(221) ili subplot(2,2,1) definira ~etiri pomali crte`i (

subplot) 2x2, pri {to e selektiran prviot ( 1 ) subplot za crtawe. Redniot broj na subplotot se definira po redovi.

6.7 Kontrola Na Oskite Edna{ odkako e generiran crte`ot, mo`no e da se smeni dijapazonot t.e.

intervalot na oskite x i y. >> clf, N=100; h=1/100; x=0:h:1; >> y=sin(3*pi*x); plot(x,y)

-0.5 0 0.5 1 1.5

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Slika 4: Efektot na promena na intervalot na oskite

---- Osnovi na MatLab ----

23

axis komandata ima ~etiri parametri. Prvite dva parametri se minimum i maksimum vrednosti na x-oskata dodeka poslednite dva se minimum i maksimum vrednosti na y-oskata. Aglestata zagrada e zadol`itelna. Rezultatot na ovie komandi e poka`an na Sl.4.

Ve`bi:

1. Iskucajte gi komandite i vidite {to se dobiva:

>> x = -1:0.1:1; >> plot(x,sin(pi*x),'g-') >> hold on >> plot(x,cos(pi*x),'r-')

6.8 Zgolemuvawe ( zoom ) ^esto se nametnuva potreba da nekoj del od grafikot ( slikata ) bide zgolemen so

cel da se vidat detalite. Toa se postiga so naredbata

>>zoom

So pomo{ na poka`uva~ot ( pointer ) na glu{ecot, se odbira mestoto na crte`ot koj treba da se zgolemi i so pritiskawe na levoto kop~e na glu{ecot se vr{i zgolemuvawe za dva pati. Ovaa postapka mo`e da se povtoruva dodeka ne se postigne sakanato zgolemuvawe. So pritiskawe na desnoto kop~e se namaluva crte`ot za dva pati.

Ako se saka da se zgolemi odreden del od crte`ot, toga{ toj del se okviruva so

pravoagolna ramka na na~in {to so postojano pritisnato levoto kop~e glu{ecot se dvi`i se dodeka delot ne se uokviri so pravoagolna ramka.

7. Matrici : Dvodimenzionalni Nizi

Vektor-kolona i vektor-red se specijalni slu~ai na matrici. Edna mxn matrica e

pravoagolna niza na broevi so m redovi i n koloni. Voobi~aeno e vo matematikata, matricata da se odbele`uva so obi~ni ili aglesti zagradi. Na primer za m=2 i n=3, imame matrica od redot 2x3, kako {to e

⎥⎦

⎤⎢⎣

⎡−−

=731

975A

Za da se vnese edna matrica vo MatLab-ot, ednostavno se vnesuvaat vrednostite

red po red koristej}i ja istata sintaksa kako i za vektorite.

>> B=[-1 2 5;9 0 5] B = -1 2 5 9 0 5 >> C=[0, 1; 3, -2; 4,2] C = 0 1 3 -2 4 2

---- Osnovi na MatLab ----

24

>> D=[1:5; 6:10; 11:2:20 D = 1 2 3 4 5 6 7 8 9 10 11 13 15 17 19

So gornite naredbi definirani se matricite B,C i D koi se od redot na 2x3, 3x2 i 3x5, soodvetno. Vo taa smisla, vektor-redot e matrica 1xn a vektor-kolonata e matrica od redot mx1.

7.1 Dimenzija Na Matricata Dimenzijata na matricata se dobiva ( opredeluva) so komandata size.

>> x=[ 1;2;3]; >> size(B), size(x) ans = 2 3 ans = 3 1 >> size(ans) ans = 1 2

Bidej}i matricata B e 2x3 a vektorot x, 3x1, naredbata size gi dava brojot na redovite i kolonite. Bidej}i samiot izlez se sostoi od dve vrednosti, promenlivata ans e sama vektor-red zatoa naredbata size(ans) dava vrednost 1 i 2. Mo`no e da se spasi rezultatot na naredbata size za ponatamo{no koristewe vo presmetkite.

>> [r,c]=size(B'), S = size(B') r = 3 c = 2 S =

3 2

7.2 Transponirawe Na Matrica Transponirawe na vektor vr{i transformacija na vektor-red vo vektor-kolona i

obratno. Pro{iruvawe na ovaa ideja vrz matricite, zna~i zamena na redovite so soodvetnite koloni: prviot red stanuva prva kolona i t.n.

>> D,D' D = 1 2 3 4 5 6 7 8 9 10 11 13 15 17 19 ans = 1 6 11 2 7 13 3 8 15 4 9 17 5 10 19 >> size(D), size(D') ans =

---- Osnovi na MatLab ----

25

3 5 ans = 5 3

7.3 Specijalni Matrici MatLab ovozmo`uva avtomatsko generirawe na brojni korisni vidovi na matrici od

bilo koj red. Naredbata ones(m,n) generira mxn matrica so edinici kako nejzini elementi.

>> P=ones(2,3) P = 1 1 1 1 1 1 zeros(m,n) generira mxn matrica so nuli.

>> Z=zeros(2,3), zeros(size(P') Z = 0 0 0 0 0 0 ans = 0 0 0 0 0 0

Vtorata komanda e primer za konstrukcija na matrica koja se bazira na dimenziite na dadena matrica.

Matricata se narekuva kvadratna ako ima ednakov broj na redovi i koloni ( nxn ).

Matricata e simetri~na ako e ednakva na svojata transponirana t.e. ne se menuva pri transponirawe. Jasno e deka samo kvadratnite matrici mo`at da bidat simetri~ni.

>> S = [ 2, -1, 0; -1, 2, -1; 0, -1, 2] S = 2 -1 0 -1 2 -1 0 -1 2 >> St = S' St = 2 -1 0 -1 2 -1 0 -1 2 >> S-St ans = 0 0 0 0 0 0 0 0 0

7.4 Edini~na Matrica Edini~na matrica e kvadratna matrica nxn, koja samo na glavnata dijagonala ima

edinici a site drugi elementi se nuli. Vo MatLab-ot edini~nata matrica se generira so naredbata eye(n).

>> I = eye(3), x = [8; -4; 1], I*x I =

---- Osnovi na MatLab ----

26

1 0 0 0 1 0 0 0 1 x = 8 -4 1 ans = 8 -4 1

Kako {to se gleda edini~nata matrica pomno`ena so vektor ili matrica go dava istiot vektor ili matricata.

7.5 Dijagonalna Matrica Dijagonalnata matrica e sli~na na edini~nata matrica osven {to dijagonalnite

elementi ne nu`no se edinici. Generirawe na dijagonalna matrica vo MatLabot mo`e da se napravi na dva na~ina. Prviot na~in e direktno vnesuvawe na dijagonalnata matrica.

>> D = [-3 0 0; 0 4 0; 0 0 2] D = -3 0 0 0 4 0 0 0 2

No ovoj na~in stanuva neefikasen koga e vo pra{awe matrica so pogolemi dimenzii ( pr. 100x100 ). Vo takov slu~aj se koristi naredbata diag. Prethodno se definira vektor d koj gi sodr`i dijagonalnite elementi na matricata a potoa so naredbata diag(d) se generira baranata dijagonalna matrica.

>> d = [-3 4 2], D=diag(d) d = -3 4 2 D = -3 0 0 0 4 0 0 0 2

No ako A e matrica, naredbata diag(A), gi izdvojuva dijagonalnite elementi vo vektor.

F=[0 1 8 7; 3 -2 -4 2; 4 2 1 1] F = 0 1 8 7 3 -2 -4 2 4 2 1 1 >> diag(F) ans = 0 -2 1

Treba da se zabele`i deka matricata ne mora da bide kvadratna.

---- Osnovi na MatLab ----

27

7.6 Konstrukcija na matrici ^esto e poprakti~no da golemite matrici se konstruiraat od pomali:

>> C = [ 0 1; 3 -2; 4 2]; x = [8; -4; 1]; >> G = [C x] G = 0 1 8 3 -2 -4 4 2 1 >> A = [ 5 7 9; 1 -3 -7], B, H = [A;B] A = 5 7 9 1 -3 -7 B = -1 2 5 9 0 5 H = 5 7 9 1 -3 -7 -1 2 5 9 0 5

So gornite naredbi matricata C e pro{irena so vektorot x formiraj}i matrica G, dodeka so poslednata naredba generirana e matricata H so pomo{ na matricite A i B, taka {to posle matricata A e dodadena matricata B so zgolemuvawe na brojot na redovite.

>> J= [1:4; 5:8; 9:12; 20 0 5 4] J = 1 2 3 4 5 6 7 8 9 10 11 12 20 0 5 4 >> K = [ diag(1:4) J; J' zeros(4,4)] K = 1 0 0 0 1 2 3 4 0 2 0 0 5 6 7 8 0 0 3 0 9 10 11 12 0 0 0 4 20 0 5 4 1 5 9 20 0 0 0 0 2 6 10 0 0 0 0 0 3 7 11 5 0 0 0 0 4 8 12 4 0 0 0 0

Komandata spy(K) generira grafi~ka prezentacija na mestata na ne-nultite elementi na matricata K, kako i vkupniot broj na ne-nultite elementi.

>> spy(K), grid

---- Osnovi na MatLab ----

28

0 1 2 3 4 5 6 7 8 9

0

1

2

3

4

5

6

7

8

9

nz = 34 primer: tabelirawe na funkcii

Da se napravi tabela na funkciite y=4sin(3x) i u=3sin(4x) za x =

0.0.1,0.2,....0.5

>> x=0:0.1:0.5; >> y=4*sin(3*x); u=3*sin(4*x); >> [x',y',u'] ans = 0 0 0 0.1000 1.1821 1.1683 0.2000 2.2586 2.1521 0.3000 3.1333 2.7961 0.4000 3.7282 2.9987 0.5000 3.9900 2.7279

Zada~ata mo`e da se re{i so pomal broj na naredbi.

>> x=(0:0.1:0.5)'; >> [x 4*sin(3*x) 3*sin(4*x) ] ans = 0 0 0 0.1000 1.1821 1.1683 0.2000 2.2586 2.1521 0.3000 3.1333 2.7961 0.4000 3.7282 2.9987 0.5000 3.9900 2.7279

7.7 Izdvojuvawe Na Elementi Na Matrica Mo`no e izdvojuvawe na del od matrica t.e. submatrica, na ednakov na~in kako i vo

slu~aj na vektorite. Sekoj element na matrica e indeksiran sprema redot i kolonata na koi im pripa|a. Elementot vo i-tiot red i j-tata kolona matemati~ki se ozna~uva kako Aij a vo Matlabot so A(i,j). Taka naprimer:

---- Osnovi na MatLab ----

29

>> J = [1:4; 5:8;9:12; 20 0 5 4] J = 1 2 3 4 5 6 7 8 9 10 11 12 20 0 5 4 >> J(1,1) ans = 1 >> J(2,3) ans = 7 >> J(4,5) �??? Index exceeds matrix dimensions. >> J(4,1) = J(1,1) + 6 J = 1 2 3 4 5 6 7 8 9 10 11 12 7 0 5 4 >> J(1,1) = J(1,1)-3*J(1,2) J = -5 2 3 4 5 6 7 8 9 10 11 12 7 0 5 4

Od gornite primeri se gleda deka elementite na matricata mo`at da se povikuvaat sami ili da se menuvaat i kombiniraat edni so drugi. Vo primerite {to sledat poka`ano e kako mo`at da se izdvojat koloni, redovi ili submatrici.

>> J(:,3) % tretata kolona se izdvojuva ans = 3 7 11 5 >> J(:,2:3) % kolonite 2 i 3 se izdvoeni ans = 2 3 6 7 10 11

0 5 >> J(4,:) ans = 7 0 5 4 >> J(2:3,2:3) ans = 6 7 10 11

---- Osnovi na MatLab ----

30

7.8 To~kast Proizvod Na Matrici ( .* ) To~kastiot proizvod e definiran na ist na~in kako i kaj vektorite. Bidej}i

soodvetnite elementi se mno`at me|usebno matricite moraat da imaat ista dimenzija ( red).

>> A = [ 6 7 9; 1 -3 -7] A = 6 7 9 1 -3 -7 >> B = [ -1 2 5; 9 0 5] B = -1 2 5 9 0 5 >> A.*B ans = -6 14 45 9 0 -35 >> A.*B' �??? Error using ==> .* Matrix dimensions must agree.

Vo posledniot primer se generira gre{ka bidej}i transponiranata matrica B' nema ista dimenzija kako matricata A.

7.9 Mno`ewe Na Matrica So Vektor Mno`ewe na matrica so vektor mo`e da bide ili od desno ili od levo t.e. xAr mno`ewe na matrica so vektor od desno i Axv mno`ewe na matrica so vektor od levo.

Naj~esto se sre}ava na mno`ewe od desno, xAr i zatoa vektorot x e vektor-kolona a brojot na kolonite na matricata A mora da e ednakov na brojot na elementite na x.

>> x = [8; -4; 1] x = 8 -4 1 >> A A = 6 7 9 1 -3 -7 >> A*x ans = 29 13 >> x*A �??? Error using ==> * Inner matrix dimensions must agree.

Za razlika pri voobi~aenoto mno`ewe, tuka Ax nee isto so xA, koga stanuva zbor za matrica i vektor.

---- Osnovi na MatLab ----

31

7.10 Mno`ewe na matrici

Za da se pomno`at matricite A so dimenzija mxn i mtricata B so dimenzija nxp, t.e. A*B, brojot na kolonite na matricata A mora da e ednakov so brojot na redovite na matricata B, pri {to se dobiva matricata C so dimenzija mxp.

>> A = [5 7 9; 1 -3 -7] A = 5 7 9 1 -3 -7 >>B = [ 0, 1; 3, -2; 4, 2] B = 0 1 3 -2 4 2 >> C = A*B C = 57 9 -37 -7 >> D = B* D = 1 -3 -7 13 27 41 22 22 22

Kako {to se gleda i pri mno`ewe na matricite ne mora da bide ispolnet komutativniot zakon, t.e. AB ne e ednakvo na BA.

8. Ciklusi ( Petqi )

Dosta ~esto pri re{avawe na postavena zada~a, se sre}ava povtoruvawe na odreden

broj naredbi. Sekako, problemot mo`e da se re{i ako istite naredbi se ispi{at onolku pati kolku e potrebno. Ovoj pristap i mo`e da bide primenet ako povtoruvaweto e edna{, dva pati ili nekolku pati. No problemite se javuvaat ako treba da se povtorat stotici pa i iljada pati. Sekako nikoj nema ni da se obide da istite naredbi gi prepi{uva iljada pati. Vakvi problemi, vo site programski jazici se re{avaat so postoewe na naredbi za ciklusi t.e. petqi. MatLabot nee iskqu~ok. Za da se vidi za {to stanuva zbor }e dademe primer. primer: Da se nacrta grfikon na funkcijata sin(nπx) vo intervalot –1 < x < 1, za n = 1,2,3,...8.

Jasno e deka gornata zada~a mo`e da se re{i so ispi{uvawe na 8 posebni komandi

za crtawe. No poednostaven na~in bi bil sledniot:

>> x = -1:0.05:1; >> for n = 1:8 >> subplot(4,2,n), plot(x,sin(n*pi*x)) >> end

---- Osnovi na MatLab ----

32

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

Site komandi koi se nao|aat pome|u naredbata for i end se povtoruvaat za n koj zapo~nuva od 1 pa 2,3 i se do 8. Naredbata subplot definira matrica od 4x2 subgrafici i pri n-toto povtoruvawe na ciklusot, grafikot se crta vo n-tiot subgrafik.

So komandite;

>> x=-1: 0.05: 1; >> for n=1:2:8 >> subplot(4,2,n),plot(x,sin(n*pi*x)) >> subplot(4,2,n+1), plot(x,cos(n*pi*x)) >> end

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

-1 -0.5 0 0.5 1-1

0

1

---- Osnovi na MatLab ----

33

se crtaat funkciite sin(nπx) i cos(nπx), za n = 1,3,5,7 edna pokraj druga. Kako broja~ vo ciklusot ( vo gorniot slu~aj toa e n ), mo`e da se koristi bilo koja

legalna promenliva pri {to mo`e za vrednostite na broja~ot da se definiraat i elementite na daden vektor. Toa zna~i deka mo`no e da se koristi for petqata od sleden vid.

>> for brojac = [23 11 19 5.4 6] .......................... >> end

Ovoj ciklus se povtoruva 5 pati pri {to vrednostite na brojac se sukcesivno elementite na vektorot.

primer: Nizata na Fibona~i zapo~nuva so broevite 0 i 1, a slednite elementi se dobivaat kako suma na predhodnite dva elementa. Matemati~ki f1 = 0, f2 = 1 i

21 −− += nnn fff za n = 3,4,5.....

Testiraj dali odnosot 1/ −nn ff se dobli`uva do vrednosta na zlatniot rez

618.12/)15( =+

>> F(1) = 0; F(2) = 1; >> for i=3:20 >> F(i) = F(i-1)+F(i-2); >> end >> plot(2:19,F(3:20)./F(2:19),'o') >> hold on >> plot(2:19,F(3:20)./F(2:19),'-') >> plot([0 20],((sqrt(5)+1)/2)*[1,1])

0 2 4 6 8 10 12 14 16 18 201

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

1.9

2

---- Osnovi na MatLab ----

34

primer: Presmetaj gi vrednostite na slednive sumi.

222220 201.....

41

31

211 ++++=S

2222221 211

201.....

41

31

211 +++++=S

.

.

.

222222100 1001......

211

201.....

41

31

211 +++++++=S

Postojat vkupno 81 suma. Prvata suma S20 mo`e da se presmeta so narebata

sum(1./(1:20).^2). ( Se koristi vgradenata naredba sum so argumentite vektor-red). Soodveten kod vo MatLab bi bil sledniot.

>> S= zeros(100,1); % 1 >> S(20) = sum(1./(1:20).^2); % 2 >> for n =21:100 % 3 >> S(n) = S(n-1) +1/n^2; % 4 >> end % 5 >> clf; plot([20:100],S(20:100),'.',[20 100],[1,1]*pi^2/6,'-') % 6 >> axis([20 100 1.5 1.7]) % 7 >> [(98:100)' S(98:100)] % 8 ans = 98.0000 1.6348 99.0000 1.6349 100.0 1.6350

20 30 40 50 60 70 80 90 1001.5

1.52

1.54

1.56

1.58

1.6

1.62

1.64

1.66

1.68

1.7

Programot za presmetuvawe i crtawe na baranite sumi se sostoi od nekolku

naredbi. So prvata naredba se opredeluva vektor-red S so 100 elementi ~ii po~etni vrednosti se 0. So vtorata naredba se presmetuva vrednsota na S20, koristej}i ja vgradenata procedura sum. So tretata, ~etvrtata i petata naredba koristej}i go for

---- Osnovi na MatLab ----

35

ciklusot, se presmetuvaat ostanatite vrednosti na sumite, so toa {to na prethodnata suma se dodava vrednsota 1/n^2 i na toj na~in se presmetuva slednata suma Sn. [estata i sedmata naredba grafi~ki gi pretstavuva rezultatite. Na kraj se pe~atat vrednostite na poslednite tri sumi S98, S99 i S100.

9. Logi~ki Relacii ( Testirawe)

MatLabot ima mo`nosti za logi~no testirawe. Vo ramkite na MatLab-ot vistina (

true) se osna~uva so 1 a nevistina ( false ) so 0.

true = 1, false = 0 Ako vo tek na presmetki nekoja promenliva x dobie nekoja broj~ana vrednsot,

mo`no e da se sprovedat soodvetni logi~ni testovi kako naprimer: x == 2 dali x e ednakvo na 2 ? x ~= 2 dali x e razli~ito od 2? x > 2 dali x e pogolemo od 2? x < 2 dali x e pomalo od 2? x >= 2 dali x e pogolemo ili ednakvo na 2? x <= 2 dali x e pomalo ili ednakvo na 2? Rezultatot na ligi~noto testirawe e 1 ili 0 vo zavisnost dali tvrdeweto e

vistinito ili ne.

>> x = pi x =

3.1416 >> x ~= 3, x ~= pi ans = 1 ans = 0

Ako e x vektor ili matrica, testot se sproveduva za sekoj element.

>> x = [ -2 pi 5; -1 0 1 ] x = -2.0000 3.1416 5.0000 -1.0000 0 1.0000 >> x == 0 ans = 0 0 0 0 1 0

So gornata naredba ispituvame dali sekoj element na x e ednakov na nula. Kako rezultat se dobiva povtorno matrica so ista dimenzija kako i matricata x, so toa {to site elementi se 0 osven elementot (2,2), koj e 1 bidej}i toj element e navistina nula {to kako rtezultata na logi~koto testirawe dava vistina t.e. 1.

10. Logi~ni Operatori

MatLab-ot ima mo`nost da kombinira i vr{i opredeleni operacii vrz logi~nite

promenlivi koristej}i logi~ni operatori.

---- Osnovi na MatLab ----

36

& Logi~no I ( AND ) | Logi~no ILI ( OR ) ~ Logi~na negacija NE ( NOT) xor Logi~no XOR any Vistinito ako bilo koj element na vektorot ne e nula all Vistinito ako site elementi na vektorot se razli~ni od nula

So slednite tabeli definiran e na~inot na koj logi~nite operatori dejstvuvaat.

A B A&B 1 1 1 1 0 0 0 1 0 0 0 0

A B A|B 1 1 1 1 0 1 0 1 1 0 0 0

A ~A 1 0 0 1

A B xor(A,B) 1 1 0 1 0 1 0 1 1 0 0 0

So MatLab-ot istoto mo`e da se proveri na sledniot na~in.

>> a=[1 1 0 0], b=[1 0 1 0] >> a&b,a|b, xor(a,b) a = 1 1 0 0 b = 1 0 1 0 ans = 1 0 0 0 ans = 1 1 1 0 ans = 0 1 1 0 any(x), all(x) ans = 1 1 1 ans = 1 0 1

Bidej}i x e matrica, toga{ operatorite any i all se primenuvaat na sekoja kolona poodelno i rezultatot e vektor-red so broj na elementi ednakov na brojot na koloni na matricata x. Naredbata any(x) kako rezultat dava vektor-red so site edinici,

---- Osnovi na MatLab ----

37

bidej}i vo sekoja kolona na matricata x posti barem eden element razli~en od nula. Naredbata all(x), rezultira vo vektor-red ~ii vtor element e nula, bidej}i site elementi na vtorata kolona na matricata x ne se razli~ni od nula.

Koristej}i gi mo`nostite za logi~no testirawe vo kombinacija so logi~nite

operatori, mo`no e da se formiraat poslo`eni logi~ni iskazi.

>> x > 3 & x < 4 ans = 0 1 0

0 0 0

Gornata, eden red naredba mo`e da se ras~leni na slednive tri naredbi.

>> y = x>3, z = x<4, y&z y = 0 1 1 0 0 0 z = 1 1 0 1 1 1 ans = 0 1 0 0 0 0

Prvo {to mo`e da se zakqu~i e deka logi~kite testirawa imaat povisok prioritet na izvr{uvawe od logi~nite operatori. Zatoa prvo e realizirana naredbata x>3 i kako rezultat se dobiva matricata y koja na mesta kade elementite na x se pogolemi od tri ima vrednsot 1 a tamu kade se pomali ili ednakvi elementite na y se nula. Sli~no se dobiva i so naredbata x< 4, samo {to sega drug e uslovot za testirawe. Odkako }e se dobijat matricite y i z, se primenuva operatorot AND ( & ), element po element, sledej}i go praviloto dadeno vo tebelite. Rezultatot na taa logi~na operacija e matricata dadena so promenlivata ans. >> x = [-2 pi 5; -5 -3 -1] x = -2.0000 3.1416 5.0000 -5.0000 -3.0000 -1.0000 >> x > 3 | x == -3 | x <= -5 ans = 0 1 1 1 1 0

Edna od mo`nite primeni na logi~nite testirawa i logi~nata aritmetika e i maskirawe ( izdvojuvawe ) na elemnti koi zadovoluvaat daden uslov.

>> x, L = x >= 0 x = -2.0000 3.1416 5.0000 -5.0000 -3.0000 -1.0000 L = 0 1 1 0 0 0 >> pos = x.*L pos = 0 3.1416 5.0000 0 0 0

Matricata pos gi sodr`i onie elementi koi se pogolemi od 0 t.e. nenegativnite.

---- Osnovi na MatLab ----

38

>> x = 0:0.05:6; y = sin(pi*x); Y= (y >=0).*y; >> plot(x,y,':',x,Y,'-')

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

11. While Ciklus ( Petqa)

Dosta ~esto vo tek na presmetkite se javuva potrebaa odreden blok na naredbi da bidat povtoreni, no za razlika od for ciklusot, ne e poznat to~niot broj na povtoruvawa ve}e samo uslovot so ~ie ispolnuvawe se zavr{uva povtoruvaweto. Takov tip na problemi vo Matlabot se realizira so while .... end konstrukcijata ( petqa ).

primer: Koja e najgolemata vrednost na n za da sumata

222 .....21 nS +++=

bide pomala od 100.

>> S =1; n = 1; >> while S+ (n+1)^2 < 100 >> n = n+1; >> S = S + n^2; >> end >> [n,S] ans =

6 91

Del na naredbite pome|u while i end }e bidat presmetani samo ako uslovot S+ (n+1)^2 < 100 e ispolent ( vistinit).

ve`ba: Vo prethodnata ve`ba namesto 100, stavete 10 i pe{ki izrabotete go primerot sledej}i gi naredbite. Treba da se dobie rezultatot n=2 i S=5. primer: Opredeli go pribli`no re{enieto na ravenkata x = cos(x).

Re{enieto na ravenkata mo`e da se dobie so iterativna metoda. Ako

pretpostavime teka po~etno re{enie e x = π/4, toga{ so presmetuvawe na nizata na broevi

---- Osnovi na MatLab ----

39

)cos( 1−= nn xx n=2,3,4 ....

i so zadovoluvaweto na uslovot deka | xn – xn-1 | e dovolno malo, vrednosta na xn }e bide baranato re{enie.

Metoda 1:

>> x = zeros(1,20) ; x(1) = pi/4; >> n = 1; d = 1; >> while abs(d) > 0.001 >> n = n+1; x(n) = cos(x(n-1)); >> d = x(n)-x(n-1); >> end >> n,x n = 14 x = Columns 1 through 7 0.7854 0.7071 0.7602 0.7247 0.7487 0.7326 0.7435 Columns 8 through 14 0.7361 0.7411 0.7377 0.7400 0.7385 0.7395 0.7388 Columns 15 through 20 0 0 0 0 0 0

Postojat pove}e nesovr{enosti vo gorniot program. Vektorot x se koristi za da se so~uvaat rezultatite na iteracijata vo sekoj ~ekor. No odnapred ne se znae koja dimenzija na vektorot e dovolna za da se zapomnat site vrednosti do kone~noto re{enie. Vo gorniot primer 20 elementi bea dovolni bidej}i uslovot be{e zadovolen pri 14-iot element. Mo`e da se slu~i uslovot d<=0.001, da ne bide nikoga{ zadovolen, i kako rezultat na toa da se slu~i beskone~en cilus. Zatoa potrebno e da se definira maksimalen broj na ~ekori. Isto taka ne se od interes me|u ~ekorite, tuku samo krajnoto re{enie.

Metoda 2.

>> xold = pi/4; n = 1; d = 1; >> while abs(d) > 0.001 & n < 20 >> n = n+1; xnew = cos(xold); >> d = xnew-xold; >> xold = xnew; >> end >> [n, xnew, abs(d)] ans = 14.0000 0.7388 0.0007

Vo modificiranata verzija, uslovot e dvoen. Ne samo {to gre{kata treba da e pomala od 0.001 ve}e ciklusot se povtoruva se dodeka n < 20. Na toj na~in se ograni~uva maksimalniot broj na ~ekori vo ciklusot.

Op{tata forma na while naredbata e: while logi~en test

naredbite koi treba da se izvr{at end

---- Osnovi na MatLab ----

40

12. if ..... then .... else .... end

Vo sekoj pa i najednostaven program, so koj se re{avaat prakti~ni problemi, ~esto

se javuva potreba da odreden blok na naredbi se izvr{uvaat ako daden uslov e zadovolen. Mo`nosta da se razgranuva programata i na toj na~in da se kontrolira tekot na izvr{uvaweto e sostaven del na sekoj poserjozen programski jazik. Vo taa smisla i MatLab-ot ima konstrukcii so koi se naso~uva izvr{uvaweto na programata usloveno od ispolnuvaweto na daden uslov. Toa se postignuva so if ..... then .... else .... end

Kako primer da se presmeta dali e eπ pogolemo ili pomalo od πe :

>> a = pi^exp(1); c = exp(pi); >> if a >= c >> b = a^2 - c^2 >> end

Bidej}i nemame pe~atewe na b, zakqu~uvame deka a = eπ < c = πe . Po~esta situacija e :

>> if a >= c >> b = sqrt(a^2 - c^2) >> else >> b = 0 >> end b = 0 so {to se obezbeduva b-to sekoga{ da ima vrednost i se potvrduva deka a<c.

Op{tata forma na if.... konstrukcijata e: if logi~en test_1

komandi koi se izvr{uvaat ako test_1 e ispolnet

elseif logi~en test_2 komandi koi se izvr{uvaat ako test_2 e ispolnet

.

.

. else logi~en test_k

komandi koi se izvr{uvaat ako test_k e ispolnet

end

13. Skript Datoteki I Funkcii ( m-fajlovi)

Vo osnova, MatLab-ot e programski jazik interpreter. Toa zna~i deka sekoja naredba se interpretira i se izvr{uva vedna{ pe~atej}i gi rezultatite na ekran. Vo slu~aj ako treba istata naredba da se povtori, taa mora povtorno da se ispi{e. Vo taa smisla, MatLab-ot ovozmo`uva odredeni olesnuvawa, kako {to e mo`nosta da so kop~eto na tastaturata ozna~eno so gorna strelka se listaat prethodnite ispi{ani naredbi. Na toj na~in mo`e da se povtori naredbata. Sepak, iako ovoj element, donekade e olesnuvawe, sepak ima svoi nedostatoci. Imeno naredbite se pametat vo rabotniot prostor na programot se dodeka MatLab-ot e aktiven. Otkako }e se iskqu~i MatLab-ot, site zapamteni promenlivi i naredbi se bri{at i pri povtorno

---- Osnovi na MatLab ----

41

aktivirawe na MatLab-ot tie ne postojat vo rabotniot prostor. Za da se ovozmo`i povtorno koristewe na odredeni naredbi ( toa se vglavnom grupa na naredbi koi ~esto se koristat ), Matlab-ot ima mo`nosti da naredbite edna{ se ispi{at vo poseben fajl ( datoteka), koi se narekuvaat m-fajlovi, i istite m-fajlovi, otkako MatLab-ot }e se aktivira, se pro~itaat i smestat vo rabotniot prostor. M-fajlovite se nao|aat na diskot vo direktoriumot na korisnikot.

MatLab-ot poznava dva tipa na m-fajlovi: Skript m-fajlovi i Funkciski m-fajlovi.

13.1 Skript m-fajlovi Skript m-fajlovite sodr`at edna ili pove}e naredbi koi se izvr{uvaat so

povikuvawe na imeto na skript m-fajlot.

primer: Da se napi{e skript m-fajl so koj se presmetuva povr{ina na eden triagolnik ako se poznati negovite strani.

Poznato e deka povr{inata na eden triagolnik so zadadeni strani a,b i c dadena e

so formulata:

))()(( bsbsassA −−−= kade 2cbas ++

=

Soodvetnite naredbi vo MatLab-ot se: >> a=10;b=15;c=20; >> s=(a+b+c)/2; >> A=sqrt(s*(s-a)*(s-b)*(s-c)) A = 72.6184

Vo slu~aj ako treba da se smeni vrednosta na edna strana i da se presmeta novata povr{inata, potrebo e novo ispi{uvawe na site naredbi, iako vo drugite naredbi ne se napraveni izmeni. Slu~ajot stanuva podrasti~en ako e potrebno da se presmeta povr{inata na desetici ili stotici triagolnici.

Ovoj problem mo`e da se nadmine ako se formira skrip m-fajl, taka {to naredbite

so koi se presmetuva povr{inata se ispi{at vo fajlot. Vo konkretniot primer formiran e skript m-fajl so ime area.m i smesten e vo direktoriumot E:\mat-vezbi.

area.m

s=(a+b+c)/2; A=sqrt(s*(s-a)*(s-b)*(s-c))

Sega presmetuvaweto na povr{inata mo`e da se realizira na sledniot na~in.

>> a=10;b=15;c=20; >> area A = 72.6184 >> a=3;b=4;c=5; >> area A = 6

---- Osnovi na MatLab ----

42

Od gornite dva primeri mo`e da se naseti kako MatLab-ot gi obrabotuva skript m-fajlovite. Imeno, programot go nao|a fajlot area.m i na mestoto kade se povikuva area gi ufrla naredbite kio se sodr`at vo fajlot. Toa e napraveno interno i ne e vidlivo za korisnikot. Za korisnikot e va`no deka se izbegnuva povtorno ispi{uvawe na naredbite, a {to mo`e da bara dosta vreme. Toa posebno e korisno ako m-fajlot sodr`i pove}e desetici naredbi. Isto taka va`no e da se napomene deka promenlivite kako {to vo konkretniot primer se a,b i c moraat da bidat definirani i da postojat vo rabotniot prostor. Druga bitna karakteristika na skript fajlovite e taa, {to tie eksplicitno ne vra}aat vrednosti vo glavniot program, osven ako toa ne se opredeli so toa {to naredbata nema da se zavr{i so ;. Vo konkretniot primer toa e slu~aj so promenlivata A ( povr{ina ), koja se ispi{uva na ekran bidej}i naredbata so koja se presmetuva ne zavr{uva so ;.

Od seto ka`ano, mo`e da se zakqu~i deka skript m-fajlovite, se korisni ako

postojat presmetki ili mno`estvo na naredbi koi ~esto ili standardno se potrebni pri presmetkite. Karakteristi~en primer e grafi~ko iscrtuvawe na zadadena funkcija, pri {to vo skript fajlot se definira izgledot na grafikonot. Podole e daden eden takov primer.

crta.m

plot(x,y,'w-') legend(' matematicka kriva') title(' Crtez na fukcija ') xlabel('x-oska'), ylabel('y-oska') grid

Sega e mo`no slednoto

>> x=-pi:pi/20:pi; >> y=sin(x); >> crta

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1 Crtez na fukcija

x-oska

y-os

ka

matematicka kriva

ili isto taka

>> x=-1:2/100:1; >> y=x.^2; >> crta

---- Osnovi na MatLab ----

43

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1 Crtez na fukcija

x-oska

y-os

ka

matematicka kriva

Od primerite lesno se konstatira deka vektorite x i y mora da bidat prethodno

definirani i prisutni vo rabotniot prostor, bidej}i tie se promenlivi koi se javuvaat i so koi raboti skript m-fajlot.

13.2 Funkciski m-fajlovi Funkciskite m-fajlovi ( funkcii), sli~no kako i skript fajlovite se ispi{uvaat

vo datoteka i se ~uvaat na diskot vo daden direktorium. Razlikata se sostoi vo toa {to funkciite vra}aat vrednosti na promenlivi kako rezultat od presmetkite koi se vr{at vo ramkite na funkcijata no isto taka tie i primaat vrednosti na promenlivi koi se koristat vo ramkite na samata funkcija. Toa zna~i deka funkciite ne go koristat rabotniot prostor kako prenosen mehanizam za zemawe ili vra}awe na promenlivi. Za ilustracija, skript fajlot area.m, }e bide napi{an vo forma na funkcija.

function [A] = povr(a,b,c) % presmetuva povrsina na triagolnik cii % strani imaat dolzina a, b i c. % Vlez: % a, b, c : Dolzini na strani % Izlez % A: Povrsina na triagolnikot % Koristenje: % Area = povr(2,3,4) %------------------------------------------------ s = (a+b+c)/2; A=sqrt(s*(s-a)*(s-b)*(s-c)); %----------- kraj na funkcijata povr -----------

Pred da se objasnat osnovnite ~ekori za definirawe i pi{uvawe na funkciskite m-fajlovi, }e dademe nekolku primeri na koristewe na pogore definirana fukcija povr. Prethodno treba da se podvle~e deka datotekata povr.m e so~uvana vo direktoriumot E:\mat-vezb, i sekoga{ e dostapna za koristewe.

>> povr(3,4,5)

---- Osnovi na MatLab ----

44

>> Area = povr(3,4,5) >> x=10;y=15;z=20; >> A=povr(x,y,z) ans = 6 Area = 6 A = 72.6184

So gornite naredbi ilustrirano e koristeweto na funkciite kako i seta nivna fleksibilnost i korisnost. So prvata naredba presmetana e povr{inata na triagolnikot so stranici 3,4 i 5 no bidej}i ne e nazna~eno vo koja promenliva se pameti izlezniot rezultat MatLab-ot avtomatski rezultatot go pameti vo promenlivata ans. So vtorata naredba rezultatot na presmetkite se dodeluva na promelnivata Area. Tretata naredba definira tri promenlivi x,y i z koi se vlezni vrednosti na funkcijata povr i so ~etvrtata naredba se presmetuva povr{inata za vrednostite na x,y i z a rezultatot se dodeluva na promenlivata A. So poslednata naredba A = povr(x,y,z) ilustrirano e svojstvoto na funkciite deka tie kako vlezni parametri mo`at da primaat i promenlivi koi nemaat isto ime kako vo samata definicija na funkcijata, {to ne e slu~aj kai skript fajlovite. So drugi zborovi site promenlivi koi se koristat vo definicijata na funkcijata se lokalni promenlivi i tie ne mo`at da bidat koristeni nadvor od funkcijata. Taka naprimer vo ramkite na defincijata na funkcijata povr.m postoi promenliva s. No ako se obideme da ja ispe~atime vrednosta na s, se dobiva slednoto.

>> s ??? Undefined function or variable 's'. odnosno porakata deka promenlivata s e nedifinrana.

No ako se saka vrednosta na s ( promenlivata vsu{nost pretstavuva polovina od

zbirot na stranite ), toga{ e potrebno istata promenliva da bide stavena kako izlezna promenliva. Toa mo`e da se stori ako se promeni zaglavieto na funkcijata vo.

function [A,s] = povr(a,b,c) Vakva funkcija mo`e da bide povikana na pove}e na~ini:

1. Bez promenliva za pridru`uvawe na vrednosta.

>> povr(10,15,20) ans = 72.6184

Rezultatot e samo povr{inata ( prvata promenliva vo izleznata lista ) na promenlivata ans.

2. So pridru`uvawe na edna izlezna vrednost

>> Area = povr(10,15,20)

Area = 72.6184

Povtorno vtorata izlezna promenliva se ignorira.

3. So pridru`uvawe na dvete izlezni promenlivi

>> [Area, hlen] = povr(10,15,20)

---- Osnovi na MatLab ----

45

Area = 72.6184 hlen = 22.5000

Generalno, praviloto za definirawe na edna funkcija se sostoi od slednive

~ekori.

1. Odberite ime na funkcijata koe nema da bide isto kako i ime koe ve}e postoi i se koristi od strana na MatLab-ot. Vo konkretniot primer imeto na funkcijata e povr i nejzinata definicija ( kod ) se nao|a vo fajlot povr.m.

2. Prvata linija na fajlot mora sekoga{ da ima forma

function [lista na izlezni promenlivi] = ime_na_fukcijata[lista na vlezni proemnlivi]

Vo na{iot porimer toa e:

function [A,s] = povr(a,b,c)

3. Dokumentirajte ja funkcijata t.e. treba da se objasni na kratko koi presmetki gi

vr{i funkcijata. Tie linii moraat da zapo~nuvaat so %, i MatLab-ot site linii koi zapo~nuvaat so % gi smeta za komentar i se ignoriraat koga funkcijata se povikuva.

4. Na kraj se pi{uva kodot odnosno naredbite so koi se definira funkcijata. Prepora~livo e pova`nite naredbi ako ne site da bidat sledeni so komentar koj bi ja objasnil su{tinata na konkretnata naredba, kako bi mu ovozmo`il na drug korisnik da razbere {to funkcijata raboti.

Treba da se napomene deka prvite linii na komentar po zaglavieto na funkcijata,

MatLabot gi koristi kako pomo{ za objasnuvawe na funkcijata. Imeno ako se napi{e

>> help povr

presmetuva povrsina na triagolnik cii strani imaat dolzina a, b i c. Vlez: a, b, c : Dolzini na strani Izlez A: Povrsina na triagolnikot Koristenje: Area = povr(2,3,4)

------------------------------------------------ se ispi{uvaat liniite na komentar po zaglavieto i zatoa e prepora~livo da postoi detalnen opis na funkcijata.

Primeri Na Funkcii Da se napi{e funkcijata za presmetuvawe na nizata na Fibona~i koja e definirana

na sledniot na~in,

2121 ,1,0 −− +=== nnn fffff n=3,4,5.....

pri {to kako vlezna promenliva da bide n izlezot fn.

METOD 1: Fajl E:\mat-prog\Fib1.m

---- Osnovi na MatLab ----

46

function f = Fib1(n) % premetuva n-tiot broj vo %nizata na Fibonaci F = zeros(1,n+1); F(2) = 1; for i = 3:n+1 F(i) = F(i-1) + F(i-2); end f = F(n); %--------------- kraj---------------

METOD 2: Fajl E:\mat-prog\Fib2.m

Prvata metoda od programska to~ka na gledi{te e dosta neelegantna bidej}i

nepotrebno koristi memorija za da gi so~uva site n elementi na nizata. Vtorata metoda go eleminira koristeweto na vektori.

function f = Fib2(n) % premetuva n-tiot broj vo %nizata na Fibonaci if n== 1 f=0; elseif n==2 f=1; else f1 = 0; f2 = 1; for i = 2:n-1 f = f1 + f2; f1 = f2; f2 = f; end end %--------------- kraj--------------- METODA 3: Fajl E:\mat-prog\Fib3.m

Ovaa verzija gi koristi mo`nostite na MatLab-ot za rekurzivno programirawe t.e.

funkcijata sama sebe se povikuva.

function f = Fib3(n) % premetuva n-tiot broj vo % nizata na Fibonaci if n== 1 f=0; elseif n==2 f=1; else f = Fib3(n-1) + Fib3(n-2) end %--------------- kraj---------------

METODA 4: Fajl E:\mat-prog\Fib4.m

Ovaa verzija ja koristi silinata na vektorizacija t.e. matri~noto smetawe. Imeno

function f = Fib4(n) % premetuva n-tiot broj vo % nizata na Fibonaci A = [0 1;1 1]; y = A^n*[1;0];

---- Osnovi na MatLab ----

47

f = y(1); %--------------- kraj---------------

Na kraj da gi usporedime rezultatite.

>> x1 = Fib1(10) >> x2 = Fib2(10) >> x3 = Fib3(10) >> x4 = Fib4(10) x1 = 34 x2 = 34 x3 = 34 x4 = 34

Gornite ~etiri metodi davaat isti rezultati no zatoa pak brzinata so koja se vr{at presmetkite e razli~ita. Toa mo`e da se poka`e so merewe na vremeto koristej}i gi naredbite tic i toc, so koi se dobiva potro{enoto vreme vo sekundi.

>> tic,x1 = Fib1(20),toc >> tic,x2 = Fib2(20),toc >> tic,x3 = Fib3(20),toc >> tic,x4 = Fib4(20),toc

x1 = 4181 elapsed_time = 0.1700 sec x2 = 4181 elapsed_time = 0 sec x3 = 4181 elapsed_time = 31.8000 sec x4 = 4181 elapsed_time = 0 sec

14. Drugi Vgradeni Funkcii

14.1 Zaokru`uvawe Na Broevi Postojat pove}e na~ini da se zaokru`at decimalnite broevi do celobrojna

vrednost.

>> x=[ -3.14 0 3.14 6.45 9.75], round(x) x = -3.1400 0 3.1400 6.4500 9.7500 ans = -3 0 3 6 10 >> fix(x) ans = -3 0 3 6 9 >> floor(x)

---- Osnovi na MatLab ----

48

ans = -4 0 3 6 9 >> ceil(x) ans = -3 0 4 7 10 >> sign(x), rem(x,3) ans = -1 0 1 1 1 ans = -0.1400 0 0.1400 0.4500 0.7500

Funkcijata round vr{i zaokru`uvawe na klasi~en na~in t.e. ako e decmalniot del

pogolem od 0.5 se zaokru`uva kon sledniot cel broj, dodeka vo sprotiven slu~aj kon prethodniot pomal cel broj.

Funkcijata fix zaokru`uva na celobrojniot del od brojot odnosno go bri{e

decimalniot del. Funkcijata floor zaokru`uva kon prviot pomal cel broj bez razlika na vrednosta

na decimalniot del. Funkcijata ceil zaokru`uva kon prviot pogolem cel broj bez razlika na vrednosta

na decimalniot del. So funkcijata sign se opredeluva znakot na brojot. Funkcijata rem(x,k) go dava decimalniot del od brojot x do k decimali.

14.2 Funkcijata sum Funkcijata sum primeneta na vektor ja presmetuva sumata na elementite na

vektorot, dodeka primeneta na matrica ja opredeluva sumata na elementite na sekoja kolona na matricata.

>>A = [1:3; 4:6; 7:9]

A = 1 2 3 4 5 6

7 8 9 >> s = sum(A), ss=sum(sum(A))

s = 12 15 18 ss =

45 >> x = pi/4*(1:3)' >> A=[sin(x), sin(2*x), sin(3*x)]/sqrt(2)

x = 0.7854 1.5708 2.3562 A = 0.5000 0.7071 0.5000 0.7071 0.0000 -0.7071

0.5000 -0.7071 0.5000

---- Osnovi na MatLab ----

49

>> s1 = sum(A.^2), s2 = sum(sum(A.^2)) s1 = 1.0000 1.0000 1.0000 s2 =

3.0000

Sumata na kvadratite na elementite na sekoja kolona na matricata A e 1, a sumata na site elementi na A e 3.

>> A*A'

ans = 1.0000 0 0 0 1.0000 0.0000

0 0.0000 1.0000

Prizleguva deka proizvodot AA' i A'A se ednakvi na edini~na matrica.

>> S = eye(3) S = 1 0 0 0 1 0 0 0 1 >> A*A' - S ans = 1.0e-015 * -0.2220 0 0 0 -0.2220 0.0555 0 0.0555 -0.2220 >> A'*A - S ans = 1.0e-015 * -0.2220 0 0 0 -0.2220 0.0555 0 0.0555 -0.2220

Prethodnata konstatacija se potvrduva so poslednive dve presmetki bidej}i

razlikata od edini~na matrica e na nivo na numeri~kata gre{ka na zaokru`uvawe.

14.3 Funkcii max i min Ovie funkcii dejstvuvaat na sli~en na~in kako i funkcijata sum. Ako argumentot e

vektorot x toga{ max(x) go dava najgolemiot element na vektorot x a min(x) najmaliot.

>> x = [1.3 -2.4 0 2.3], max(x), max(abs(x))

x = 1.3000 -2.4000 0 2.3000 ans = 2.3000 ans =

2.4000 >> [m,j] = max(x)

m = 2.3000 j =

4

---- Osnovi na MatLab ----

50

Koga se bara izlezot da bide lista od dve promenlivi, toga{ prvata promenliva e maksimalniot element a vtorata promenliva go ozna~uva indeksot t.e mestoto na maksimalniot element.

Za promenlivi od tip na matrici, max(A), vra}a vektor-red {to gi sodr`i

najgolemite ( maksimalnite) elementi na sekoja kolona. Za da se najde najgolemiot element na matricata A, treba da se napi{e naredbata max(max(A)).

>> max(max(A)), min(min(A))

ans = 0.7071 ans =

-0.7071

14.4 Generirawe Na Slu~ajni Broevi Funkcijata rand(n,m) generira matrica na slu~ajni broevi so dimanzija mxn, so

vrednosti pome|u 0 i 1. Samata funkcija rand bez argumenti generira eden slu~aen broj pome|u 0 i 1.

>> y = rand, Y=rand(2,3)

y = 0.9501 Y = 0.2311 0.4860 0.7621

0.6068 0.8913 0.4565 Povtoruvawe na ovie komandi }e rezultiraat vo drugi vrednosti.

>> y = rand, Y=rand(2,3) y = 0.0185 Y = 0.8214 0.6154 0.9218

0.4447 0.7919 0.7382 primer: Da se napi{e funkciski m-fajl so koja se simuliraat n frlawa na dve kocki.

Problemot bara koristewe na slu~ajni ( random) broevi bidej}i se pretpostavuva

deka e podednakva verojatnost da pri frawe na kocka se dobie broj od 1 do 6. Bidej}i funkcijata rand dava broj pome|u 0 i 1, mno`ej}i go so 6, se dobiva broj pome|u 0 i 6 a so zaokru`uvawe se dobiva celobroen broj. Za taa cel potrebno e da se koristi naredbata

floor(1 + 6*rand) file: E:\mat-prog\kocka.m function [d] = kocka(n) % simulira n frlawa na par kocki % Vlez: n, broj na frlawa % Izlez: nx2 matrica, kade sekoj red se odnesuva na edno frlanje % a kolonite gi oznacuvaat prvata i vtorata kocka. % % Upotreba: T = kocka(3) d = floor(1 + 6*rand(n,2)); %------------------- kraj--------------------------------------

---- Osnovi na MatLab ----

51

>> kocka(3) ans = 2 6 3 3 6 6

Vo konkretniot primer izvr{eni se tri frlawa od koi so prvata kocka se dobieni vrednostite 2, 3 i 6 a so vtorata 6, 3 i 6. Bidej}i verojatnosta da padne bilo koj broj e ednakva treba da se o~ekuva da posle mnogu frlawa srednata vrednost na dobienite broevi kaj dvete kocki bide pribli`no ist i da toj iznesuva okolu 3.5, {to e teoretska vrednost ako imame beskone~no mnogu frlawa. Toa mo`e da se proveri so slednata naredba.

>> sum(kocka(100))/100

ans = 3.5600 3.3100

14.5 Funkcija find za vektori Funkcijata find go dava redniot broj ( indeks) na site elementi od vektorot x, koi

zadovoluvaat daden uslov.

>> x = -1:0.05:1; >> y = sin(3*pi*x).*exp(-x.^2); plot(x,y,':') >> k = find(y > 0.2)

k = Columns 1 through 12 9 10 11 12 13 22 23 24 25 26 27

36 Columns 13 through 15 37 38 39

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

>> hold on, plot(x(k),y(k),'o') >> km = find(x>0.5 & y < 0)

km = 32 33 34

---- Osnovi na MatLab ----

52

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

14.6 Funkcijata find za matrici find funkcijata dejstvuva na dadena matrica na sli~en na~in kako i na vektor.

>> A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1] A = -2 3 4 4 0 5 -1 6

6 8 0 1 >> k=find( A== 0)

k = 2

9

Na ovoj na~in opredelivme deka matricata A ima nuli na pozicija 2 i 9. Za da se interpretiraat ovie vrednosti treba da se znae deka funkcijata find prvo e reindeksira ( prenumerira) matricata A po sistemot red-kolona odnosno elementite na matricata A gi dobivaat slednite redni broevi.

1 4 7 10 2 5 8 11 3 6 9 12

>> n = find(A <= 0)

n = 1 2 8

9 >> A(n)

---- Osnovi na MatLab ----

53

ans = -2 0 -1 0

Vo gorniot primer n e vektor koj gi sodr`i indeksite na onie elementi {to se

pomali ili ednakvi na 0 a so A(n) se pe~atat vrednostite na tie elementi.

15. Crtawe Na Povr{ini

Matemati~ki povr{ina se definira so funkcijata f(x,y) pri {to za odredeni

vrednosti na x i y, taa poprima ednozna~na ili pove}ezna~a vrednost. Ako taa vrednost se ozna~i so z= f(x,y), toga{ mo`e da se definira trojka na broevi (x,y,z). Mno`estvo na ovie trojki broevi, za zadadeni vrednsoti na x i y, pretstaveni vo tri-dimenzionalen Karteziev ( pravoegolen ) sistem formira povr{ina vo prostor.

Zadadenite vrednsoti na x i y naj~esto prestavuaat nekoj pravagolen region vo

(x,y) ravnina i se opredeluva so zadavawe na interval na vrednsoti za x i y, ( pr. 2 < x < 4 i 1 < y < 3). Sekako deka e nevozmo`no da se presmeta vrednosta na fukcijata vo site to~ki na regionot. Zaradi toa se formira mre`a na parovi (x,y) vo koi funkcijata se presmetuva za da potoa se nacrta ili koristi za drugi presmetki.

Vo MatLab-ot mre`ata se generira so maredbata meshgrid no prethodno e potrebno

da se generiraat vrednostite na x i y za daden ~ekor.

>> x = 2:0.5:4; y=1:0.5:3; >> [X,Y] = meshgrid(x,y); >> X >> Y

X = 2.0000 2.5000 3.0000 3.5000 4.0000 2.0000 2.5000 3.0000 3.5000 4.0000 2.0000 2.5000 3.0000 3.5000 4.0000 2.0000 2.5000 3.0000 3.5000 4.0000 2.0000 2.5000 3.0000 3.5000 4.0000 Y = 1.0000 1.0000 1.0000 1.0000 1.0000 1.5000 1.5000 1.5000 1.5000 1.5000 2.0000 2.0000 2.0000 2.0000 2.0000 2.5000 2.5000 2.5000 2.5000 2.5000

3.0000 3.0000 3.0000 3.0000 3.0000

Ako vnimatelno se analiziraat matricite X i Y, lesno se zabele`uva deka parovite ( X(i,j),Y(i,j)) t.e. soodvetnite elementi na X i Y se voedno parovite (x,y) vo koi fukcijata f(x,y) treba da se presmeta. Vsu{nost MatLabo-ot gi koristi matricite X i Y za da gi presmeta vrednostite na f.

primer: Da se nacrta povr{ina opredelena so funkcijata

22 )2()3(),( −−−= yxyxf za 2 < x < 4 i 1 < y < 3.

>> [X,Y] = meshgrid(2:.2:4, 1:0.2:3); >> Z = (X-3).^2- (Y-2).^2; >> mesh(X,Y,Z)

---- Osnovi na MatLab ----

54

>> title(' Saddle '), xlabel('x'),ylabel('y')

22.5

33.5

4

1

1.5

2

2.5

3-1

-0.5

0

0.5

1

x

Saddle

y

Vo ovoj primer iskoristena e vgradena funkcijata na MatLab-ot mesh(X,Y,Z) so koja se iscrtuva tridimenzionalnata mre`a na povr{inata.

primer: Da se nacrta funkcijata

)(2 22 yxxyef +−−=

za -2 < x < 2, -2 < y < 2. Pri toa da se opredelat vrednostite i lokaciite na maksimalnite i minimalnite ekstremi na funkcijata.

>> [X,Y] = meshgrid(-2:0.1:2, -2:0.1:2); >> f = -X.*Y.*exp(-2*(X.^2+ Y.^2)); >> mesh (X,Y,f), xlabel('x'), ylabel('y'), grid

---- Osnovi na MatLab ----

55

Za da se opredelat ekstremite na funkcijata se korisime soslednive naredbi.

>> fmax = max(max(f)) >> kmax = find(f==fmax) >> Pos = [X(kmax), Y(kmax)] >> contour(X,Y,f) >> xlabel('x'), ylabel('y'), grid, hold on >> plot(X(kmax),Y(kmax),'*') >> text(X(kmax),Y(kmax),'Maximum') fmax = 0.0920 kmax = 641 1041 Pos = -0.5000 0.5000 0.5000 -0.5000

---- Osnovi na MatLab ----

56

-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

x

yMaximum

Maximum

16. Nizi Na Karakteri ( Znaci)

Pokraj numeri~ki nizi t.e. vektori ~ii elementi se broevi, MatLab-ot podr`uva i nizi so elementi na bilo koj karaker ( znak ) pri {to pod karakter se podrazbira bilo koja bukva, znak i brojka od 0 do 9. Ovie nizi ponatamu }e bidat nare~eni K-nizi.

>> name = 'Thomas R. Lee'

name = Thomas R. Lee >> size(name)

ans = 1 13

K-nizata, vsu{nost, se tretira kako vektor-red ~ii elementi se ASCI vrednostite

na karakterite. Zatoa K-nizata name ima eden red i 13 koloni. Koristej}i ja funkcijata double mo`no e sekoj karakter da se konvertira vo

negoviot ekvivalenten broj.

>> name = double(name) name = Columns 1 through 12 84 104 111 109 97 115 32 82 46 32 76

101 Column 13

101 >> name = char(name)

name = Thomas R. Lee

Funkcijata char e obratna funkcija na funkcijata double. Slednata naredba kreira dvo-dimenzionalna K-niza.

---- Osnovi na MatLab ----

57

>> name = ['Thomas R. Lee' ; 'Sr. Developer'] name = Thomas R. Lee Sr. Developer Koga na gorniot na~in se kreira dvo-dimenzionalna K-niza, treba da se vnimava

deka dvete nizi vo prviot i vtoriot red mora da imaat ist broj na karakteri. Ako ednata niza e pomala treba da se nadopolni so prazni mesta. Poednostaven na~in da se formira dvo-dimenzionalna K-niza e so funkcijata char.

>> name = char('Thomas R. Lee' , 'Senior Developer') name = Thomas R. Lee Senior Developer >> size(name) ans = 2 16

16.1 Sporedba na K-nizi Postojat pove}e na~ini za sporedba na K-nizi i podnizi.

• Mo`e e da se sporeduvaat K-nizite ili del za ednakvost. • Mo`e da se sporeduvaat poedine~nite karakteri vo K-nizata za ednakvost. • Mo`e da se ispita dali sekoj element na K-nizata e karakter ili prazno mesto.

Za sporedba za ednakvost se koristat dve funkcii: strcmp so koja se ispituva kompletna ednakvost na dve K-nizi i strncmp so koja se ispituva ednakvost na prvite n karakteri

>> str1 = 'hello'; >> str2 = 'help'; >> C=strcmp(str1,str2)

C = 0

Bidej}i dvete K-nizi ne se ednakvi rezultatot e nula, {to po praviloto na MatLab-ot pretstavuva nevistina ( ne se isti).

>> C=strncmp(str1,str2,2)

C = 1

Vo ovoj slu~aj se sporeduvaat samo prvite dva znaka od K-nizite i bidej}i tie se isti rezultatot e vistina t.e. 1.

>> mystring = 'Room 401'; >> A = isletter(mystring) >> B=isspace(mystring)

A = 1 1 1 1 0 0 0 0 B =

0 0 0 0 1 0 0 0

Prethodnite naredbi isletter i isspace vr{at ispituvawe na elementot dali e znak ili prazno mesto. Izlezot e vektor red so edinici tamu kade sporedbata e vistinita a nula ako ne e vistinata. I vo dvata slu~aevi poslednite tri mesta se

---- Osnovi na MatLab ----

58

nuli, {to zna~i deka brojkite ne se obfateni so ovie sporedbi. No so kombinacija na dvete funkcii mo`no e da se opredelat mestata kade se nao|aat brojkite. Imeno:

>> A = ~(isletter(mystring)|isspace(mystring))

A = 0 0 0 0 1 1 1

16.2 Prebaruvawe i zamena MatLab-ot ima nekolku funkcii za prebaruvawe i zamena na karakteri vo ramkite

na edna K-niza. Neka e dadena K-nizata

>> label1 = 'Simple 1, 10/28/95'

label1 = Simple 1, 10/28/95

Funkcijata strrep prebaruva i vr{i zamena na del od K-nizata so novi karakteri.

Naprimer da se smeni datata od 10/28 vo 10/30.

>> newlabel = strrep(label1,'28','30') newlabel = Simple 1, 10/30/95

Funkcijata findstr kako rezultat ja dava pozicijata na zadadena podniza vo

ramkite na podolgata K-nizata. Na primer da se najdat site pojavi na podnizata imp vo K-nizata label1.

>> position = findstr('imp',label1) position = 2

Zna~i deka od vtoroto mesto zapo~nuva podnizata imp.

16.3 Konverzija na broj vo K-niza ^esto pati daden broj sakame da go pretstavime kako K-niza so cel da se tretira

kako tekst. Za taa cel MatLab-ot ima funkcii so koi eden broj se pretvara vo K-niza.

>> x = 5317; y=int2str(x) size(y)

y = 5317 ans =

1 4

Vo prethodniot primer brojot x so funkcijata int2str e konvertiran vo K-nizata y. Deka e y navistina se gleda od naredbata size(y) kade K-nizata ima 4 elementi kolku i brojot x cifri.

Sli~na funkcija num2str, ovozmo`uva pogolema kontrola vrz formatot na

izleznata K-niza. Opcionalen ( ne nu`en) vtor argument definira kolku cifri od brojot }e bidat konvertirani vo K-nizata.

>> x = pi >> p = num2str(x,9) x = 3.1416

---- Osnovi na MatLab ----

59

p = 3.14159265

>> size(p)

ans = 1 10

Izleznata K-nizata ima 10 elementi bidej}i se broi i decimalna to~ka kako poseben karakter.

17. Funkciski Funkcii

Vo MatLab-ot postojat vgradeni funkcii koi rabotat so analiti~ki funkcii

namesto numeri~ki nizi t.e vektori ili matrici. Tie funkcii vkqu~uvaat • Numeri~ko integrirawe na analiti~ki funkcii • Optimizacija i re{avawe na nelinerni ravenki • Re{avawe na diferencijalni ravenki

17.1 Pretstavuvawe na analiti~ka funkcija vo MatLab-ot Vo MatLabo-ot analiti~kata funkcija se definira taka {to eksplicitno }e se

ispi{e vo m-fajl. Imeto na m-fajlot e ime na analiti~kata funkcija koja MatLab-ot ja prepoznava vo ponatamo{nite poresmetki. Naprimer da ja razgledame funkcijata:

604.0)9.0(

101.0)3.0(

1)( 22 −+−

++−

=xx

xf

Ovaa funkcija mo`e da se koristi kako argument na funkciskite funkcii. Imeno

gornata funkcija ja definirame vo m-fajlot koj e naren humps(x).

file e:\mat-vezbi\humps.m function y=humps(x) y = 1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04) –6;

17.2 Crtawe na analiti~ki funkcii Funkcijata fplot se koristi za crtawe na analiti~ka funkcija za daden interval

na x promenlivata.

>> fplot('humps',[-5 5]) >> grid on

---- Osnovi na MatLab ----

60

-5 -4 -3 -2 -1 0 1 2 3 4 5-20

0

20

40

60

80

100

Mo`no e za argument eksplicitno da se napi{e funkcijata.

>> fplot(' 2*sin(x+3)', [-1 1])

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

No mo`no e i slednoto

>> fplot('[2*sin(x+3), humps(x)]', [-5 5])

---- Osnovi na MatLab ----

61

-5 -4 -3 -2 -1 0 1 2 3 4 5-20

0

20

40

60

80

100

17.3 Minimum na funkcija so edna promenliva Za da se opredeli lokalen minimum vo daden interval na promenlivata x, se

koristi funkcijata fmin.

>> x = fmin('humps',0.3,1) x =

0.6370

Poslednive dva argumenta 0.3 i 1 se dolnata i gornata granica na intervalot vo ~ii granici se bara minimalnata vrednost.

17.4 Nuli na funkcija so edna promenliva Funkcijata fzero se koristi za iznao|awe na nuli na dadena analiti~ka funkcija.

Ovaa funkcija mo`e da bide povikana so edna vrednost od koja treba da se po~ne so barawe na nulata ili so dve vrednosti so koi se definira intervalot vo koj treba da se najde nulata na analiti~kata funkcija.

>> a = fzero('humps', -0.2)

a = -0.1316

Vo gorniot primer se trgna od edna to~ka –0.2. fzero bara vo okolinata na ovaa to~ka druga to~ka vo koja funkcijata go menuva znakot. So toa se definira intervalot vo koja funkcijata go menuva znakot t.e prova|a niz nulata. Ako e poznat intervalot vo koj funkcijata menuva znak toga{ fzero mo`e da se povika i kako:

>> a = fzero('humps', -0.3, 0.0)

a = -0.1316 pri {to vremeto na presmetkata e pokratko.

---- Osnovi na MatLab ----

62

17.5 Numeri~ko integrirawe ( kvadratura) ^esto pati poradi slo`enosta ili transcedentnosta na analiti~kite funkcii ne e mo`no da se najde analiti~ko re{enie na nivniot integral i zatoa se koristi numeri~ko integrirawe. MatLab-ot obezbeduva dve funkcii za numeri~ko integrirawe

• quad Prilagodliva Simpsonova metoda i • quad8 Prilagodliva Wutn-Kouts metoda Za da se opredeli integralot za funkcijata humps pome|u 0 i 1 mo`e da se

iskoristi slednava naredba.

>> q = quad('humps',0,1) q = 29.8583 primer: Da se opredeli dol`inata na krivata vo prostor zadadena parametriski.

)2sin()( ttx = )cos()( tty = ttz =)(

za ]3,0[ π∈t . Tri dimenzionalen crte` na krivata e:

>> t=0:0.1:3*pi; >> plot3(sin(2*t),cos(t),t)

-1-0.5

00.5

1

-1

-0.5

0

0.5

10

2

4

6

8

10

Dol`inata na lakot na krivata daden e so formulata:

∫ ++π3

0

22 1)(sin)2(cos4 dttt

Za taa cel se kodira podintegralnata funkcija vo m-fajl, naprimer so ime hcurve.m.

fajl E:\mat-vezbi\hcurve.m

---- Osnovi na MatLab ----

63

function f = hcurve(t) f = sqrt(4*cos(2*t).^2 + sin(t).^2 +1);

Sega integralot se presmetuva so povikuvawe na funkcijata quad.

>> len = quad('hcurve',0,3*pi) len = 17.2220

18 Vnes I Zapi{uvawe ( Eksport ) Na Podatoci

Sekoj program vo osnova vr{i obrabotka i analiza na podatoci i kako rezultat

producira podatoci koi mo`at da bidat prezentirani vo razna forma: kako numeri~ki vrednosti, tekst ili grafi~ki. No za da mo`e da se obrabotat podatocite tie prethodno treba da bidat vneseni t.e. programot da gi pro~ita. Vo MatLab-ot podatocite mo`at da se vnesat na nekolku na~ini. Najdobriot na~in naj~esto zavisi od koli~estvoto na podatocite, vo koja forma se dostapni i tn.

18.1 Vnes ( ~itawe ) na podatoci

• Najednostaven na~in e eksplicitno ispi{uvawe na podatocite vo ramkite na samata sesija na MatLab-ot direktno vo rabotniot prostor. Vo site prethodni primeri toj na~in e koristen pri vnesuvawe na podatoci za vektorite ili matricite. Ovoj metot iako e relativno ednostaven i direkten sepak e efikasen za mal broj podatoci. Problemati~en stanuva koga treba da se vnesat pogolem broj na podatoci na primer matrica so dimenzii 50x50, {to pretstavuva 2500 podatoci.

• Kreirawe t.e. ispi{uvawe na podatocite vo m-fajl. Koristej}i tekst editor

korisnikot mo`e da gi iskuca ( ispi{e ) podatocite kako skript m-fajl i potoa vo tek na sesijata da go povika m-fajlot. Ovoj metod e koristen ako podatocite ne se nao|aat vo kompjuterot, na primer generirani od drug program, i korisnikot vo sekoj slu~aj treba da gi vnese. Vsu{nost ovoj metod e sli~en na prethodniot no negovata prednsot se sostoi vo toa {to lesno mo`at podatocite da se smenat pa povtorno da se povika m-fajlot inovite vrednsoti da se v{itaat vo rabotnata sredina. Isto taka podatocite se vo forma na skript m-fajl spaseni na disk i pri povtorno aktivirawe na MatLab-ot brzo mo`at da se pro~itaat. Vo sledniot primer kreiran e fajlot matdat.m vo koj se smesteni vrednosti na edna matrica. fajl E:\mat-vezbi\matdat.m A = [ 0.2113 0.8098 0.4832 ; 0.0824 0.987 0.6512; 0.7599 0.4524 0.2749; 0.0087 0.8075 0.888]; Sega e mo`no da se naredbata, >> matdat >> A A = 0.2113 0.8098 0.4832 0.0824 0.9870 0.6512 0.7599 0.4524 0.2749 0.0087 0.8075 0.8880 da se pro~ita matricata A, {to e potvrrdeno so nejzinoto pe~atewe so vtorata naredba.

• Podatocite mo`at da se pro~itaat od ASCII datoteka ( fajl). Podatocite moraat

da se zapi{ani vo fajlot so ista dol`ina na redot koj treba da zavr{i so nov red a broevite da bidat oddeleni so prazni mesta. Ovoj fajl mo`e da bide koregiran (

---- Osnovi na MatLab ----

64

editiran ) so ednostaven tekst editor. Naprimer matricata vo prethodniot primer mo`e da se pro~ita i od ASCII fajl. ^itaweto se vr{i so naredbata load i imeto na fajlot a podatocite se zapomnuvaat vo promenlivata so isto ime kako i fajlot.

fajl E:\mat-vrzbi\b.dat

0.2113 0.8098 0.4832 0.0824 0.9870 0.6512 0.7599 0.4524 0.2749

0.0087 0.8075 0.8880 >> load b.dat >> b b = 0.2113 0.8098 0.4832 0.0824 0.9870 0.6512 0.7599 0.4524 0.2749 0.0087 0.8075 0.8880

• ^itawe na podatoci koristej}i gi naredbite fopen, fread i drugite naredbi na MatLab-ot za najnisko nivo ( nivo na bajt) na vlez i izlez na podatoci. Ovoj pristap e koristen koga se ~itaat podatoci generirani od drugi programi koi imaat svoj sopstven format na pi{uvawe. Bidej}i pristapot koristi elementarni operacii na nivo na bajt bara povisoko znaewe na programskiot jazik na MatLab-ot i e nadvor od celta za bazi~noto zapoznavawe so MatLabo-ot.

18.2 Eksport ( zapi{uvawe ) na podatoci Sli~no kako i pri v~ituvawe na podatoci, postojat nekolku na~ini za zapi{uvawe

na podatocite za eventualno idno koristewe ili ~uvawe.

• Za mal broj podatoci, mali matrici ili vektori korisno e da se koristi naredbata diary so koja se kreira diary fajl. Vo ovoj fajl se pametat site naredbi ili ispi{uvawa na ekran za vreme na MatLab sesijata. Zatoa ako se se povika matricata ili vektorot bez ; vrednostite }e bidat ispi{ani na ekranot i zapi{ani vo diary fajlot. Fajlot podocna mo`e da se editira so obi~en tekst editor.

• Podatocite mo`at da se zapi{at vo ASCII fajl so naredbata save i -ascii

opcija. Naprimer, A = rand(4,3); save temp.dat A -ascii type temp.dat

9.5012929e-001 8.9129897e-001 8.2140716e-001 2.3113851e-001 7.6209683e-001 4.4470336e-001 6.0684258e-001 4.5646767e-001 6.1543235e-001 4.8598247e-001 1.8503643e-002 7.9193704e-001

• Podatocite mo``at da se napi{at vo specijalen format koristej}i gi naredbite

fopen, fwrite i kako {to e napomnato prethodno i drugi naredbi koi operiraat na nivo na bajt pri vlezno izleznite operacii.

18.3 Funkcija input

Funkcijata input ispi{uva poraka na ekran i ~eka na odgovor od korisnikot. Sintaksata e,

---- Osnovi na MatLab ----

65

n = input(' poraka : ') funkcijata ispi{uva na ekran poraka i vra}a vrednost za n broj ili vrednost na izraz {to }e bide iskucan na tastaturata.

n = input(' Vnesi broj ') Vnesi broj: 23 n = 23

Input isto taka mo`e da vrati i K-naza a ne samo broevi. Za da se dobie K-nizata, naredbata treba da izgleda

v = input(' Ime i Prezime : ','s') Ime i Prezime : Ljupco Jordanovski v = Ljupco Jordanovski

19 HELP altaka

MatLab-ot, kako i sekoj drug program ima bogata informaciona baza za site

vgradeni funkcii koja se povikuva so naredbata help, pri {to za sekoja funkcija postoi i kratko objasnuvawe na nejzinata primena.

help

HELP topics: matlab\general - General purpose commands. matlab\ops - Operators and special characters. matlab\lang - Programming language constructs. matlab\elmat - Elementary matrices and matrix manipulation. matlab\elfun - Elementary math functions. matlab\specfun - Specialized math functions. matlab\matfun - Matrix functions - numerical linear algebra. matlab\datafun - Data analysis and Fourier transforms. matlab\polyfun - Interpolation and polynomials. matlab\funfun - Function functions and ODE solvers. matlab\sparfun - Sparse matrices. matlab\graph2d - Two dimensional graphs. matlab\graph3d - Three dimensional graphs. matlab\specgraph - Specialized graphs. matlab\graphics - Handle Graphics. matlab\uitools - Graphical user interface tools. matlab\strfun - Character strings. matlab\iofun - File input/output. matlab\timefun - Time and dates. matlab\datatypes - Data types and structures. matlab\winfun -Windows Operating System Interface Files

DDE/ActiveX) matlab\demos - Examples and demonstrations.

For more help on directory/topic, type "help topic". help general General purpose commands. MATLAB Toolbox Version 5.2 18-Dec-1997

---- Osnovi na MatLab ----

66

General information help - On-line help, display text at command line. helpwin - On-line help, separate window for navigation. helpdesk - Comprehensive hypertext documentation and roubleshooting. demo - Run demonstrations. ver - MATLAB, SIMULINK, and toolbox version information. whatsnew - Display Readme files. Readme - What's new in MATLAB 5.1 Managing the workspace. who - List current variables. whos - List current variables, long form. clear - Clear variables and functions from memory. pack - Consolidate workspace memory. load - Load workspace variables from disk. save - Save workspace variables to disk. quit - Quit MATLAB session. Managing commands and functions. what - List MATLAB-specific files in directory. type - List M-file. edit - Edit M-file. lookfor - Search all M-files for keyword. which - Locate functions and files. pcode - Create pre-parsed pseudo-code file (P-file). inmem - List functions in memory. mex - Compile MEX-function. Managing the search path path - Get/set search path. addpath - Add directory to search path. rmpath - Remove directory from search path. editpath - Modify search path. Controlling the command window. echo - Echo commands in M-files. more - Control paged output in command window. diary - Save text of MATLAB session. format - Set output format. Operating system commands cd - Change current working directory. copyfile - Copy a file. pwd - Show (print) current working directory. dir - List directory. delete - Delete file. getenv - Get environment variable. mkdir - Make directory. ! - Execute operating system command (see PUNCT). dos - Execute DOS command and return result. unix - Execute UNIX command and return result. vms - Execute VMS DCL command and return result. web - Open Web browser on site or files. computer - Computer type. help elmat

Elementary matrices and matrix manipulation.

---- Osnovi na MatLab ----

67

Elementary matrices. zeros - Zeros array. ones - Ones array. eye - Identity matrix. repmat - Replicate and tile array. rand - Uniformly distributed random numbers. randn - Normally distributed random numbers. linspace - Linearly spaced vector. logspace - Logarithmically spaced vector. meshgrid - X and Y arrays for 3-D plots. : - Regularly spaced vector and index into matrix. Basic array information. size - Size of matrix. length - Length of vector. ndims - Number of dimensions. disp - Display matrix or text. isempty - True for empty matrix. isequal - True if arrays are identical. isnumeric - True for numeric arrays. islogical - True for logical array. logical - Convert numeric values to logical. Matrix manipulation. reshape - Change size. diag - Diagonal matrices and diagonals of matrix. tril - Extract lower triangular part. triu - Extract upper triangular part. fliplr - Flip matrix in left/right direction. flipud - Flip matrix in up/down direction. flipdim - Flip matrix along specified dimension. rot90 - Rotate matrix 90 degrees. : - Regularly spaced vector and index into matrix. find - Find indices of nonzero elements. end - Last index. sub2ind - Linear index from multiple subscripts. ind2sub - Multiple subscripts from linear index. Special variables and constants. ans - Most recent answer. eps - Floating point relative accuracy. realmax - Largest positive floating point number. realmin - Smallest positive floating point number. pi - 3.1415926535897.... i, j - Imaginary unit. inf - Infinity. NaN - Not-a-Number. isnan - True for Not-a-Number. isinf - True for infinite elements. isfinite - True for finite elements. flops - Floating point operation count. why - Succinct answer. Specialized matrices. compan - Companion matrix. gallery - Higham test matrices. hadamard - Hadamard matrix. hankel - Hankel matrix. hilb - Hilbert matrix. invhilb - Inverse Hilbert matrix.

---- Osnovi na MatLab ----

68

magic - Magic square. pascal - Pascal matrix. rosser - Classic symmetric eigenvalue test problem. toeplitz - Toeplitz matrix. vander - Vandermonde matrix.

wilkinson - Wilkinson's eigenvalue test matrix. help isnumeric ISNUMERIC True for numeric arrays. ISNUMERIC(A) returns 1 if A is a numeric array and 0 otherwise. For example, sparse arrays, and double precision arrays are numeric while strings, cell arrays, and structure arrays are not. See also ISCELL, ISSTRUCT, ISOBJECT, ISSPARSE. help find FIND Find indices of nonzero elements. I = FIND(X) returns the indices of the vector X that are non-zero. For example, I = FIND(A>100), returns the indices of A where A is greater than 100. See RELOP. [I,J] = FIND(X) returns the row and column indices of the nonzero entries in the matrix X. This is often used with sparse matrices. [I,J,V] = FIND(X) also returns a vector containing the nonzero entries in X. Note that find(X) and find(X~=0) will produce the same I and J, but the latter will produce a V with all 1's. See also SPARSE, IND2SUB.

Pogore se dadeni nekolku primeri kako mo`e da se koristi help naredbata. Im se

prepora~uva na studentite da iscrpno go koristat help za da se zapoznaat so site vgradeni funkcii kako i so nivnite mo`nosti. Vo ramkite na eden vakov voveden kurs ne e vozmo`no da se izlo`at i so primeri objasnat site aspekti i mo`nosti na Matlab-ot

---- Osnovi na MatLab ----

69

VOVED VO MATLAB VTOR DEL

ODBRANI DELOVI

Vtoriot del na u~ebnoto pomagalo ( skripta ) " VOVED VO MATLAB ", e vo tesna

povrzanost so materijalot koj {to se predava vo vtoriot semestar po predmetot " Primena na smeta~i vo rudarstvo". Vo vtoriot semestar, na studentite im se predavaat potrebnite numeri~ki metodi za re{avawe na konkretni problemi so koi idnite rudarski in`eweri }e se sretnat vo nivnata rabota. Kako {to e ve}e napomnato, nivnata konkretna realizacija so primena na smeta~, pretpostavuva poznavawe na eden programski jazik so ~ija pomo{ }e mo`at da se isprogramiraat. MatLabot kako eden takov jazik so svojata karakteristiki na visoko organiziran in`ewersko-istra`uva~ki programski jazik ovozmo`uva da site numeri~ki metodi lesno i brzo se implementiraat.

Vo prviot semestar, studentite se steknaa so poznavawe za osnovite na

programskiot jazik MatLab, kako i so odreden broj na vgradeni funkcii koi se osnova na sekoja verzija na MatLabot. Sekako vremeto i prethodnite zneawa na studentite od oblasta na programiraweto ne ovozmo`ija podlaboko i pocelosno zapoznavawe so site osnovni vgradeni funkcii, ve}e studentite bea sovetuvani da vo tekot na nivnite ve`bi ja koristat HELP mo`nosta za zapoznavawe so drugite funkcii . Treba da se napomene deka i so osnovnite poznavawa kako i poznavawe na elementite na programirawe, sekoj student so mal napor e vo sostojba programski da gi realizira numeri~kite metodi koi se izu~uvaat vo vtoriot semestar. Sepak MatLabot ve}e ima gotovi funkcii za re{avawe na pogolem broj na numeri~kite metodi i toa ili kako sostavni delovi na osnovnata verzija na Matlabot ili kako dodatni alatki. Zatoa vo ovoj del, na studentite }e im bidat objasneti i so primeri ilustrirani nekoj pospecifi~ni a dosta korisni funkcii so koi }e mo`at da gi primenat znaewata od delot za numeri~kite metodi.

Kako {to e ve}e napomnato, redosledot na izu~uvawe na posebnite delovi na

MatLabot generalno }e go sledi redot na predavawata vo vtoriot smestar.

1. Polinomi i Interpolacija

Polinomi se kontinuirani finkcii koi pretstavuvaat linerana kombinacija na

monomi. Naprimer polinomot1

52)( 3 −−= xxxp

e polinom od tret stepen. Vo MatLabot, polinomot se pretstavuva so pomo{ na vektor-red koj gi sodr`i

koeficientite na polinomot trgnuvaj}i od najgolemiot do najmaliot stepen.

>> p = [ 1 0 -2 -5] p = 1 0 -2 -5 Koeficientite koi ne se prisutni vo polinomot se zadadat so nula na nivnoto soodvetno mesto. 1 Primerot e zemen od upatstvoto za MATLAB

---- Osnovi na MatLab ----

70

Postojat pove}e funkcii za rabota so polinomite a nie }e gi spomneme slednive: conv mno`ewe na polinomi dekonv delewe na polinomi polyval presmetuvawe na vrednosta na polinomot roots opredeluvawe na nulite na polinomot poly opredeluvawe na polinom ako se znaat nulite polyfit iterpolacija na podatoci so polinom

1.1 Nuli na polinomot Funkcijata roots presmetuva nuli na daden polinom t.e. ja opredeluva vrednosta

na nezavisnata promenliva za koja polinomot dobiva nulta vrednsot. Nulite na polinomot se opredeluvaat so, pri {to funkcijata roots gi presmetuva i kompleksnite koreni:

>> r = roots(p) r = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i

Po definicija, nulite na polinomot se pamtat kako vektor-kolona. Obratna

funkcija na roots e funkcijata poly. So nea se opredleuvaat koeficientite na polinomot ako se poznati negovite nuli.

>> p2 = poly(r) p2 = 1.0000 -0.0000 -2.0000 -5.0000

roots i poly se inverzni funkcii edna na druga do nivo na skalirawe ( mno`ewe na celiot polinom so nekoj broj ) i gre{kata na zaokru`uvawe. Funcijata poly isto taka se koristi i za presmetuvawe na karakteristi~niot polinom za dadena matrica za da potoa so koristewe na roots se opredelat i sopstvenite vrednosti na matricata2 >> A = [ -5.0 -52.06; 0.092 -0.433]; >> p2 = poly(A) >> r = roots(p2) p2 = 1.0000 5.4330 6.9545 r = -3.3683 -2.0647

1.2 Presmetuvawe na vrednosta na polinomot Funkcijata polyval ja presmetuva vrednosta na polinomot za dadeni vrednosti na

nezavisnata promenliva. Naprimer vrednosta na plinomot p(x) od prethodnite primeri za x = 5 e:

>> polyval(p,5)

2 primerot e zemen od knigata "MATLAB i dodatni moduli Control system toolbox i Simulink " od Latinka ^alasan i Menka Petkovska, Mikro kwiga, Beograd

---- Osnovi na MatLab ----

71

ans = 110 Mo`na e slednata naredba:

>> x = [ 0.1 0.5 1 2 3 4 5]; >> v = polyval(p,x) v = -5.1990 -5.8750 -6.0000 -1.0000 16.0000 51.0000 110.0000

1.3 Mno`ewe ( konvolucija) i delewe ( dekonvolucija ) na polinomi Mno`eweto i deleweto na polinomi korespondira na operaciite konvolucija i

dekonvolucija. Za ovie dve operacii se koristat funkciite conv i deconv. Kako primer da gi pomno`ime slednive dva polinoma:

32)( 2 ++= sssa i 654)( 2 ++= sssb

>> a = [ 1 2 3]; b = [ 4 5 6]; >> c = conv(a,b) c = 4 13 28 27 18

Ako sega polinomot so koeficientite dadeni preku vektor-redot c se podeli so a treba da se dobie polinomot b.

>> [q,r] = deconv(c,a) q = 4 5 6 r = 0 0 0 0 0 Vektor-redot r e polinom na ostatokot. Bidej}i negovite koeficienti se nula proizleguva deka vektorite se delat bez ostatok a rezultatniot polinom koli~nik daden e so vektorot q.

1.4 Interpolacija na podatoci so polinim Funkcijata polyfit gi opredeluva koeficientite na polinom so koj se

interpoliraat dadenite podatoci vo smisla na najmala kvadratna gre{ka. Vo najop{ta forma funkcijata se zadava so slednive parametri.

p = polyfit(x,y,n)

kade {to x i y se vektorite koi gi sodr`at podatocite {to treba da se interpoliraat a n e redot na polinomot ~ii koeficienti treba da se opredelat.

>> x = [ 1 2 3 4 5]; y = [ 5.5 43.1 128 290.7 498.4]; >> p = polyfit(x,y,3) p = -0.1917 31.5821 -60.3262 35.3400

Sega kako ilustracijata i sporedba }e gi nacrtame podatocite i polinomot presmetan so funkcijata polyfit.

---- Osnovi na MatLab ----

72

>> x2 = 1:.5:5; >> y2 = polyval(p,x2); >> plot(x,y,'o',x2,y2) >> grid on

1 1.5 2 2.5 3 3.5 4 4.5 50

50

100

150

200

250

300

350

400

450

500

primer 2.

>> x = [0.1 0.3 0.4 0.44 0.5 0.7 0.8]; >> y = [ 1 1.5 1.6 1.4 1.1 1.1 1.5]; >> c = polyfit(x,y,4) c = 13.2447 1.3735 -20.3555 10.3114 0.1641 >> x1 = 0.1:0.01:0.8; >> y1 = polyval(c,x1); >> plot(x1,y1,x,y,'*')

---- Osnovi na MatLab ----

73

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.80.9

1

1.1

1.2

1.3

1.4

1.5

1.6

2 INTERPOLACIJA SO POLINOM

Vo prethodnite primeri, vo koj e koristena vgradenata funkcija polyfit,

polinomot se odbira taka da sumata na kvadratite na razlikata ( gre{kata) pome|u vrednosta na polinomot i podatocite e najmala vo odnos na site drugi polinomi. Vaka opredelen polinom naj~esto ne prova|a niz to~kite so koi se definirani empiriskite podatoci i vo literaturata ~esto }e se sretne terminot aproksimacija so polinom so metoda na najmali kvadrati. No interpolacijata mo`e da se realizira ako se postavi uslov deka polinomot mora da prima vrednosti koi se ednakvi na podatocite za ista vrednost na nezavisnata promenliva3.

2.1 Interpolacionen polinom Problemot na iznao|awe na koeficientite na polinomot se sveduva na re{avawe

na sistem na linearni ravenki, kade matricata na sistemot e poznata pod ime Vandermondeova matrica4. Presmetuvaweto na ovaa matrica }e go realizirame so m-funkcijata.

function [A]= myvander(x)

%----------- % funkcija vander presmetuva Vandermundovata matrica % Vlez: x vektor-kolona na nezavisnata promenliva % vo koja se dadeni podatocite % Izlez: matrica A %-----------

n = length(x); for i=1:n j= n-i; A(:,i)=x.^(j); end

Primer na sesija vo MatLab:

3 Vidi del 1.3 vo predavawata za vtoriot semestar 4 Isto

---- Osnovi na MatLab ----

74

>> x = [ 0 1 3 ]'; >> fx = [ -5 1 25]'; >> A = myvander(x) >> coef = A\fx A = 0 0 1 1 1 1 9 3 1 coef = 2 4 -5 Naredbata coef = A\fx pretstavuva vgraden operator za re{avawe na sistem na ravenki. Matemati~ki treba da se ~ita kako coef = A-1*fx.

Polinomot na iterpolacijata glasi:

542)( 2 −+= xxxf Grafi~ki prikaz za ocenka e daden na sledniot grafik realiziran so naredbite.

>> x1 = 0:0.2:3.4; >> y1 = polyval(coef,x1); >> plot(x1,y1,x,fx,'*')

0 0.5 1 1.5 2 2.5 3 3.5-5

0

5

10

15

20

25

30

35

Treba da se napomene deka vo ramkite na MatLabot postoi specijalna vgradena

funkcija za generirawe na Vandermondeovata matrica, funcijata vander(x). Imeno,

>> A = vander(x)

A = 0 0 1 1 1 1

---- Osnovi na MatLab ----

75

9 3 1 ja presmetuva istata matrica kako i so koristewe na funkcijata myvander. No dosta ~esto pri prakti~noto re{avawe na problemite }e se sre}avame od potrebata za pi{uvawe na svoi funkcii i zatoa myvander e dadena kako ilustracija za pi{uvawe i koristewe na m-funkciski datoteki. Sekako deka se pi{uvaat m-funkcii samo tamu kade ne postojat ve}e vgradeni funkcii a i koga se pi{uaat sopstveni funkcii, prepora~livo e {to pove}e da se koristat vgradenite funkcii za re{avawe na poodelni segmenti na problemot.

2.2 Lagran`ova interpolacija Lagran`ovata interpolacija e eden specifi~en vid na interpolacija so polinom a

se sostoi od konstrukcija na polinomi L0(x), L1(x),...., Ln(x), koi eksplicitno zadovoluvaat uslov da se anuliraat vo site to~ki na nezavisnata pormenliva x, osven vo edna to~ka vo koja primaat vrednost 15.

Vo MatLabot ne postoi vgradena funkcija za opredeluvawe na Lagran`ovoit

polinom i zatoa treba da se napi{e m-funkcija. Vo primerot {to sleduva dadena e m-funkcija za Langran`ovata interpolacija. Sekako deka e mo`no, vo zavisnost od znaewata i kreativnosta na programerot, istiot program da bide napi{an poinaku no rezultatite treba da bidat identi~ni.

function [C,L] = lagrange(X,Y) %------------------------------------------------------------ %LAGRANGE Konstrukcija na polinom so metoda na Lagranzova % interpolacija % Nacin na povikuvawe % [C] = lagrange(X,Y) % [C,L] = lagrange(X,Y) % Inputs % X vector na vrednostite na nezavisnata promenliva % Y vector na zavisnata promenliva % Izlez % C lista na koeficienti za Lagrange polinom % L matrica koja gi sodrzi poedinecnite Lagrange polnomi % %----------------------------------------------------------- n1 = length(X);% dolzina na vektorot X, broj na elementi n = n1-1; L = zeros(n1,n1);% se generira matrica so n1xn1 nuli for k=1:n+1, % formirane na koeficientite na Lagrange plinom V = 1; % so koristene na poly(r1)za kreirawe na polinom for j=1:n+1, % so poznati koreni, i conv(P2,P1) if k ~= j, % za mnozenje na polinomi. V = conv(V,poly(X(j)))/(X(k)-X(j)); end end L(k,:) = V; end C = Y*L;

Kako ilustracija za koristewe na m-fukncijata lagrange, }e se koristime so primerot za m-funkcijata myvander vo prethodnata glava.

>> x = [ 0 1 3];

5 Vidi del 1.4 vo predavawata za vtoriot semestar

---- Osnovi na MatLab ----

76

>> y = [ -5 1 25]; >> [coef,L] = lagrange(x,y) coef = 2.0000 4.0000 -5.0000 L = 0.3333 -1.3333 1.0000 -0.5000 1.5000 0 0.1667 -0.1667 0

Vrednostite na koeficientite se identi~ni bidej}i i dvata pristapa se odnesuvaat na polinomna aproksimacija. Prednosta na Lagran`ovata interpolacija se sostoi vo toa {to ne treba da se re{ava sistem na ravenki, ~ie re{enie mo`e da bide nestabilno vo slu~aj na golem broj na podatoci. Vo konkretniot primer so 3 vrednosti ovoj problem ne se javuva zaradi mal broj na podatoci.

Redovite na matricata L, gi sodr`at koeficientite na poedina~nite Lagran`eovi

polinomi i toa: prviot red se odnesuva na L0(x), vtoriot na L1(x) i tretiot na L2(x)polinom, pri {to polinomite gi zadovoluvaat slednite uslovi:

L0(0) = 1, L0(1) = 0, L0(3) = 0 L1(0) = 0, L1(1) = 1, L1(3) = 0 L2()) = 0, L2(1) = 0, L2(3) = 1

a samiot polinom e linearna kombinacija na L polinomite. L(x) = -5*L0(x) + 1*L1(x) + 25*L2(x) Grafi~ki L polinomite mo`at da se pretstavat so sledniot program.

>> x = 0:0.1:3; >> L0 = L(1,:); L1=L(2,:);L2=L(3,:); >> y0 = polyval(L0,x); >> y1 = polyval(L1,x); >> y2 = polyval(L2,x); >> plot(x,y0,x,y1,x,y2) >> grid on

0 0.5 1 1.5 2 2.5 3-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

1.2

---- Osnovi na MatLab ----

77

Znaej}i gi koeficientite na polinomot ( elementite na vektor-redot coef ) lesno

mo`e da se presmetaat vrednostite na zavisnata promenliva za onie vrednosti na nezavisnata promenliva koi ne se prisutni vo podatocite. Na primer:

>> x1 = [ 0.5 1.5 2]; >> y1 = polyval(coef,x1) y1 = -2.5000 5.5000 11.0000

2.3 Wutnova interpolacija - napred Wutnovata interpolacija e druga metoda so koja dadeni podatoci se interpoliraat.

Rezultatot e isto taka polinom pri {to koeficientite na polinomot se presmetuvaat koristej}i ja metodata na kone~ni razliki6.

function [C,D] = newtint(X,Y) %----------------------------------------------------------- %NEWTINT metoda na Newtonova interpolacija % Nacin na povikuvanje % [C] = newtint(X,Y) % [C,D] = newtint(X,Y) % Vlez: % X vector na nezavisnata promenliva % Y vector na zavisnata promenliva % Izlez % C koeficientite na Newton-oviot polinom % D tabela na konecni razliki % %------------------------------------------------------------ n = length(X); D = zeros(n,n); D(:,1) = Y'; for j=2:n, for k=j:n, D(k,j) = (D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1)); end end C = D(n,n); for k=(n-1):-1:1, C = conv(C,poly(X(k))); m = length(C); C(m) = C(m) + D(k,k); end

Vektor-redot C gi sodr`i koeficientite na polinomot, dodeka kolonite na matricata D se 0-ta, 1, 2, .... k-ta kone~na razlika, pri {to vrednostite na kone~nite

razliki se deleni so soodvetniot faktoriel. Taka na primer )(xfkΔ ( k-tata kolona)

e podelena so k !. Razlikata pome|u primerite dadeni vo predavawata i rezultatite vo implementacijata na metodata vo MatLabot se sostoi vo gore navedenoto objasnenie.

primer 17: 6 Vidi del 1.5 vo predavawata za vtoriot semestar

---- Osnovi na MatLab ----

78

>> x = [0 1 2]; y=[ -5 1 11]; >> [C,D] = newtint(x,y) C = 2 4 -5 D = -5 0 0 1 6 0 11 10 2

primer 28:

>> x = [ 0 1 2 3 4]; fx=[ -5 1 9 25 55]; >> [C,D]=newtint(x,fx) C = 0 1 -2 7 -5 D = -5 0 0 0 0 1 6 0 0 0 9 8 1 0 0 25 16 4 1 0 55 30 7 1 0

Da ja presmetame vrednosta na funkcijata vo to~kata 1.5

>> a = 1.5; >> vrd = polyval(C,a) vrd = 4.3750

3. NUMERI^KO DIFERENCIRAWE ( OPREDELUVAWE NA IZVOD)

Numeri~koto diferencirawe e postapka so koja se presmetuva prviot izvod na

funkcija vo odnos na edna nejzina promenliva. Naj~esto, pod ovaa postapka se podrazbira diferencirawe na funkcii koi se dadeni vo numeri~ka ( broj~ana) forma, iako metodata mo`e da se koristi i za diferencirawe na funkcii koi se zadadeni vo analiti~ka forma. Potrebata za numeri~ko diferencirawe na analiti~ki funkcii se javuva koga ne sme vo sostojba da izvr{ime analiti~ko diferencirawe poradi kompleksnosta na samata funkcija. I vo dvata slu~ai stanuva zbor za izvod vo dadena to~ka na funkcijata pri {to se dobiva broj~ana vrednost kako rezultat.

3.1 Numeri~ko diferencirawe koristej}i limes Vo osnova na numeri~koto diferencirawe e geometriskata interpretacija na

izvodot, t.e deka izvodot e tanges od agolot {to go zafa}a tangentata na krivata, vo dadena to~ka, so pozitivnata nasoka na x-oskata. Matemati~ki toa mo`e da se pretstavi so sledniot limes9.

hhxfhxf

xfxf

hx *2)()(

limlim)( 00

000+−−

=ΔΔ

=′→→Δ

7 Primerot e od predavawata za vtoriot semestar 8 Isto 9 Vidi del 2.1 vo predavawata za vtoriot semestar

---- Osnovi na MatLab ----

79

Ako gorniot limes e kone~en i ima vrednost toga{ velime deka funkcijata ima izvod vo to~kata x0.

Edna mo`na realizacija na m-funkcija, so koja se presmetuva izvod vo dadena to~ka na funkcijata f, e dadena vo sledniot primer.

function [H,D,E,n] = difflim(f,x,toler) %----------------------------------------------------------- %DIFFLIM Numericka aproksimacija na f'(x). % Metodata se bazira na presmetuvanje na limes. % Primer na povikuvnje: % [H,D,E,n] = difflim('f',x,toler) % Vlez: % f name of the function % x differentiation point % Izlez: % H vector na golemina na cekori % D vector na priblizna vrednost na izvodot % E vector na greska vo sekoj cekor % n elementot D(n) "najdobra aproksimacija na f'(x)" % % (Diferenciranje koristejki limes). %--------------------------------------------------------- h = 1; %1 max1 = 15; %2 H(1) = h; %3 D(1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %4 E(1) = 0; %5 for n = 1:2 %6 h = h/10; %7 H(n+1) = h; %8 D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %9 E(n+1) = abs(D(n+1) - D(n)); %10 end %11 n = 2; %12 while ((E(n)>toler)) & n<max1 %13 h = h/10; %14 H(n+1) = h; %15 D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h); %16 E(n+1) = abs(D(n+1) - D(n)); %17 n = n+1; %18 end %19 n = length(D)-1; %20 % kraj na funkcijata............

Imeto na m-funcijata e difflim, pri {to kako vlezni parametri se: imeto na funkcijata f, to~kata vo koja se bara izvodot x i tolerancija, toler, na gre{kata vo vrednosta na izvodot. Samata funkcijata f treba da bide zadadena i definirana kako m-funkciska datoteka. Vo na{iot primer toa e funkcijata cos(x) a definirana e so slednata m-funkciskata datoteka.

file:f.m function z = f(x) z = cos(x);

pri {to datotekata se nao|a vo rabotniot direktorium. Treba da se povle~e deka i

imeto na m-datotekata ( fajlot) i imeto na funkcijata mora da se isti. Izlezot, t.e, rezultatot na presmetikite na finkcijata difflim e daden so ~etiri

promenlivi. Vektorot H gi sodr`i vrednostite na ~ekorite koi se menuvaat vo sekoja interacija so cel da se uto~ni vrednosta na izvodot. Vektorot D gi sodr`i

---- Osnovi na MatLab ----

80

vrednostite na izvodot vo soodvetniot ~ekor a vektorot E pripadnata gre{ka. Brojot n e redniot broj na elementot na D koj istovremeno pretstavuva kone~na vrednost na izvodot koj ja zadovoluva tolerancijata ( gre{kata ).

Vo sledniot del ~ekor po ~ekor }e bide objasneta programata so cel da studentot

dobie ~ustvo {to i kako m-funkcijata raboti i istovremeno da stane familijaren so programiraweto vo MatLabot. Nie i vo slednite primeri po potreba odredeni programi }e gi objasnime ~ekor po ~ekor. Za onie programi koi ne se objasneti, pretpostavka e deka studentot ima dovolno poznavawa ili dovolno informacii od objasnetite programi da mo`e samiot da napravi analiza. Sepak kqu~no e studentot mora da ja posnava metodata i algoritmot za da mo`e da go interpretira programot.

Kako {to e ka`ano m-fukncijata difflim se bazira na metodata na presmetuvawe

na izvod preku limes. Vo taa smisla programata se sostoi od: 1-~ekor: Se definira po~etniot ~ekor so vrednsot 1. 2: Maksimalen broj na iteracii e ograni~en na 15. 3: Vrednosta na prviot ~ekor se pameti kako prv element na vektorot na

~ekori H. 4: Se koristi formulata (**) za presmetuvawe na prvata aproksimacija na

izvodot, pri {to istata se pameti vo vektorot D. Za presmetka na vrednosta na funkcijata f vo dadena to~ka se koristi vgradenata funkcija feval('f',x).

Kako primer da gi presmetame vrednostite na funkcijata f vo to~kata 1.8 i -0.2 >> x = 0.8; >> h = 1; >> f1 = feval('f',x+h) >> f2 = feval('f',x-h) >> izv = (f1-f2)/(2*h) f1 = -0.2272 f2 = 0.9801 izv = -0.6036

Naj~esta gre{ka {to se pravi e ispu{tawe na apostrofite 'f', bidej}i funkcijata feval go bara imeto na funkcijata.

5: Po~etnata gre{ka vo prviot ~ekor se postavuva na nula. 6: Se koristi for ciklusot za presmetka na izvodot i gre{kata vo slednite dva

~ekori. Ovie vrednosti se potrebni kako inicijalni za ponatamo{na iteracija. . 13: So pomo{ na while ciklusot se presmetuvaat sukcesivnite vrednosti na izvodot

zaedno so pripadnite gre{ki i istite se smestuvaat vo vektorite D(n) i E(n). Ciklusot while se povtoruva se dodeka gre{kata t.e. apsolutnata razlika pome|u dva posledovatelni izvodi stane pomala od dozvolenata tolerancija.

20: Se presmetuva n, so koj se ozna~uva elementot na vektorot D kako kone~no re{enie na vrednosta na prviot izvod.

Koristeweto na m-funkcijata mo`e da se ilustrira so slednata MatLab sesija.

>> x0 = 0.8; >> toler = 1e-7; >> [H,D,E,n] = difflim('f',x0,toler); >> n,H(n),D(n),E(n)

---- Osnovi na MatLab ----

81

n = 4 ans = 1.0000e-004 ans = -0.7174 ans = 1.1836e-007

Presmetkite poka`uvaat deka vo ~etvrtata iteracija e postignata baranata to~nost i vrednosta na izvodot vo to~kata x=0.8 iznesuva D(4)=-0.7174, pri {to ~ekorot za numeri~ko diferencirawe e H(4)=0.0001 a postignata gre{ka E(4)=0.000000118.

3.2 Numeri~ko diferencirawe so pomo{ na Wutnoviot interpolacionen polinom Numeri~ko diferencirawe za funkcii koi {to se zadadeni broj~ano ( numeri~ki )

vo osnova se realizira vo dva ~ekora. Vo prviot ~ekor se vr{i polinomna aproksimacija i od kako }e se opredelat koeficientite na polinomot istiot se diferencira vo dadenata to~ka. Za poto~na presmetka na vrednosta na izvodot potrebna e aproksimacija so polinom od povisok red10.

Vo sledniot primer, dadena e m-funkcija so koja se opredeluva prviot izvod vo

to~kata x0 na funkcija definirana so vektorite x ( abcisa ) i y ( ordinata ). Vo samoto telo na funkcijata se koristat tri funkcii od koi newtint(x,y) e m-funkcija koja gi opredeluva koeficientite na Wutnoviot interpolacionen polinom. Istata e definirana vo delot 2.3 i taa e korisni~ka m-funkcija, t.e. napi{ana od korisnikot. Funkciite polyder so koja se vr{i diferencirawe na polinomot ( vidi help ) i funkcijata polyval se vgradeni MatLab funkcii. Ovoj primer e dosta edukativen vo smisla kako korisnikot treba da gi pi{uva svoite funkcii so koristewe na vgradenite m-funkcii. function vr = newtdiff(x,y,x0) [C,D] = newtint(x,y); derc = polyder(C); vr = polyval(derc,x0);

Kako primer za upotreba na newtdiff da go poftorime primerot od prethodniot

del 3.1.

primer: >> x = 0:0.2:1.2;

>> y = cos(x); >> x0 = 0.8; >> izvod = newtdiff(x,y,x0)

izvod = -0.7174 primer11

>> x=1:0.05:1.3; >> y = sqrt(x); >> x0 = 1.0; >> izvod = newtdiff(x,y,x0)

10 Vidi 2.3 od predavawata vo vtoriot semestar 11 Od predavawata na strana 24

---- Osnovi na MatLab ----

82

izvod = 0.5000

4. NUMERI^KO INTEGRIRAWE

Vo prviot del na ovoa u~ebno pomagalo, se zapoznavme so funkciite quad i quad8

so koi se vr{i numeri~ka integracija na funkcii zadadeni analiti~ki. No sli~no kako i kaj diferenciraweto vo slu~aj na broj~ano zadadeni funkcii numeri~kata integracija se vr{i preku integracija na polinomot so koj se aproksimiraat podatocite. Od teoretskite analizi12 proizleguvaat dva ednostavni algoritmi koi naj~esto se koristat za numeri~ka integracija.

4.1 Trapezno pravilo So trapeznoto pravilo integriraweto se realizira preku sumacija na povr{ini na

trapezi. Slednata m-funkcija e primer na programirawe na trapeznoto pravilo.

function v = trapez(x,y) n = length(x); m = length(y); if m ~= n display(' x i y nemaat ednakov broj na podatoci ') break end v = 0; for k=1:n-1 v=v+(x(k+1)-x(k))*(y(k+1)+y(k))/2.0; end

Kako vlezni parametri se vektorite na podatoci x i y a izlezot e integral na

funkcijata y pome|u to~kite x(1) i x(n).

primer13

>> x = 0.4:0.1:1.0; >> y = exp(x)./x; >> integral = trapez(x,y)

integral = 1.7950 primer14

>> x = 0:pi/12:pi/2; >> y = sin(x); >> integral = trapez(x,y) integral = 0.9943 Vo gorniot primer presmetan e integral na funkcijata sin(x) vo intervalot [0,pi/2], ~ija vrdnost teoretski iznesuva 1. Zaradi mal broj na intervali a i koristeweto na trapeznoto pravilo vnesuva odredena gre{ka. Za da se zgolemi

12 Vidi 3.2 od predavawata vo vtoriot semestar 13 od predavawata na st. 29 14 od predavaqata na st. 30

---- Osnovi na MatLab ----

83

to~nosta potrebno e da se zgolemi brojot na intervalite odnosno namali ~ekorot na integracija. >> x = 0:pi/500:pi/2; >> y = sin(x); >> format compact >> integral = trapez(x,y) integral = 0.99999671012970

So namalen broj na ~ekori vrednosta na integralot se dobli`uva do 1, no se u{te gre{kata e vo 5-tata decimala a brojot na intervali e 500. Golemiot broj na intervali a ne taka golema to~nost ja pravi ovaa metoda nepopularna i pokraj svojata ednostavnost.

4.2 Simpsonovo pravilo Simpsonovoto pravilo e metoda koja so pomal broj na intervali mo`e da postigne

pogolema to~nost15. Vo slu~aj na ednakvi intervali m-funkcijata bi mo`ela da se napi{e na sledniot na~in.

function v = simpson(h,y) %------------------------------- % vlezni parametri % h cekor na integracija ( interval) % y() vrednosti na funkcijata t.e podatoci vo brojcana forma %------------------------------- n = length(y); % se ispituva dali ima neparen broj na podatoci % ako ne da se namali za eden m = n; if rem(n,2) == 0 m = n-1; end m,n v = 0.0; for k=2:m-1 if rem(k,2)== 0 v = v+4.0*y(k); else v = v+2.0*y(k); end end v = h*(v + y(1)+y(m))/3; % vo slucaj na paren broj na tocki dodaj ja % poslednata povrsina koristejki trapezno pravilo if rem(n,2) == 0 v = v+h*(y(n)+y(n-1))/2; end

primer >> h = pi/500; >> x = 0:h:pi/2; >> y = sin(x); >> integral = simps1(h,y) 15 Vidi 3.2.3 od predavawata vo vtoriot semestar

---- Osnovi na MatLab ----

84

integral = 1.0000

4.3 Gausova integracija Gausovata integracija e efikasna i zadovolitelno to~na metoda za integrirawe na poslo`eni analiti~ki funkcii. Vo slu~aj na funkcii zadadeni vo numeri~ka forma prvo treba da se izvr{i interpolacija so polinom ili nekoja druga analiti~ka funkcija pa potoa da se primeni Gausovata metoda. Vo su{tina metodata se sostoi vo zobirawe na vrednostite na funkcijata vo jazlite, pomno`eni so soodvetni te`inski faktori16. Vo zavisnost od baranata to~nost na presmetkite mo`e integracijata da bide so pomalku ili pove}e jazlni to~ki. No ve}e so relativno mal broj na jazli mo`no e da se postigne zadovolitelna to~nost. So slednata m-funkcija gauss5, dadena e programata za Gausovata metoda so 5 jazli. function sum = gauss5(f,a,b) %------------------------------------------------------------------- % Vlez % f ime na funcijata % a left endpoint of [a,b] % b right endpoint of [a,b] % A table of abscissas % W table of weights % Return % sum rezultat na integracija %----------------------------------------------------------- A = [-0.90617985 -0.53846931 0.0 0.53846931 0.90617985]; W = [0.23692689 0.47862867 0.56888889 0.47862867 0.23692689]; n = length(A); sum = 0; fct = (b-a)/2; for k = 1:n z = A(k); w = W(k); x = (b*(z+1)+a*(1-z))/2; fz = fct*feval(f,x); sum = sum+w*fz; end

Za ilustracija na Gausovata metoda }e gi re{ime site prethodni primeri.

primer

>> a = 0; >> b = pi/2; >> integral = gauss5('f',a,b)

integral = 1.0000

pri {to funkcijata f e zadadena kako m-fajl.

function z = f(x) z = sin(x);

primer

16 Vidi 3.3 od predavawata vo vtoriot semestar

---- Osnovi na MatLab ----

85

>> a = 0.4; >> b = 1.0; >> integral = gauss5('f',a,b)

integral = 1.7904

pri {to f funkcijata e zadadena so:

function z = f(x) z = exp(x)/x;

primer

>> a = 1; >> b = 2; >> integral = gauss5('ff',a,b) integral = 0.6931

pri {to finkcijata ff e zadadena so m-fajlot:

function z = ff(x) z = 1./x;

Na kraj posledniot primer da go re{ime so koristewe na vgradenite funkcii quad

i quad8. >> a = 1; >> b = 2; >> err = 1.e-5; >> format long; >> integral = quad('ff',a,b,err) integral = 0.69314722007998 >> a = 1; >> b = 2; >> err = 1.e-5; >> integral = quad8('ff',a,b,err) integral = 0.69314718056011

5. RE[AVAWE NA SISTEMI LINEARNI ALGEBARSKI RAVENKI

Edno od centralnite mesta vo numeri~kite metodi zazema re{avaweto na sistemi na linearni algebarski ravenki. Generalno ka`ano, vo sekoj matemati~ki model so koj se opi{uvaat fizi~kite fenomeni, se javuva potreba od re{avawe na sistem na linearni ravenki. Duri odredeni in`ewerski problemi mo`at da se modeliraat i svedat na sistem na linearni ravenki. Kako ednostaven primer da ja spomneme polinomnata interpolacija koja se sveduva na re{avawe na sistem na ravenki kade matricata na sistemot e Vandermondovata matrica. Postojat mnogu takvi primeri no toa e nadvor od celta na ovaa skripta. Vpro~em faktot deka samiot MatLab, e razvien okolu edno ezgro, koe prvi~no iskqu~ivo be{e napraveno da im olesni na korisnicite koristewe na paketot za re{avawe na linearni sistemi. Zatoa MatLabot i ima dosta bogata biblioteka na vgradeni funkcii i operatori koi manipuliraat so matrici.

---- Osnovi na MatLab ----

86

Za po~etok da re{ime nekolku primeri na sistemi so vgradenite funkcii.

primer: 2x1 + x2 = 4 x1 - x2 = -1 ili

bAx = t.e ⎥⎦

⎤⎢⎣

⎡−

=⎥⎦

⎤⎢⎣

⎡⎥⎦

⎤⎢⎣

⎡− 1

411

12

2

1

xx

MatLab naredbi:

>> A=[2 1; 1 -1]; >> b = [4 -1]'; >> x = A\b >> c = A*x >> err = b-c

x = 1 2 c = 4 -1 err = 0

0

Prethodniot primer ilustrira koristewe na vgradeniot operator \ koj vo slu~aj na matrici ozna~uva delewe od levo na vektorot-kolonata b so matricata A i se dobiva re{enie vektor-kolonata x. Vsu{nost matemati~ki re{enieto na sitemot e:

bAx 1−= kade A-1 e inverzna matrica na matricata A. So koristewe na inverzna matrica sistemot mo`e da se re{i i na sledniot na~in.

>> Ainv = inv(A) >> x = Ainv*b Ainv = 0.3333 0.3333 0.3333 -0.6667 x = 1.0000 2.0000

Prednosta na re{avawe na sistem na ravenki so operatorot na delewe e vo toa {to MatLabot vo pozadina koristi algoritmi koi vodat smetka za stabilnosta na re{enieto kako i toa da so operatorot za delewe, mo`e da se re{at i sistemi koi imaat pove}e ravenki od nepoznati no toga{ re{enieto e vo smisla na najmala kvadratna gre{ka. Na primer da dodademe u{te edna ravenka t.e. red vo matricata A.

A (3,:) = [ 1 1] b(3) = 4 x = A\b c = A*x razlika = b-c err = norm(razlika)

---- Osnovi na MatLab ----

87

A = 2 1 1 -1 1 1 b = 4 -1 4 x = 1.0714 2.2857 c = 4.4286 -1.2143 3.3571 razlika = -0.4286 0.2143 0.6429 err = 0.8018

Re{enieto x e re{enie koe dava najmala vkupna kvadratna gre{ka na elementite na odstapuvaweto razlika. Imeno ako za re{enie zememe:

x1 = 1.09 2.24

koe se razlikuva vo vtorata decimala od re{enieto x gre{kata e:

>> x1 = [1.09 2.24]' >> c1 = A*x1 >> raz1 = b - c1 >> err1 = norm(raz1) >> err1 - err x1 = 1.0900 2.2400 c1 = 4.4200 -1.1500 3.3300 raz1 = -0.4200 0.1500 0.6700 err1 = 0.8049 ans = 0.0031

Poslednata naredba ja presmetuva razlikata na dvete gre{ki i jasno e deka novata kvadratna gre{ka e pogolema od prvata.

primer:

>> A = [ 10 -7 0; -3 2 6; 5 -1 5] >> b = [7 4 6]' >> x = A\b

---- Osnovi na MatLab ----

88

>> c = A*x >> err = b-c A = 10 -7 0 -3 2 6 5 -1 5 b = 7 4 6 x = 0 -1 1 c = 7 4 6 err = 0 0 0 primer:

>> A = [ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21] >> b = [erf(0.8) erf(0.9) erf(1.1)]' >> x = A\b >> c = A*x >> err = b-c

A = 1.0000 0.8000 0.6400 1.0000 0.9000 0.8100 1.0000 1.1000 1.2100 b = 0.7421 0.7969 0.8802 x = -0.0122 1.2937 -0.4386 c = 0.7421 0.7969 0.8802 err = 1.0e-015 * 0.1110 0

0

Vo gorniot primer erf(x) e vgradena funkcija. Vidi ja definicijata koristej}i se so help erf. Gre{kata err e od redot na 10-15, {to prakti~no zna~i deka e nula.

5.1 Gausova metoda na eliminacija

---- Osnovi na MatLab ----

89

Gausovata metoda ili poznata u{te kako Gaus-Jordan metoda, e najpoznata metoda koja zadol`itelno se sre}ava vo sekoj u~ebnik na numeri~ki metodi17. Poradi svojata ednostavnost i lesno programirawe taa nej~esto se koristi za re{avawe na sistemi so relativno mal broj na ravenki ( 30x30). Od druga strana, vo slu~aj na mal broj na ravenki koi mo`at i ra~no da se re{at, ovaa metoda zadol`itelno se koristi. Slaba strana na metodata e nejzinata nestabilnost pri golem sistem na ravenki, zatoa {to numeri~kata gre{ka se akumuliraat i mo`e da se slu~i da se javi sungularnost t.e. delewe so nula. Za vakvi sistemi razvieni se posebni algoritmi a i samiot MatLab ima vgradeni funkcii so koi mo`e da se izbegne problemot.

Funkcijata gaussj e program so koj se implementira Gaus-Jordan metodata. Im se

prepora~uva na studentite detalno da go analiziraat programot, bidej}i vo nego se iskoristeni prednostite na matri~no i vektorski smetawe koi gi ovozmo`uva MatLabot. Taka na primer so edna naredba ( 8 red ) se vr{i vektorsko odzimawe {to inaku so drugi klasi~ni programski jazici bi trebalo da se koristi dodaten for ciklus i da se odzima element po element.

function X = gaussj(A,B) %-------------------------------------------------------------- %GAUSSJ Gauss-Jordan metoda za resavawe na linearni ravenki % Povikuvanje % X = gaussj(A,B) % Vlez % A coeficienti na matricata % B vector na desnata strana % Izlez % X vector na resenie %---------------------------------------------------------------- [n n] = size(A); %1 A = [A';B']'; %2 X = zeros(n,1); %3 for p = 1:n, %4 for k = [1:p-1,p+1:n], %5 if A(p,p)==0, break, end %6 mult = A(k,p)/A(p,p); %7 A(k,:) = A(k,:) - mult*A(p,:); %8 end %9 end %10 X = A(:,n+1)./diag(A); %11

primer:

>> A = [ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21] >> b = [erf(0.8) erf(0.9) erf(1.1)]' >> x = gaussj(A,b) >> c = A*x >> err = b-c

A = 1.0000 0.8000 0.6400 1.0000 0.9000 0.8100 1.0000 1.1000 1.2100 b = 0.7421 0.7969 0.8802 x =

17 Vidi 4.1 od predavawata vo vtoriot semestar

---- Osnovi na MatLab ----

90

-0.0122 1.2937 -0.4386 c = 0.7421 0.7969 0.8802 err = 1.0e-015 * 0.1110 0.1110

0.2220 primer

>> A = [ 10 -7 0; -3 2 6; 5 -1 5] >> b = [7 4 6]' >> x = gaussj(A,b) >> c = A*x >> err = b-c

A = 10 -7 0 -3 2 6 5 -1 5 b = 7 4 6 x = 0 -1.0000 1.0000 c = 7.0000 4.0000 6.0000 err = 1.0e-013 * -0.3109 0.1066

-0.0355

5.2 Iterativna metoda ( Gaus - Zajdel)18 Ovaa metoda isto taka dosta ~esto se koristi, poradi svojata ednostavnost i mnogu

lesno programirawe. Mo`e da se koristi za sistemi so bilo koja golemina no nedostatok na metodata e {to prethodno sistemot na linearni ravenki prvo treba da se transformira vo forma za iteracija i pri toa treba da bide zadovolen uslovot za konvergencija.

Funkcijata gseid e primer na edna implementacija vo MatLabot na Gaus-

Zejdelovata metoda.

function [P,dP,Z] = gseid(A,B,P,delta,max1) %------------------------------------------------------------- %GSEID Gauss-Seidel iteracona metoda % Se povikuva 18 Vidi 4.2 od predavawata vo vtoriot semestar

---- Osnovi na MatLab ----

91

% [X,dX] = gseid(A,B,P,delta,max1) % [X,dX,Z] = gseid(A,B,P,delta,max1) % Vlez % A mtricata na sistemot % B vectorot na desnata strana % P poceten vector na iteracija % delta tolerancija na greska % max1 maximalen broj na iteratcii % Izlez % X vector resenie % dX greska vo sekoja iteracija % Z matrica na resenija vo sekoja iteracija %-------------------------------------------------------------- Z = P'; n = length(B); Pold = P; for k=1:max1, for r = 1:n, Sum1 = B(r) - A(r,[1:r-1,r+1:n])*P([1:r-1,r+1:n]); P(r) = Sum1/A(r,r); end dP = abs(Pold-P); err = norm(dP); relerr = err/(norm(P)+eps); Pold = P; Z = [Z;P']; if (err<delta)|(relerr<delta), break, end end primer19:

>> A = [ 10 1 1; 2 10 1; 2 2 10] >> b = [12 13 14]' >> x0 = [ 1.07 0.4 2.3]' >> toler = 1.e-8 >> maxiter = 20 >> [x,DX,Z] = gseid(A,b,x0,toler,maxiter) >> c = A*x >> err = b-c A = 10 1 1 2 10 1 2 2 10 b = 12 13 14 x0 = 1.0700 0.4000 2.3000 toler = 1.0000e-008 maxiter = 20 x = 1.0000 1.0000

19 Primer od predavawata

---- Osnovi na MatLab ----

92

1.0000 DX = 1.0e-008 * 0.2106 0.0150 0.0451 Z = 1.0700 0.4000 2.3000 0.9300 0.8840 1.0372 1.0079 0.9947 0.9995 1.0006 0.9999 0.9999 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 c = 12.0000 13.0000 14.0000 err = 1.0e-009 * 0.3013 0.4511 0 primer:

>> A = [ 8 1 1; 1 5 -1; 1 -1 5] >> b = [26 7 7]' >> x0 = [ 1.07 0.4 2.3]' >> toler = 1.e-6 >> maxiter = 20 >> [x,DX,Z] = gseid(A,b,x0,toler,maxiter) >> c = A*x >> err = b-c A = 8 1 1 1 5 -1 1 -1 5 b = 26 7 7 x0 = 1.0700 0.4000 2.3000 toler = 1.0000e-006 maxiter = 20 x = 3.0000 1.0000 1.0000 DX = 1.0e-005 * 0.1308 0.0940

---- Osnovi na MatLab ----

93

0.0450 Z = 1.0700 0.4000 2.3000 2.9125 1.2775 1.0730 2.9562 1.0234 1.0134 2.9954 1.0036 1.0016 2.9993 1.0005 1.0002 2.9999 1.0001 1.0000 3.0000 1.0000 1.0000 3.0000 1.0000 1.0000 3.0000 1.0000 1.0000 c = 26.0000 7.0000 7.0000 err = 1.0e-005 * 0.1389 -0.0450 0 Interesentno e da proverime dali po~etniot vektor na iteracijata x0 = [ 1.07 0.4 2.3]' ima vlijanie na to~nosta i brojot na iteracii. Za taa cel }e po~neme so vektorot x0 koj e daleku od re{enieto. >> A = [ 8 1 1; 1 5 -1; 1 -1 5] >> b = [26 7 7]' >> x0 = [ 107 -24 32]' >> toler = 1.e-6 >> maxiter = 20 >> [x,DX,Z] = gseid(A,b,x0,toler,maxiter) >> c = A*x >> err = b-c A = 8 1 1 1 5 -1 1 -1 5 b = 26 7 7 x0 = 107 -24 32 toler = 1.0000e-006 maxiter = 20 x = 3.0000 1.0000 1.0000 DX = 1.0e-006 * 0.4888 0.3509 0.1679 Z = 107.0000 -24.0000 32.0000

---- Osnovi na MatLab ----

94

2.2500 7.3500 2.4200 2.0288 1.4782 1.2899 2.9040 1.0772 1.0346 2.9860 1.0097 1.0047 2.9982 1.0013 1.0006 2.9998 1.0002 1.0001 3.0000 1.0000 1.0000 3.0000 1.0000 1.0000 3.0000 1.0000 1.0000 3.0000 1.0000 1.0000 c = 26.0000 7.0000 7.0000 err = 1.0e-006 * 0.5188 -0.1679 0

I vo ovoj slu~aj se dobiva to~noto re{enie so nezna~itelen mal broj na dodatni iteracii ( plus dve), {to uka`uva deka sistemot silno go zadovoluva uslovot za konvergencija. Se ohrabruvaat studentite da na sli~en na~in probaat pove}e primeri kako bi se zdobile so ~uvstvo za problemot.

Na kraj da re{ime u{te eden primer od predavawata daden na strana 48. Pri toa }e

zapo~neme so transformiraniot sistem daden na strana 49 so koj se obezbeduva konvergencijata.

>> A = [ 65 17 -13 7 23 56 11 -19 -5 3 47 20 16 12 17 18] >> b = [84 36 18 25]' >> x0 = [ 1.07 0.4 2.3 0.5]' >> toler = 1.e-8 >> maxiter = 100 >> [x,DX,Z] = gseid(A,b,x0,toler,maxiter); >> [iter,m]=size(Z); >> x,iter >> c = A*x >> err = b-c A = 65 17 -13 7 23 56 11 -19 -5 3 47 20 16 12 17 18 b = 84 36 18 25 x0 = 1.0700 0.4000 2.3000 0.5000 toler = 1.0000e-008 maxiter =

---- Osnovi na MatLab ----

95

100 x = 1.6181 -0.3788 0.8241 -0.5752 iter = 33 c = 84.0000 36.0000 18.0000 25.0000 err = 1.0e-006 * 0.3173 -0.2172 0.1472 0.0000

6. MODELIRAWE NA PODATOCI

Kako {to e navedeno vo predavawata, Glava 5, pod modelirawe na podatoci se

podrazbira opredeluvawe na finkcionalna zavisnost odnosno kriva koja "najdobro" go opi{uva trendot na mno`estvo na to~ki. Za razlika od interpolacijata, kade krivata treba da pominuva niz zadadenite to~ki ( podatoci), pri modeliraweto t.e aproksimacijata20, krivata treba "najdobro" da go opi{e trendot na podatocite. Vo statistikata ovaa postapka se narekuva regresija a krivata regresiona kriva. Kriteriumot za "najdobro" mo`e da bide razli~it, no naj~esto e toa minimalnata vkupna kvadratna gre{ka ( na angliski least square error LSQ )21.

6.1 Polinomna regresija Polinomnata regresija za modelirawe na podatocite koristi polinomi kako

pretpostavena teoretska kriva. Koristej}i go LSQ kriteriumot se poredeluvaat koeficientite na polinomot. Bidej}i ovoj tip na funkcii dosta ~esto se koristat MatLabot ima vgradena m-funkcija za polinomna regresija polyfit so koja se zapoznavme vo delot 1.4 na ovaa skripta. Sepak nie }e napi{eme na{a m-funkcija za polinomna regresija so cel studentite podlaboko da navlezat vo tehnikata na programiraweto.

Neka se zadadeni empiriskite podatoci ),....,,( 21 nyyyy = koi soodvestvuvaat na

mernite mesta ili to~ki ),...,,( 21 nxxxx = .Polinomnata regresija se sostoi vo

opredeluvaweto na koeficientite na polinomot

011

1 ....)( axaxaxasp kk

kk ++++= −

taka da presmetanite koeficienti ak, ak-1,...,a1,a0 davaat najmala vrednost na

kvadratnata gre{ka.

20 Vo angliskata literatura ovoj vid na aproksimacija se narekuva " fitting". Vo na{iot jazik soodveten prevod ne postoi zatoa ~esto mo`e da se sretne samiot zbor fiting. Najblisku do prevodot e "aproksimacija" iako vo angliskata literatura zborot aproksimacija ( aproximation ) e poseben zbor. Vo statistikata postapkata se narekuva regresija a krivata regresiona kriva. 21 Vidi predavawa str. 53.

---- Osnovi na MatLab ----

96

∑ =−=

n

j jj yxpS1

2))((

Posle opredeleni matemati~ki operacii problemot se sveduva na re{avawe na

sistem na ravenki.

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

n

n

k

k

yy

yyy

A

aa

aa

AA

1

3

2

1

'

0

1

1'

.

..

kade matricata A e od oblik:

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

−−

−−−

1.1...........1..1.1.

11

111

31

33

21

22

11

11

nkn

kn

nkn

kn

kk

kk

kk

xxxxxx

xxxxxxxxx

A

Dimenzijata na matricata A e (n,(k+1)) kade n e broj na podatoci a (k+1) e broj na

nepoznati koeficienti, dodeka A' e transponirana matrica na A. M-funkcijata polylsq e MatLab program so koj se presmetuvaat koeficientite na

polinomot.

function [C,Err]= polylsq(x,y,k) %------------------------------- % Polinomna regresija % Vlez: % y : vektor na podatoci % x : vektor na tocki koi soodvestvuvaat na podatocite % k : redot na polinomot % Izlez: % C : vektor na koeficienti % Err : Vkupna kvadratna greska %--------------------------------- % proveri dali x i y se vektor-koloni ako ne transformiraj gi vo vektor-koloni [nr,nc] = size(y); if nr == 1 y=y'; n=nc; end [mr,mc] = size(x); if mr == 1 x = x'; m = mc;

---- Osnovi na MatLab ----

97

end n = length(y); m = length(x); if m ~= n display(' x i y nemaat ist broj na podatoci'), break end A = zeros(n,k+1); %1 for j = 1:k+1 %2 A(:,j)= x.^(k+1-j); %3 end %4 S = A'*A; %5 b = A'*y; %6 C = S\b; %7 Err = norm((y-A*C)); %8

Vo ramkite na for ciklusot ( naredbi 2-4) se generira matricata A. So naredbata 5 se formira matricata A'A a so 6-ta naredba, desnata strana na sistemot isto taka se tranansformira, mno`ej}i ja so A'. Sedmata naredba go koristi vgradeniot operator \ za re{avawe na sistem na linerani ravenki so {to se dobiva re{enieto za nepoznatite koeficienti. Osmata naredba ja presmetuva vkupnata kvadratna gre{ka.

primer:

>> x =[0 1 2 3 4 5 6]; >> y =[ 2 3 5 5 8 9 10]; >> [C,Err]=polylsq(x,y,1) C = 1.3929 1.8214 Err = 1.2956

Polinomot od prv red koj vo smisla na najmala vkupna kvadratna gre{ka (Err = 1.2956 )gi modelira podatocite e:

8214.13929.1)( += xxp Ako sakame da koristime polinom od povisok red ( pr. k=2) povikuvaweto na m-

funkcijata bi bilo so slednive parametri.

>> x =[0 1 2 3 4 5 6]; >> y =[ 2 3 5 5 8 9 10]; >> [C1,Err1]=polylsq(x,y,2)

C1 = 0.0119 1.3214 1.8810 Err1 =

1.2910

Razlikata e vo toa {to tretiot parametar na m-funkcijata polylsq e 2. Gre{kata e ne{to pomala. Da probame so polinom od tret stepen.

>> x =[0 1 2 3 4 5 6]; >> y =[ 2 3 5 5 8 9 10]; >> [C3,Err3]=polylsq(x,y,3)

---- Osnovi na MatLab ----

98

C3 = -0.0278 0.2619 0.7659 2.0476 Err3 =

1.2247

Vo ovoj slu~aj gre{kata Err3 = 1.2247 e najmala i bi mo`ele da prifatime deka polinomot od tret stepen po kriteriumot na gre{ka e najdobra polinomna regresija. Sekako mo`e da se postavi pra{awe ako nekoj od polinomite so povisok red davaat pomala gre{ka za{to toj polinom ne se zeme? Vsu{nost, izborot na kone~niot polinom vo praksa, ne zavisi samo od vrednosta na gre{kata ve}e e od bitno zna~ewe i negiviot red. Imeno vo gornite primeri razlikata vo gre{kite na polinomite od prv i tret red se nezna~itelni vo odnos na manipulaciite i presmetkite koi treba vo ponatamo{nata analiza da se pravat so polinomite. Sekako deka polinomot od prv red e mnogu poednostaven od polinimot od tret ili povisok red. No vo slu~aj koga taa razlika e zna~itelna toga{ ne treba da se izbegnuva polinom od povisok red.

Gornata diskusija mo`e i grafi~ki da se ilustrira.

>> x1 = 0.0:0.2:6.2; >> y1 = polyval(C,x1); >> y3 = polyval(C3,x1); >> plot(x,y,'o',x1,y1,'-',x1,y3,'--')

0 1 2 3 4 5 6 71

2

3

4

5

6

7

8

9

10

11

Na gorniot grafik, kruk~iwata se podatocite, polnata linija e regresijata so polinom od prv red a isprekinatata linija e polinomot od tret red. Jasno se gleda deka i polinomot od prv red zadovolitelno dobro gi aproksimira ( fitira) podatocite.

Na kraj da gi proverime na{ite rezultati so vgradenata funkcija polyfit.

>> [C1,Q1] = polyfit(x,y,1) >> [C2,Q2] = polyfit(x,y,2) >> [C3,Q3] = polyfit(x,y,3)

---- Osnovi na MatLab ----

99

C1 = 1.3929 1.8214 Q1 = R: [2x2 double] df: 5 normr: 1.2956 C2 = 0.0119 1.3214 1.8810 Q2 = R: [3x3 double] df: 4 normr: 1.2910 C3 = -0.0278 0.2619 0.7659 2.0476 Q3 = R: [4x4 double] df: 3

normr: 1.2247

Rezultatite se identi~ni, so toa {to vo slu~ajov gre{kata e ozna~ena so normr.

6.2 Op{ta funkciska regresija Vo prethodniot del kako funkcii so koi se vr{i regresija zemeni se polinomite od

k-tiot stepen. No generalno mo`e da se razgleduvaat bilo koi funkcii. Imeno mo`e najop{to da se definira krivata na sledniot na~in.

)(....)()()( 1111 xqaxqaxqaxf kkkk +++= −−

pri {to funkciite qk(x) se odbiraat taka da zadovoluvaat dadeni uslovi ili pak

ja prezentiraat fizikata na problemot. Ne postoi nekoe pravilo za izbor na funkciite no naj~est kriterium e fizikalniot konteks na problemot kako i iskustvoto. Sega matricata A bi dobila forma.

⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

−−−−−

)()(.)()()()(.)()(

.....

.....)()(.)()()()(.)()()()(.)()(

121

1112111

3132313

2122212

1112111

nnnknk

nnnknk

kk

kk

kk

xqxqxqxqxqxqxqxq

xqxqxqxqxqxqxqxqxqxqxqxq

A

Kako naj~esti funkcii koi se koristat, pokraj polinomite, se eksponecijalnite,

bidej}i se vo osnova na pogolem broj fizi~ki zakoni. Sistemot, pretstaven so gornata matrica, se u{te e linearen, no ponekoga{ se

javuvaat i slu~aevi koga nepoznatite parametri ak, se vo ramkite na samite funkcii qk. Pri takvi regresii stanuva zbor za nelinearen problem na najmali kvadrati ( non-linear least sqyare NLSQ). No ponekoga{ so odredeni matemati~ki transformacii problemot mo`e da se linearizira. Naprimer dosta ~esto se koristi slednava funkcija za regresija.

)()( 11 xqaxf = kade bxexq =)(1

---- Osnovi na MatLab ----

100

kade pokraj koeficientot a1 nepoznatiot parametar e i b koj e vo ramkite na funkcijata q1.

No so logaritmirawe na levata i desnata strana problemot mo`e da se

linearizira.

bxaxf += 1ln))(ln( ili napi{ano vo prepoznatliva forma:

bxcy += kade ))(ln( xfy = a )ln( 1ac = Problemot e sveden na polinomna regresija od prv red, kade namesto originalnite

podatoci se koristi nivniot priroden logaritam. Toa ni ovozmo`uva da ja iskoristime m-funkcijata polylsq.

Sledniot primer e ilustracija na prethodniot komentar.

>> x = 0:0.1:3; >> a = 5.5; >> b=-1.2; >> y = a*exp(b*x); >> n=length(y); >> z = rand(1,n)-0.2; >> y1 = y+z; >> plot(x,y1,'o')

0 0.5 1 1.5 2 2.5 30

1

2

3

4

5

6

Na grafikot se poka`ani simulirani empiriski podatoci. Tie se dobieni koga na teoretskata vrednost na funkcijata y se dodadeni slu~ajni vrednosti pome|u -0.2 i 0.2. Niz ovie to~ki treba da se povle~e eksponencijalna kriva y = a*exp(b*x).

>> ylg = log(y1); >> [C,Err] = polylsq(x,ylg,1) >> alg = C(2) >> breg = C(1) >> areg = exp(alg) >> yteor = areg*exp(breg*x);

---- Osnovi na MatLab ----

101

>> plot(x,y1,'o',x,yteor,'-')

C = -0.8863 1.5706 Err = 2.8748 alg = 1.5706 breg = -0.8863 areg = 4.8095

0 0.5 1 1.5 2 2.5 30

1

2

3

4

5

6

Od presmetkite proizleguva deka parametarot a dobien so regresijata iznesuva

4.8095 a parametarot b e -0.8863. Teoretskite vrednosti se 5.5 i -1.2. Na gorniot grafik poka`ani se simuliranite empiriski podatoci i regresionata eksponencijalna kriva pri {to mo`e da se zabele`i deka trendot na podatocite e zadovolitelno "objasnet", so regresionata kriva.

7. DISKRETNA INTERPOLACIJA

Vo dosega{nite izlagawa, postapkata na interpolacija i aproksimacija

podrazbira{e opredeluvawe na kontinuirani funkcii koi " najdobro" , funkcionalno ja pretstavuvaa vrskata pome|u zavisnata promenliva ( podatoci ) i nezavisnata promenliva ( merni mesta, to~ki, jazli). No vo osnova za uspe{no ili poto~no ka`ano zadovolitelno modelirawe potrebno e podatocite da poka`uvaat nekoj trend. Statisti~ki ka`ano da postoi odredena korelacija. Samiot trend mo`e da bide skrien vo naizgled haoti~nata distribucijata na podatocite no posle odredena obrabotka na podatocite kako {to se usrednuvawe, otstranuvawe na {umot i t.n trendot jasno da stane vidliv. Kako primer da se navratime na prethodniot grafik. Samite podatoci se haoti~no, slu~ajno, rasfrleni dol` x-oskata, no postoi trend da so rastot na x, vrednosta na podatocite se namaluva, {to sugerira koristewe na eksponencijalna funkcionalna zavisnost.

---- Osnovi na MatLab ----

102

No vo praksa, dosta ~esto, mernite t.e. eksperimentalnite podatoci nemaat nekoj uo~liv trend. Naprimer vo rudarstvoto za analiza na prisustvo na nekoj mineral vo dadeno le`i{te, se vr{at labaratoriski ispituvawa na uzorci dobieni od bu{otini. Bidej}i procesot na dup~ewe e relativno skap, ekonomski ne e isplatlivo da postoi gusta mre`a na dup~ewa na daden prostor, tuku se realiziraat samo odreden optimalen broj na dup~ewa, so ideja prisustvoto na mineralot na mesta kade nema dup~ewe da se oceni vrz baza na informacii dobieni od drugite bu{otini. Zna~i problemot koj treba da se re{i e sledniot:

Da se opredeli vrednosta na promenlivata Un vo to~kata Mn ako se poznati

vrednostite U1,U2,... ,Um vo to~kite M1,M2,....,Mm . Pri toa to~kite M1,M2,....,Mm mo`at da bidat proizvolno rasporedeni.

Osnovnata ideja na diskretnata interpolacija se sostoi vo pretpostavkata deka

nepoznatata vrednost Un, mo`e da bide oceneta so poznatite vrednosti U1,U2,....,Um pri {to udelot na sekoja to~ka vo procenkata, se namaluva so odale~enosta od to~kata za koja se vr{i procenka. Fizi~kata pozadina na ovaa pretpostavka e o~ekuvaweto deka vrednosta na Un, ne mo`e drasti~no da se razlikuva od vrednostite vo najbliskite to~ki. Sledniot matemati~ki izraz gi zadovoluva pretpostavkite.

p

nm

p

n

p

n

p

nmm

p

n

p

nn

LLL

LU

LU

LU

U)1(...)1()1(

)1(...)1()1(

,,2,1

,,22

,11

+++

+++

= (**)

kade : L1,n, L2,n,..,Lm,n se rastojanijata na to~kata Mn od to~kite M1,n,

M2,n,...,Mm,n a p e pozitiven broj. Vlijanieto na sekoja to~ka Mk,n, generalno zavisi od rastojanieto do to~kata Mn.

Ako gorniot izraz se napi{e vo forma:

p

nnm

p

nn

p

nnmm

p

nnn

LLLL

LLU

LLUU

U)

/1(...)

/1(1

)/1(...)

/1(

,1,,1,2

,1,,1,221

+++

+++

=

toga{, za L1,n -> 0, Un -> U1.n. Vo slu~aj koga L1,n ne e nula no se u{te ima mala

vrednost, t.e to~kata Mn e blisku do M1,n, vlijanieto na U1,n e najgolemo, dodeka

vlijanieto na ostanatite to~ki e pomalo i zavisi od vrednosta na izrazot )/1(

,1, nnk LL.

Vrednosta )/1(

,1, nnk LL mo`e da e dovolno mala taka da doprinosot na Uk ima

zanemarlivo zna~ewe. Poradi toa brojot na ~lenovite vo gornite izrazi mo`e da bide ograni~en, t.e. ne e nu`no da se zemat site to~ki a pri toa da se dobie sakanata to~nost. Mno`estvoto na site to~ki ( U1, U2,...,Um) vo ~ija neposredna okolina se nao|a nepoznata to~ka Un, se narekuva mno`estvo na vlijanie odnosno prestavuva zona na vlijanie. Zna~i deka pri ocenka na nepoznatata vrednost ne e nu`no da se zemaat site to~ki vo presmetkite odnosno postoi rastojanie, taka da to~kite so odale~enost pogolema od toa rastojanie ne vlijaat zna~itelno i istite mo`at da ne se vkqu~at vo presmetkite. Takvoto rastojanie se narekuva radijus na vlijanie . Od posebno zna~ewe za opredeluvaweto na radiusot na vlijanie e i brojot p. Na sledniot grafik

---- Osnovi na MatLab ----

103

prika`ana e funkcijata p

L)1( za pove}e vrednosti na p, pri {to )/( ,1, nnk LLL = , k =

1,2,...m.

>> L = 1:0.2:10; >> p2 = 2; >> p3 = 3; >> y2 = (1./L).^p2; >> Y3 = (1./L).^p3; >> plot(L,y2,'-',L,y3,'--')

1 2 3 4 5 6 7 8 9 100

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Od krafikot jasno se gleda deka za p = 2 ( polna linija ) i za L = 10, vrednosta

na funkcijata 1/L e pod 0.01, dodeka za p = 3 ( isprekinata linija ), toa se slu~uva ve}e za L = 5. Ako se vratime na posledniot izraz za ocenkata na vrednosta Un,

mo`eme da gi otfrlime onie to~ki za koi e p

nnk LL)

/1(

,1,

( k = 1,2,...,m) e pomalo

od 0.01.

Eksperimentalen primer22: Na le`i{teto na kvarcen pesok " Oblaci" vo rudnikot Rogatina napraveni se

nekolku dup~ewa i opredeleno e prisustvoto na mineralot SiO2. Treba da se ocenat vrednostite na meralot vo sekoj blok na le`i{teto ~ii dimenzii se Δx = 10m i Δy = 10m. Posle serija na probni istra`uvawa zakqu~eno e deka za radius na vlijanie

najsoodvetno e da se zeme R = 7* Δx = 70m. Vo dolnata tabela dadeni se ekperimentalni rezultati vo forma na matrica. Pri

toa prvata kolona go sodr`i redniot broj na bu{otinata, vtorata i tretata gi sodr`at x i y koordinatite a vo poslednata, ~etvrtata kolona se procentualnite sodr`ini na SiO2 vo soodvetniot blok.

22 Primerot e zemen od knigata " Matemati~ko modelirawe na le`i{ta na mineralni surovini" od Slobodan Vuji}, Rudarsko-Geolo{ki Fakultet, Beograd 1985,na strana 33.

---- Osnovi na MatLab ----

104

Tabela: Elementi na bu{otinite: x i y koordinati i procentualna sodr`ina na SiO2

reden broj na

bu{orina x y SiO2 (%)

1 8 2 93.22 16 2 93.53 24 2 94.24 32 2 945 8 10 936 16 10 94.27 24 10 958 32 10 959 40 10 9710 8 18 94.311 16 18 9512 24 18 9513 32 18 9614 40 18 95.415 48 18 9216 8 26 93.517 16 26 9518 24 26 9519 32 26 9720 40 26 9621 48 26 9222 8 34 9423 16 33 9624 24 34 95.425 32 34 96.426 4 38 94.227 16 42 9728 24 38 9529 32 42 9730 40 38 9731 24 50 9632 32 50 9533 40 50 8634 23 44 9535 20 30 92

Modelirawe i programirawe na problemot

Od gornata tabela proizleguva deka vo sekoja to~ka na rastojanie od 1 metar vo x i

y nasoka ne postojat merni podatoci. Toa mo`e ednostavno da se poka`e i na crte`. No pred toa potrebno e da se vnesat podatocite. Vo ovoj primer nie odbravme da podatocite bidat pro~itani kako m-skript datoteka vo koja se napi{ani podatocite vo forma na matrica identi~no kako i gorna tabela. Imeto na m-fajlot e SiO2.m. So naredba:

type SiO2.m

SiO2 = [ 1 8 2 93.2;2 16 2 93.5; 3 24 2 94.2;4 32 2 94;5 8 10 93;6 16 10 94.2;7 24 10 95

8 32 10 95;9 40 10 97;10 8 18 94.3;11 16 18 95;12 24 18 95;13 32 18 96;14 40 18 95.4

---- Osnovi na MatLab ----

105

15 48 18 92;16 8 26 93.5;17 16 26 95;18 24 26 95;19 32 26 97;20 40 26 96;21 48 26 92

22 8 34 94;23 16 33 96;24 24 34 95.4;25 32 34 96.4;26 4 38 94.2;27 16 42 97;28 24 38 95 29 32 42 97;30 40 38 97;31 24 50 96;32 32 50 95;33 40 50 86;34 23 44 95;35 20 30 92]

se pe~ati sodr`inata na m-skript datotekata SiO2.m. So nea, vsu{nost se definira matricata SiO2 koja gi sodr`i podatocite. Kako {to e ka`ano predhodno, na ovoj na~in e mo`no da se ~itaat pogolem broj na podatoci. Bidej}i datotekata se ~uva vo direktoriumot ( na diskot), nema potreba da pri sekoja nova sesija ili rabota so ovie podatoci sekoga{ odnovo se kucaat podatocite, ve}e so naredbata:

SiO2;

ednostavno se izvr{uvaat naredbite vo m-skript datotekata i so toa se v~ituva matricata SiO2 vo rabotniot prostor na MatLabot. Isto taka i izmena t.e. dodavawe ili isfrawe na podatoci e poednostavna, {to ni ovozmo`uva brzo i ednostavno presmetuvawe na razni kombinacii. Deka navistina podatocite se v~itani mo`e da proverime so naredbata:

size(SiO2) ans = 35 4

pri {to se konstatira deka redot na matricata SiO2 e od 35x4, {to odgovara na podatocite.

So slednite naredbi, mo`eme ilustrativno da gi prika`eme mestata kade postojat

merni podatoci.

plot(SiO2(:,2),SiO2(:,3),'o') axis('ij') grid

0 5 10 15 20 25 30 35 40 45 50

0

5

10

15

20

25

30

35

40

45

50

---- Osnovi na MatLab ----

106

So naredbata plot , iscrtani se kruk~iwa, na mestata so koordinati x ( vtorata kolona na matricata SiO2(:,2), i y ( tretata kolona na matricata SiO2(:,3)). Naredbata axis('ij') gi opredeluva nasokite na x oskata ( od levo prema desno ) i y oskata ( od gore prema dole). Mo`nostite na plot , axis i drugi naredbi so koi se definira izgledot kako i koi podatoci }e bidat ispe~ateni na grafikonot, se golemi, no sepak ostavame na studentot da sam gi prou~i istite i da go zbogati gorniot grafik so drugi informacii.

Od rasporedot na bu{otinite primetno e deka istite ne se postaveni ramnomerno

na terenot. Ako sakame da ja procenime vrednosta na SiO2 vo to~kite na pravilna mre`a so dimenzii 50mx50m, potrebno e da se koristime so metodata na diskretna interpolacija za to~kite kade ne postojat merni podatoci. Za taa cel treba i da se napi{e m-funkcija ( program) so koja }e se presmeta procenetata vrednost primenuvaj}i ja metodata na diskretna inperpolacija t.e. izrazot (**).

Najefikasen pristap pri pi{uvawe na programi e da se po~ne od poedina~ni slu~aevi i odkako takov program }e proraboti, postepeno da se obob{tuva. Vo konkretniot primer kako prva zada~a bi bila da se presmeta vrednosta vo samo edna to~ka.

Kako vtor ~ekor e definiraweto na vleznite i izleznite promenlivi. Trgnuvaj}i

od izrazot (**) proizleguva deka vleznite promenlivi ( podatoci) se koordinatite na bu{otinite i procentualnite vrednosti na SiO2, a toa e matricata SiO2. Potoa treba da se znaat koordinatite na to~kata ( x0) za koja vr{ime procenka. Isto taka potrebni podatoci se radiusot na vlijanie R i parametarot p koj se javuva vo izrazot (**). Kako izlez dovolna e samo edna promenliva i toa procenetata vrednost ( vrd ). Zna~i zaglavieto na funkcijata bi bilo:

function vrd = dinter(Data,x0,R,p) Vo tretiot ~ekor se pi{uva teloto t.e. programata na fukncijata. Samata programa

mo`e da e napi{ana na razli~it na~in od razli~ni programeri. Toa najmnogu zavisi od znaeweto na programskiot jazik, iskustvoto, poznavawe na problemot i mo`nostite na smeta~ot. Toa isto taka zavisi i od potrebata za brzina, efikasnost i celta. Taka na primer programot koj podolu e daden ima za cel programski da ja ilustrira metodata na diskretna interpolacija kako i mo`nostite na Matlabot. Glavnata cel ne e da istiot bide brz i efikasen t.e. da najde nekoja pogolema primena iako istiot mo`e da se iskoristi vo ramkite na re{avawe na pogolemi problemi. Onoa {to im e zaedni~ko na site programi e da presmetat to~ni rezultati.

Eden od mo`nata realizacija na programot ( funkcijata ) za diskretna

interpolacija daden e podolu. Nie istiot program }e go proanalizirame red po red so cel da gi istakneme svojstvata na MatLabot koi ne postojat kaj drugite programski jazici a ja zgolemuvaat efikasnosta i ednostavnosta pri programiraweto.

function vrd = dinter(Data,x0,R,p) %------------------------------ % Diskretna interpolacija % Velez: % Data : empiriski podatoci % x0 : tocka za koja se vrsi procenka % R : radius na vlijanie % p : stepen na interpolacija % Izlez: % vrd : presmetana vrednost na interpolacija vo tockata x0 %--------------------------- x=Data(:,2)- x0(1); %1 y = Data(:,3)-x0(2); ` %2 val = Data(:,4); %3 dist = sqrt(x.^2+y.^2); %4 %----------------------------

---- Osnovi na MatLab ----

107

% najdi dali tockata x0 se poklopuva so mernite tocki % elem_zero = find(dist == 0); %5 if(length(elem_zero) ~= 0) %6 vrd = val(elem_zero); %7 break %8 end %9 %------------------------------- Less_then_R = find( dist <= R); %10 dist = dist(Less_then_R); %11 val = val(Less_then_R); %12 v = (1./dist).^p; %13 vrd = sum(val.*v)/sum(v); %14 % kraj na funkcijata za diskretna interpolacija • So prvite tri naredbi 2-ta, 3-ta i 4-ta kolona na vleznata matrica se prepi{uvaat

vo posebni vektor koloni x, y i val, pri {to od koordinatite na mernite to~ki se odzemaat koordinatite na to~kata za procenka za da mo`e podocna da se presmeta rastojanieto. Pri toa se koristi mo`nosta na MatLabot za vektorski presmetki. Vo drugite klasi~ni jazici ovie presmetki bi se realizirale koristej}i for ili do ciklusi. Istiot pristap mo`no e da se realizira i vo MatLabot so slednive naredbi:

[n,m] = size(Data); for i = 1:n

x(i) = Data(i,2)-x0(1); y(i) = Data(i,3)-x0(2); val(i) = Data(i,4);

end • Istiot slu~aj se javuva i vo 4-tata naredba. Povtorno ako se koristi klasi~en

pristap so ciklusi naredbite koi bi ja vr{ile istata presmetka bi bile:

for i = 1:n dist(i) = sqrt( x(i)^2+y(i)^2); end

Od gornite naredbi se gleda deka dist e vektor-kolona ~ii elementi se

rastojanijata do 1-ta, 2-ta,..., n-tata merna to~ka . Ovoj fakt mo`ebi nee tolku uo~liv vo vektorska notacija no so vreme i podolgo iskustvo so programiraweto studentite }e se steknat so toa soznanie.

• So naredbite 5, 6, 7, 8 i 9 se vr{i kontrola dali nepoznata to~ka x0 se poklopuva

so nekoja merna to~ka? Vo takov slu~aj edno od rastojanijata e nula pa podocna nema da mo`e da se deli vo soglasnost so izrazot (**). Za taa cel, koga nepoznata to~ka se poklopuva so edna od mernite to~ki, vrednosta na SiO2 direktno se prepi{uva kako vrednsot na to~kata. Programski toa e realizirano so koristewe na naredbata find(dist== 0), koja kako rezultat gi dava mestata na vektorot dist ~ii vrednsoti se nula. Indeksite na tie mesta se pametat vo promenlivata elem_zero. Ako dol`inata t.e. brojot na elementite na vektorot elem_zero ne e nula ( naredba 6 ) toa zna~i deka nepoznata to~ka se poklopuva so edna od mernite to~ki, toga{ kako vrednost na procentot na SiO2 vo to~kata x0 se zema vrednosta na mernata to~ka so koja se poklopuva ( naredba 7), i programot tuka zavr`uva ( naredbata break ). Kako i porano i ovoj del na programot mo`e da se napi{e so koristewe na ciklusi.

for i = 1:n

if(dist(i) ~= 0) vrd = val(i) break end

---- Osnovi na MatLab ----

108

end

• So naredbata 10, se opredeluvaat onie to~ki koi imaat rastojanie pomalo od radiusot na vlijanie R. Ideksite na tie to~ki se pamentat vo promenivata vektor-kolona Less_then_r. Ovoj vektor se koristi vo naredbite 11 i 12 za da se rearan`iraat vektorite dist i val na na~in da vektorite gi sodr`at samo to~kite koi se vo ramkite na redijusot na vlijanie. Povtorno, ako se koristat ciklusi programot bi bil:

k = 0; for i=1:n

if (dist(i) <= R) dist(k) = dist(i); val(k) = val(i); k = k+1; end

end

• Na kraj se naredbite 13 i 14 se vr{at kone~nite presmetki. So naredbata 14 se

presmetuva ili programira izrazot p

nmL)1(

,

, za sekoja to~ka a so naredbata 15 se

presmetuva kone~nata vrednost vrd, vo soglasnot so izrazot.

p

nm

p

n

p

n

p

nmm

p

n

p

nn

LLL

LU

LU

LU

U)1(...)1()1(

)1(...)1()1(

,,2,1

,,22

,11

+++

+++

=

I ove dve naredbi mo`at da se reliziraat so ciklusi.

n = length(x); sum1 = 0.; sum2 = 0;

for i=1:n dst =dist(i); dst = (1/dst)^p; sum1 = sum1 +val(i)*dst; sum2 = sum2 = dst; end

vrd = sum1/sum2; Zavr{uvaj}i ja ovaa analiza, im se prepora~uva na studentite vnimatelno i

nekolku pati da go proanaliziraat programot so toa {to }e formirat nova m-funkcijska datoteka koja koristi ciklusi, koristej}i gi pogore napi{anite segementi, i potoa da gi sporedat dvete verzii na funkcii. Vo sekoj slu~aj onoa {to mo`e da se vidi na prv pogled e daleku pogolem broj na naredbi koristej}i ciklusi od kolku vo slu~aj koga se koristat mo`nostite i specifi~nostite na samiot MatLab.

Sega, otkako ja imame funkcijata dinter mo`eme da ja iskoristime za presmetka na

procentualna zastapenost na SiO2 vo edna to~ka. >> x0 = [ 23 30 ]; >> R = 70; >> p = 2; >> SiO2; >> vrd = dinter(SiO2,x0,R,p) vrd = 94.2908

---- Osnovi na MatLab ----

109

>> p=3; >> vrd = dinter(SiO2,x0,R,p) vrd = 93.7313 >> x0 = [7 20]; >> vrd = dinter(SiO2,x0,R,p) vrd = 94.2733

Sledniot ~ekor e pi{uvawe na m-skript datoteka so koja automatski }e se presmetaat vrednostite vo to~kite na zadadena mre`a.

m-skript: diskret_tst.m

x = 1:50; y = 1:50; n = length(x); A = zeros(n,n); for i = 1:n x0(1) = x(i); for j = 1:n x0(2) = y(j); A(i,j) = dinter(SiO2,x0,R,p); end end

So datotekata diskret_tst.m se definiraat x i y koordinati na to~kite za koi

sakame da ja procenime vrednosta na SiO2. Rezultatite se pomnat vo matricata A otkako vrednostite }e se presmetaat so m-funkcijata dinter.

Slednive naredbi poka`uvaat kako da se koristi diskret_tst.m.

>> SiO2; % se citaat podatocite >> R = 70; %se definira radiusot na vlijanie >> p = 3; %se definira parametarot p >> diskret_tst % se povikuva diskret_tst skript fajlot za presmetka

Studentite mo`at da ja ispe~atat matricata A, za da se uverat deka istata e

presmetana i se nao|a vo rabotniot prostor. No bidej}i istata e od red 50x50 nie tuka samo }e go proverime nejziniot red, kako i vrednosta na to~kata so koordinati ( 8,18), koja iznesuva 94.3 bidej}i taa to~ka e i vlezen podatok.

>> size(A), A(8,18) ans = 50 50 ans = 94.3000

No zatoa mo`eme da gi iscrtame konturite na vrednostite na SiO2.

>> lb = 86:98; >> cs= contour(A,lb); >> clabel(cs,lb)

---- Osnovi na MatLab ----

110

So naredbata lb = 86:98, se formira vektor na vrednostite na konturnite linii. naredbata cs= contour(A,lb)gi presmetuva to~kite koi le`at na ista kontura definirani so vektorot lb i pri toa gi iscrtuva. So naredbata clabel(cs,lb)se numeriraat t.e. odbele`uvaat konturite. Rezultatot e prika`an na slikata.

5 10 15 20 25 30 35 40 45 50

5

10

15

20

25

30

35

40

45

50

8788

8

9091

92

93

93

93

94

94

94

94

94

95

95

9

95

95

95

95

9

96

9696

96

96

96

97

97

97 97

97

Na studentite im se prepora~uva da probaat pove}e kombinacii na R i p i da go

analiziraat nivnoto vlijanie na kone~niot rezultat. Druga mo`nost so koja raspolaga MatLabot e tridimenzionalna prezentacija na

matricata A kako povr{ina vo prostor.

>> mesh(x,y,A)

---- Osnovi na MatLab ----

111

Na kraj }e ja obop{time m-funkcijata dinter so toa {to za izlez }e se dobie

matricata na procenetite vrednosti t.e. na diskretnata interpolacija. datoteka: dinter_mat

function S = dinter_mat(Data,x0,R,p) %------------------------------ % Diskretna interpolacija % Velez: % Data : empiriski podatoci % x0 : tocka za koja se vrsi procenka % R : radius na vlijanie % p : stepen na interpolacija % Izlez: % S : NxN matrica na presmetana vrednost na interpolacija % vo tockite opredeleni so Nx2 matricata x0, kade prvata kolona % gi sodrzi x-koordinatite a 2-ta kolona y-koordinatite %--------------------------- [n,m] = size(x0); n = max(n,m); S = zeros(n,n); for i = 1:n x1 = x0(i,1); for j = 1:n y1 = x0(j,2); x = Data(:,2)- x1; y = Data(:,3)- y1; val = Data(:,4); dist = sqrt(x.^2+y.^2); %---------------------------- % najdi dali tockata x0 se poklopuva so mernite tocki % elem_zero = find(dist == 0); if(length(elem_zero) ~= 0) vrd = val(elem_zero); S(i,j) = vrd; else %------------------------------- Less_then_R = find( dist <= R); dist = dist(Less_then_R); val = val(Less_then_R); v = (1./dist).^p; vrd = sum(val.*v)/sum(v); S(i,j) = vrd; end end end % kraj na funkcijata za diskretna interpolacija

Koristeweto na funkcijata mo`e da bide na sledniot na~in.

>> SiO2; % se citaat podatocite >> R = 70; %se definira radiusot na vlijanie >> p = 3; %se definira parametarot p >> x = 1:50;y = 1:50; % se definiraat x i y kordinati >> x0 = [x',y']; % se opredeluva x0 matricata >> S = dinter_mat(SiO2,x0,R,p);

---- Osnovi na MatLab ----

112

Proverka na rezultatite kako i sporedba so prethodnite rezultati mo`no e da se napravi grafi~ki.

>> lb = 86:98; >> cs= contour(S,lb); >> clabel(cs,lb)

5 10 15 20 25 30 35 40 45 50

5

10

15

20

25

30

35

40

45

50

8

8889

90

91

92

93

93

93

94

94

94

94

94

95

95

9

95

95

95

95

9

96

96

96

96

96

96

97

97

97 97

97

>> mesh(x,y,S)

Sporedba na soodvetnite sliki za matricata A, presmetana so skript datoteka diskret_tst i matricata S, presmetana so funkcijata dinter_mat poka`uva deka rezultatite se identi~ni. I tie mora da se identi~ni.

---- Osnovi na MatLab ----

113

7.1 ^itawe ( vnesuvawe) na podatoci Vo prethodniot primer podatocite bea vneseni vo rabotniot prostor na MatLabot

preku m-skript datotekata SiO2.m. Vsu{nost, ni{to drugo nee napraveno osven {to matricata SiO2 e celosno iskucana vo datotekata kako MatLab naredba. Sekako, ovoj pristap mo`e da bide koristen samo ako nie inicijalno sami gi vnesuvame podatocite. No naj~esto podatocite se nao|aat ve}e zapi{ani vo fajl smesten na diskot kako rezultat ili na presmetki napraveni so drug program ili sobrani vo tek na samiot eksperiment.

Za ~itawe na takvi datoteki, MatLabot ima svoi vgradeni funkcii ~ija sintaksa e

sli~na pa duri ista kako i funkcii za ~itawe koi se koristat vo C jazikot. No pred da se po~ne so ~itawe na datoteka prvo treba da se otvori istata. Toa se pravi so naredbata

fid = fopen('ime_na_fajlot', dozvola) kade:

fid e broj koj se koristi kako identifikator na fajlot pri negovata obrabotka.

ime_na_fajlot e ime na datotekata. dozvola e dozvolen tip na pristap i obrabotka na fajlot. Toa mo`e da bide: 'r' ~itawe 'w' pi{uvawe (ako ne postoi fajlot se kreira) 'a' pi{uvawe dodavaj}i na krajot (ako ne postoi fajlot se kreira) 'r+' ~itawe i pi{uvawe ^itaweto na formatirani podatoci se realizira so naredbata fscanf. [A,COUNT] = FSCANF(fid,FORMAT,SIZE) kade e: fid identifikator na fajlot FORMAT e niza na karakteri so koi se specificira formatot na ~itawe na

podatocite.

%f za realni broevi %d za celobrojni broevi %c za karakter %s za niza na karakteri

pri toa separator pome|u broevite e prazno mesto ( blank) ili zapirka. SIZE e opcionalen; go opredeluva brojot na podatocite koi mo`at da se pro~itat od

fajlot; ako nee specificiran celiot fajl se ~ita;ako e specificiran korektnite vrednosti se:

N se ~ita najmnogu N podatoci i se zapi{uvaat vo vektor-kolona; inf se ~ita do kraj na fajlot. Isto taka se zapi{uvaat vo vektor-kolona. [M,N] se ~ita najmnogu M*N podatoci i se zapi{uvaat vo MxN matricata A.

Pri toa se polni matricata po koloni. Toa zna~i deka prvo se popolnuva 1-ta kolona pa 2-ta i t.n.

Sege mo`eme podatocite za SiO2, da gi pro~itame od fajlot silic.dat vo koj se

zapi{ani podatocite. Na studentite im se prepora~uva da so obi~en editor go otvorat fajlot i ja ispitaat negovata forma i sodr`ina.

---- Osnovi na MatLab ----

114

>> br_fajl = fopen('silic.dat','r') >> [S,count]=fscanf(br_fajl,'%f',[4,35]); >> count >> S = S';

>> fclose(fid); br_fajl = 3 count = 140

So prvata naredba se otvara fajlot so identifikacioniot broj br_fajl ~ija vrednost e 3.

Vo vtorata naredba od fajlot so broj br_fajl se ~itaat podatocite so %f format ( format za realni broevi) i se popolnuva matricata S so red 4x35.

So tretata naredba se ispi{uva vrednosta na count, vkupniot broj na pro~itani podatoci, i toj iznesuva 4*35=140.

Potoa matricata S se transponira i na toj na~in se dobivaat podatocite vo matri~na forma kakva e potreba za koristewe na programite za diskretna interpolacija. Treba da se napomene deka transponiraweto na S nee e standarden del od naredbite za ~itawe. Vo konkretniot primer na diskretna interpolacija na{ite podatoci se zapi{ani vo forma na matrica od redot 35x4, pa zatoa za da se dobie matricata se vr{i transponirawe na pro~itanata matrica.

So poslednata naredba se zatvara fajlot i se osloboduva identifikacioniot broj. Se prepora~uva ovaa naredba sekoga{ da se upotrebuva odkako prestanuva potrebata od fajlot.

Za proverka mo`eme da ja ispi{e matricata S. >> S

S = 1.0000 8.0000 2.0000 93.2000 2.0000 16.0000 2.0000 93.5000 3.0000 24.0000 2.0000 94.2000 4.0000 32.0000 2.0000 94.0000 5.0000 8.0000 10.0000 93.0000 6.0000 16.0000 10.0000 94.2000 7.0000 24.0000 10.0000 95.0000 8.0000 32.0000 10.0000 95.0000 9.0000 40.0000 10.0000 97.0000 10.0000 8.0000 18.0000 94.3000 11.0000 16.0000 18.0000 95.0000 12.0000 24.0000 18.0000 95.0000 13.0000 32.0000 18.0000 96.0000 14.0000 40.0000 18.0000 95.4000 15.0000 48.0000 18.0000 92.0000 16.0000 8.0000 26.0000 93.5000 17.0000 16.0000 26.0000 95.0000 18.0000 24.0000 26.0000 95.0000 19.0000 32.0000 26.0000 97.0000 20.0000 40.0000 26.0000 96.0000 21.0000 48.0000 26.0000 92.0000 22.0000 8.0000 34.0000 94.0000 23.0000 16.0000 33.0000 96.0000 24.0000 24.0000 34.0000 95.4000 25.0000 32.0000 34.0000 96.4000 26.0000 4.0000 38.0000 94.2000 27.0000 16.0000 42.0000 97.0000 28.0000 24.0000 38.0000 95.0000 29.0000 32.0000 42.0000 97.0000 30.0000 40.0000 38.0000 97.0000 31.0000 24.0000 50.0000 96.0000 32.0000 32.0000 50.0000 95.0000 33.0000 40.0000 50.0000 86.0000 34.0000 23.0000 44.0000 95.0000

35.0000 20.0000 30.0000 92.0000