You are on page 1of 114

---- Osnovi na MatLab ----

OSNOVI NA

MatLab
so
PRIMERI

Qup~o Jordanovski

1
---- Osnovi na MatLab ----

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

2
---- Osnovi na MatLab ----

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

3
---- Osnovi na MatLab ----

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.

4
---- Osnovi na MatLab ----

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

5
---- Osnovi na MatLab ----

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

6
---- Osnovi na MatLab ----

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)

7
---- Osnovi na MatLab ----

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

8
---- Osnovi na MatLab ----

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 exp( x ) = e


x
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

9
---- Osnovi na MatLab ----

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

10
---- Osnovi na MatLab ----

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{:

11
---- Osnovi na MatLab ----

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

12
---- Osnovi na MatLab ----

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

⎡ v1 ⎤
⎢v ⎥
r ⎢ ⎥
2
r
u = (u1 , u 2 ,...u n ) v=⎢.⎥
⎢ ⎥
⎢.⎥
⎢⎣v5 ⎥⎦

rr n
u v = ∑ u i vi
1

na primer ako se:

⎡ 20 ⎤
u = (10,−11,12) a v = ⎢ − 21⎥⎥
r r ⎢

⎢⎣− 22⎥⎦

toga{

13
---- Osnovi na MatLab ----

rr
u v = 10 × 20 + (−11) × (−21) + 12 × (−22) = 167

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.


r
Pod Euklidova norma ili dol`ina na vektor koja se odbele`uva so simbolot u se
podrazbira broj koj se presmetuva so formulata.

n
r
∑u
2
u = i
1
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.

14
---- Osnovi na MatLab ----

Zada~a:

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

x ′y
cosθ = r r
x y

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


r r
x = [1,2,3]′ i y = [3,2,1]′

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:
rr
u v = [u1v1 , u 2 v 2 ,...., u n v n ]

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 y = x sin(πx) 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)

15
---- Osnovi na MatLab ----

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

16
---- Osnovi na MatLab ----

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:

sin(πx)
lim
x −0 x
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

17
---- Osnovi na MatLab ----

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 y = sin(3πx) za 0 ≤ x ≤ 1 .


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)

18
---- Osnovi na MatLab ----

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

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

Slika 1: Grafik na y = sin(3πx) 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.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

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

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

Kako rezultat se dobiva gafikon so pogladka kriva.

19
---- Osnovi na MatLab ----

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

20
---- Osnovi na MatLab ----

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


>> grid

Multi-plot
1
Sin kriva
0.8 Cos kriva

0.6

0.4

0.2
y ax is

-0.2

-0.4

-0.6

-0.8

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

Slika 3: Grafik na y = sin(3πx) i y = cos(3πx) 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')

21
---- Osnovi na MatLab ----

1 1

0.5 0.5

c os 3 pi x
s in 3 pi x
0 0

-0.5 -0.5

-1 -1
0 0.5 1 0 0.5 1
x x
1 1

0.5 0.5
s in 6 pi x

c os 6 pi x
0 0

-0.5 -0.5

-1 -1
0 0.5 1 0 0.5 1
x 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.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1

-0.5 0 0.5 1 1.5

Slika 4: Efektot na promena na intervalot na oskite

22
---- Osnovi na MatLab ----

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

⎡5 7 9 ⎤
A=⎢ ⎥
⎣1 − 3 − 7⎦
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

23
---- Osnovi na MatLab ----

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

24
---- Osnovi na MatLab ----

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 =

25
---- Osnovi na MatLab ----

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.

26
---- Osnovi na MatLab ----

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

27
---- Osnovi na MatLab ----

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:

28
---- Osnovi na MatLab ----

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

29
---- Osnovi na MatLab ----

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.
r
Ax mno`ewe na matrica so vektor od desno i
v
xA mno`ewe na matrica so vektor od levo.
r
Naj~esto se sre}ava na mno`ewe od desno, Ax 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.

30
---- Osnovi na MatLab ----

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

31
---- Osnovi na MatLab ----

1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 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 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
1 1

0 0

-1 -1
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1

32
---- Osnovi na MatLab ----

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

f n = f n −1 + f n − 2 za n = 3,4,5.....

Testiraj dali odnosot f n / f n −1 se dobli`uva do vrednosta na zlatniot rez


( 5 + 1) / 2 = 1.618

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

1.9

1.8

1.7

1.6

1.5

1.4

1.3

1.2

1.1

1
0 2 4 6 8 10 12 14 16 18 20

33
---- Osnovi na MatLab ----

primer: Presmetaj gi vrednostite na slednive sumi.

1 1 1 1
S 20 = 1 +2
+ 2 + 2 + ..... 2
2 3 4 20
1 1 1 1 1
S 21 = 1 + 2 + 2 + 2 + ..... 2 + 2
2 3 4 20 21
.
.
.
1 1 1 1 1 1
S100 = 1 + 2
+ 2 + 2 + ..... 2 + 2 + ...... +
2 3 4 20 21 100 2
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

1.7

1.68

1.66

1.64

1.62

1.6

1.58

1.56

1.54

1.52

1.5
20 30 40 50 60 70 80 90 100

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

34
---- Osnovi na MatLab ----

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.

35
---- Osnovi na MatLab ----

& 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,

36
---- Osnovi na MatLab ----

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.

37
---- Osnovi na MatLab ----

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


>> plot(x,y,':',x,Y,'-')

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6

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

S = 12 + 2 2 + ..... + n 2
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

38
---- Osnovi na MatLab ----

x n = cos( x n −1 ) 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

39
---- Osnovi na MatLab ----

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

40
---- Osnovi na MatLab ----

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:

a+b+c
A = s( s − a)( s − b)( s − b) kade s=
2
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

41
---- Osnovi na MatLab ----

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

Crtez na fukcija
1
matematicka kriva
0.8

0.6

0.4

0.2
y -os k a

-0.2

-0.4

-0.6

-0.8

-1
-4 -3 -2 -1 0 1 2 3 4
x-oska

ili isto taka

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

42
---- Osnovi na MatLab ----

Crtez na fukcija
1
matematicka kriva
0.9

0.8

0.7

0.6
y -os k a

0.5

0.4

0.3

0.2

0.1

0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
x-oska

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)

43
---- Osnovi na MatLab ----

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

44
---- Osnovi na MatLab ----

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,

f1 = 0, f 2 = 1, f n = f n −1 + f n − 2 n=3,4,5.....

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

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

45
---- Osnovi na MatLab ----

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

46
---- Osnovi na MatLab ----

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)

47
---- Osnovi na MatLab ----

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

48
---- Osnovi na MatLab ----

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

49
---- Osnovi na MatLab ----

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

50
---- Osnovi na MatLab ----

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

0.8

0.6

0.4

0.2

-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

51
---- Osnovi na MatLab ----

0.8

0.6

0.4

0.2

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

52
---- Osnovi na MatLab ----

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

f ( x, y ) = ( x − 3) 2 − ( y − 2) 2
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)

53
---- Osnovi na MatLab ----

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

Saddle

0.5

-0.5

-1
3
2.5 4
2 3.5
3
1.5
2.5
y 1 2
x

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
+ y2 )
f = − xye −2 ( x

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

54
---- Osnovi na MatLab ----

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

55
---- Osnovi na MatLab ----

1.5

0.5 Maximum

0
y

-0.5 Maximum

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x

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.

56
---- Osnovi na MatLab ----

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

57
---- Osnovi na MatLab ----

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

58
---- Osnovi na MatLab ----

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:
1 1
f ( x) = + −6
( x − 0.3) + 0.01 ( x − 0.9) 2 + 0.04
2

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

59
---- Osnovi na MatLab ----

100

80

60

40

20

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

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

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

1.5

0.5

-0.5

-1

-1.5

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

No mo`no e i slednoto

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

60
---- Osnovi na MatLab ----

100

80

60

40

20

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

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.

61
---- Osnovi na MatLab ----

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.

x(t ) = sin(2t ) y (t ) = cos(t ) z (t ) = t


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

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

10

0
1
0.5 1
0 0.5
0
-0.5
-0.5
-1 -1

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


0
4 cos 2 (2t ) + sin 2 (t ) + 1dt

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


hcurve.m.

fajl E:\mat-vezbi\hcurve.m

62
---- Osnovi na MatLab ----

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 (

63
---- Osnovi na MatLab ----

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,

64
---- Osnovi na MatLab ----

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

65
---- Osnovi na MatLab ----

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.

66
---- Osnovi na MatLab ----

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.

67
---- Osnovi na MatLab ----

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

68
---- Osnovi na MatLab ----

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 polinomot 1

p ( x) = x 3 − 2 x − 5

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

69
---- Osnovi na MatLab ----

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 matricata 2

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

70
---- Osnovi na MatLab ----

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:

a ( s ) = s 2 + 2 s + 3 i b( s ) = 4 s 2 + 5s + 6

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

71
---- Osnovi na MatLab ----

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

500

450

400

350

300

250

200

150

100

50

0
1 1.5 2 2.5 3 3.5 4 4.5 5

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

72
---- Osnovi na MatLab ----

1.6

1.5

1.4

1.3

1.2

1.1

0.9
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

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 promenliva 3.
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 matrica 4. 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

73
---- Osnovi na MatLab ----

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

f ( x) = 2 x 2 + 4 x − 5

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

35

30

25

20

15

10

-5
0 0.5 1 1.5 2 2.5 3 3.5

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

74
---- Osnovi na MatLab ----

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 1 5.

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

75
---- Osnovi na MatLab ----

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

1.2

0.8

0.6

0.4

0.2

-0.2

-0.4
0 0.5 1 1.5 2 2.5 3

76
---- Osnovi na MatLab ----

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 razliki 6.

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 Δk f (x) ( 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 1 7:
6
Vidi del 1.5 vo predavawata za vtoriot semestar

77
---- Osnovi na MatLab ----

>> 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 2 8:

>> 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 limes 9.
Δf f ( x 0 − h) − f ( x 0 + h)
f ′( x0 ) = lim = lim
Δx →0 Δx h→0 2*h

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

78
---- Osnovi na MatLab ----

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

79
---- Osnovi na MatLab ----

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)

80
---- Osnovi na MatLab ----

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 red 10.

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

primer 11

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

81
---- Osnovi na MatLab ----

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

primer 13

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

integral =
1.7950

primer 14

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

82
---- Osnovi na MatLab ----

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~nost 15. 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

83
---- Osnovi na MatLab ----

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
faktori 16. 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

84
---- Osnovi na MatLab ----

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

85
---- Osnovi na MatLab ----

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

primer:

2x1 + x2 = 4
x1 - x2 = -1

ili
⎡2 1 ⎤ ⎡ x1 ⎤ ⎡ 4 ⎤
Ax = b t.e ⎢1 − 1⎥ ⎢ x ⎥ = ⎢− 1⎥
⎣ ⎦⎣ 2 ⎦ ⎣ ⎦

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:

x = A −1b 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)

86
---- Osnovi na MatLab ----

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

87
---- Osnovi na MatLab ----

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

88
---- Osnovi na MatLab ----

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 metodi 17. 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

89
---- Osnovi na MatLab ----

-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

90
---- Osnovi na MatLab ----

% [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

primer 19:

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

91
---- Osnovi na MatLab ----

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

92
---- Osnovi na MatLab ----

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

93
---- Osnovi na MatLab ----

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 =

94
---- Osnovi na MatLab ----

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
aproksimacijata 20, 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 y = ( y1 , y 2 ,...., y n ) koi soodvestvuvaat na


mernite mesta ili to~ki x = ( x1 , x 2 ,..., x n ) .Polinomnata regresija se sostoi vo
opredeluvaweto na koeficientite na polinomot

p ( s) = a k x k + a k −1 x k −1 + .... + a1 x + a 0

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.

95
---- Osnovi na MatLab ----

S = ∑ j =1 ( p( x j ) − y j ) 2
n

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


sistem na ravenki.
⎡ y1 ⎤
⎢ y ⎥
⎡ ak ⎤ ⎢ 2 ⎥
⎢a ⎥ ⎢ y3 ⎥
⎢ k −1 ⎥ ⎥
'⎢
A A⎢ . ⎥ = A ⎢ . ⎥
'

⎢ ⎥ ⎢ . ⎥
⎢ a1 ⎥ ⎢ ⎥
⎢⎣ a 0 ⎥⎦ ⎢ y n −1 ⎥
⎢y ⎥
⎣ n ⎦

kade matricata A e od oblik:

⎡ x1k x1k −1 . x1 1⎤
⎢ k ⎥
⎢ x2 x 2k −1 . x2 1⎥
⎢ x3k . x3k −1 . x3 1⎥
⎢ ⎥
A=⎢ . . . . .⎥
⎢ . . . . .⎥
⎢ k ⎥
⎢ x n −1 x nk−−11 . x n −1 1⎥
⎢ xk
⎣ n x nk −1 . x n 1⎥⎦

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;

96
---- Osnovi na MatLab ----

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:

p( x) = 1.3929 x + 1.8214

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)

97
---- Osnovi na MatLab ----

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

11

10

1
0 1 2 3 4 5 6 7

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)

98
---- Osnovi na MatLab ----

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.

f ( x) = a k q k ( x) + a k −1 q k −1 ( x) + .... + a1 q1 ( x)

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.

⎡ q k ( x1 ) q k −1 ( x1 ) . q 2 ( x1 ) q1 ( x1 ) ⎤
⎢ q (x )
⎢ k 2 q k −1 ( x 2 ) . q2 ( x2 ) q1 ( x 2 ) ⎥⎥
⎢ q k ( x3 ) q k −1 ( x3 ) . q 2 ( x3 ) q1 ( x3 ) ⎥
⎢ ⎥
A=⎢ . . . . . ⎥
⎢ . . . . . ⎥
⎢ ⎥
⎢q k ( x n −1 ) q k −1 ( x n −1 ) . q 2 ( x n −1 ) q1 ( x n −1 )⎥
⎢ q (x )
⎣ k n q k −1 ( x n ) . q2 ( xn ) q1 ( x n ) ⎥⎦

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.

f ( x) = a1 q1 ( x) kade q1 ( x) = e bx

99
---- Osnovi na MatLab ----

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.

ln( f ( x)) = ln a1 + bx
ili napi{ano vo prepoznatliva forma:

y = c + bx kade y = ln( f ( x)) a c = ln(a1 )

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 0.5 1 1.5 2 2.5 3

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

100
---- Osnovi na MatLab ----

>> 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 0.5 1 1.5 2 2.5 3

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.

101
---- Osnovi na MatLab ----

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.

1 p 1 p 1 p
U1 ( ) +U2( ) + ... + U m ( )
L1,n L2 , n Lm , n
Un = (**)
1 p 1 p 1 p
( ) +( ) + ... + ( )
L1,n L2 , n Lm , n

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:

1 1
U1 + U 2 ( ) p + ... + U m ( )p
L2,n / L1,n Lm ,n / L1,n
Un =
1 1
1+ ( ) p + ... + ( )p
L2,n / L1,n Lm ,n / L1,n

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
1
vlijanieto na ostanatite to~ki e pomalo i zavisi od vrednosta na izrazot ( ).
Lk ,n / L1,n
1
Vrednosta ( ) mo`e da e dovolno mala taka da doprinosot na Uk ima
Lk ,n / L1,n
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

102
---- Osnovi na MatLab ----

1
za pove}e vrednosti na p, pri {to L = ( Lk ,n / L1,n ) , k =
p
prika`ana e funkcijata ( )
L
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,'--')

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
1 2 3 4 5 6 7 8 9 10

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,
1
mo`eme da gi otfrlime onie to~ki za koi e ( ) p ( k = 1,2,...,m) e pomalo
Lk ,n / L1,n
od 0.01.

Eksperimentalen primer 22:

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.

103
---- Osnovi na MatLab ----

Tabela: Elementi na bu{otinite:


x i y koordinati i procentualna sodr`ina na SiO2

reden broj na x y SiO2 (%)


bu{orina
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
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

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

104
---- Osnovi na MatLab ----

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

10

15

20

25

30

35

40

45

50
0 5 10 15 20 25 30 35 40 45 50

105
---- Osnovi na MatLab ----

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

106
---- Osnovi na MatLab ----

% 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

107
---- Osnovi na MatLab ----

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


1 p
presmetuva ili programira izrazot ( ) , za sekoja to~ka a so naredbata 15 se
Lm,n
presmetuva kone~nata vrednost vrd, vo soglasnot so izrazot.

1 p 1 p 1 p
U1 ( ) +U2( ) + ... + U m ( )
L1, n L2 , n Lm , n
Un =
1 p 1 p 1 p
( ) +( ) + ... + ( )
L1,n L2 , n Lm , n

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

108
---- Osnovi na MatLab ----

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

109
---- Osnovi na MatLab ----

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.

50

93 8
45 94 95
88
97 96 97 94 91 87
40 90
96 9392
96
35
96 97 97 9
30

25 95 95 9

94
20 93
95 95 96 97
15 95 96
94
10

5
94
5 10 15 20 25 30 35 40 45 50

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)

110
---- Osnovi na MatLab ----

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

111
---- Osnovi na MatLab ----

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)

50
94 95
96 93 90
45 94 8
97 96 97 939189
88
40 96
92
35
96 97 97 9
30

25 95 95 9
93
20
94
95 95 96 97
15 94
96
10 95

5 94

5 10 15 20 25 30 35 40 45 50

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

112
---- Osnovi na MatLab ----

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.

113
---- Osnovi na MatLab ----

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

114

You might also like