Sunteți pe pagina 1din 114

---- Osnovi na MatLab ----

OSNOVI NA

MatLab
so
PRIMERI

Qup~o Jordanovski

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

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

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

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

---- 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
1362, -217897
1.234, -10.76
3.21 - 4.3i ( i e imaginarna edinica)
Beskone~no, delewe so nula
Ne e broj , 0/0

Celobrojna
Realna
Kompleksna
Inf
NaN

Notacijata "e" se koristi za mnogu golemi ili mnogu mali brojki:


-1.3412e+03 = -1.3412x103 = -1341.2
-1.3412e-01 = -1.3412x10-1 = -0.13412
Site presmetki vo MatLab se izveduvaat so dvojna preciznost ( double precision
), {to zna~i so to~nost do 15-tata decimala. Formatot na koj na~in MatLab gi pe~ati
broevite se definira i se kontrolira so naredbata " format ".

---- Osnovi na MatLab ----

Komanda

Pe~aten primer
32.4162 ( 4 decimalni mesta )
3.1416e+01
3.141592653589793e+01
31.42( 2 decimalni mesta)

>> format short


>> format short e
>> format long e
>> format bank

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

6) 3*(3*4-2*5^2-3)

5) (2/3^2*5)(3-4^3)^2

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

sin
sinh
asin
asinh
cos
cosh
acos
acosh
tan
tanh
atan
atan2
atanh
coth

exp
log
log10
log2
pow2
sqrt
abs
angle
conj
imag
real
unwrap
isreal
fix
floor
ceil
round
mod
rem
sign

Trigonometric.
Sinus
Sinus hiperbolen
Arkus-sinus
Inverzen sinus hiperbolen
Cosine.
Hyperbolic cosine.
Inverse cosine.
Inverse hyperbolic cosine.
Tangent.
Hyperbolic tangent.
Inverse tangent.
Four quadrant inverse tangent.
Inverse hyperbolic tangent.
Hyperbolic cotangent.
Exponential.
Exponential.
Natural logarithm.
Common (base 10) logarithm.
Base 2 logarithm and dissect
floating point number.
Base 2 power and scale floating
point number.
Square root.
Complex.
Absolute value.
Phase angle.
Complex conjugate.
Complex imaginary part.
Complex real part.
Unwrap phase angle.
True for real array.
Rounding and remainder.
Round towards zero.
Round towards minus infinity.
Round towards plus infinity.
Round towards nearest integer.
Modulus (signed remainder after
division).
Remainder after division.
Signum.

Koristeweto na elementarnite funkcii e ednostavno i se sveduva na nivno


povikuvawe so naredba koja se ispi{uva na ist na~in kako i vo matematikata.
>> x = 5*cos(pi/6), y = 5*sin(pi/6)
x =
4.3301

---- Osnovi na MatLab ----

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
dodeka log(x) e
exp(x) ozna~uva eksponencijalna funkcija exp( 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.
x

5. Nizi ( Vektori )
Nizite odnosno vektorite mo`at da se definiraat na dva na~ina: kako vektor-red
ili vektor-kolona. Vektor-red e niza na broevi ~ii elementi se odvoeni ili so
zapirka ili so prazno mesto ( space). Brojot na elementite ja opredeluva dimenzijata
(dol`inata) na vektorot a elementite ~esto se narekuvaat i komponenti na vektorot.
Elementite mora da bodat zatvoreni so aglesti zagradi.
>> v = [1 3, sqrt(5)]
v =
1.0000
3.0000

2.2361

---- Osnovi na MatLab ----

>> 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
>> v4 = 3*v
v4 =
3.0000
9.0000
>> v5 = 2*v - 3*v
v5 =
-7.0000
-6.0000

7.2361

6.7082

-10.5279

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


>> w = [1
>> cd = [
>> sort (
w =
1
z =
8
cd =
16
ans =
-3

2 3], z = [8 9]
2*z, -w]
cd )
2

9
18

-1

-2

-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
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
ans =
-1.4000
-1.7000

0.5200
-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
2
r
v=.

.
v5

r
u = (u1 , u 2 ,...u n )

rr n
u v = u i vi
1

na primer ako se:

20
r
r
u = (10,11,12) a v = 21
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.

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


podrazbira broj koj se presmetuva so formulata.

r
u =

2
i

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
x = [1,2,3]

r
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


0.000
0.2500
0.5000
0.7500
1.0000

sin(x)
0.0000
0.7071
1.0000
0.7071
0.0000

xsin(x)
0.0000
0.1768
0.5000
0.5303
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
>> a./a
ans =
1

>> c = -2:2, a./c


c =
-2
-1
0

Warning: Divide by zero.


ans =
-0.5000
-2.0000

Inf

0.4444

0.5000

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

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:

lim
x 0

sin(x)
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(3x) 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,
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

,1-h,1. Soodvetnite

---- Osnovi na MatLab ----

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

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

y = sin(3x) za h = 0.1

Slika 1: Grafik na

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)

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

0.1

0.2

0.3

0.4

0.5

Slika 2: Grafik na

0.6

0.7

0.8

0.9

y = sin(3x) 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
y `olta
m magenta
c cijan
r crveno
g zelena
b plavo
w bela
k crna

Stil na linijata
. to~ka
o krug
x krst
+ plus
- polna linija
* zvezda
: dve to~ki
-. 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
Cos kriva

0.8
0.6
0.4

y ax is

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

0.1

0.2

0.3

Slika 3: Grafik na

0.4

0.5
x axis

0.6

0.7

0.8

0.9

y = sin(3x) i y = cos(3x) 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

0.5

0.5

0
-0.5
-1

s in 6 pi x

c os 3 pi x

0.5
x

0
-0.5
-1

0.5

0.5
c os 6 pi x

s in 3 pi x

---- Osnovi na MatLab ----

0
-0.5
-1

0.5
x

0.5
x

0.5
x

0
-0.5
-1

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)

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

0.5

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

9
5 7
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
6
7
8
9
11
13
15
17

5
10
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
6
11
ans =
1
2
3
4
5

2
7
13

3
8
15

6
7
8
9
10

11
13
15
17
19

4
9
17

5
10
19

>> size(D), size(D')


ans =

24

---- Osnovi na MatLab ----

ans =
5

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
-1
2
0
-1
>> S-St
ans =
0
0
0

0
0
0

0
-1
2

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
F =
0
1
8
3
-2
-4
4
2
1

2; 4 2 1 1]
7
2
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
>> G = [C x]
G =
0
1
8
3
-2
-4
4
2
1
>> A = [ 5 7 9; 1 -3
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

2]; x = [8;

-4; 1];

-7], B, H = [A;B]

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)
K =
1
0
0
0
2
0
0
0
3
0
0
0
1
5
9
2
6
10
3
7
11
4
8
12

J; J'
0
0
0
4
20
0
5
4

zeros(4,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 ----

0
1
2
3
4
5
6
7
8
9

4
5
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.
% tretata kolona se izdvojuva

>> J(:,3)
ans =
3
7
11
5

% kolonite 2 i 3 se izdvoeni

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

>> 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
A =
6
7
9
1
-3
-7

-7]

>> B = [ -1 2 5; 9 0 5]
B =
-1
2
5
9
0
5
>> A.*B
ans =
-6
9

14
0

45
-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
A =
5
7
9
1
-3
-7

-7]

>>B = [ 0, 1; 3, -2; 4,
B =
0
1
3
-2
4
2

2]

>> C = A*B
C =
57
9
-37
-7
>> D = B*
D =
1
-3
13
27
22
22

-7
41
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(nx) 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
1

-0.5

0.5

-1
-1
1

0
-1
-1
1

-0.5

0.5

-1
-1
1

0.5

-0.5

0.5

-0.5

0.5

-0.5

0.5

0
-0.5

0.5

-1
-1
1

0
-1
-1

0
-1
-1
1

-0.5

0
-0.5

0.5

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

-0.5

0.5

-1
-1
1

0
-1
-1
1

-0.5

0.5

-1
-1
1

0.5

-0.5

0.5

-0.5

0.5

-0.5

0.5

0
-0.5

0.5

-1
-1
1

0
-1
-1

0
-1
-1
1

-0.5

0
-0.5

0.5

-1
-1

32

---- Osnovi na MatLab ----

se crtaat funkciite sin(nx) i cos(nx), 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])

2
1.9
1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1
1

10

33

12

14

16

18

20

---- Osnovi na MatLab ----

primer: Presmetaj gi vrednostite na slednive sumi.

1
1
1
1
+ 2 + 2 + ..... 2
2
2
3
4
20
1
1
1
1
1
= 1 + 2 + 2 + 2 + ..... 2 + 2
2
3
4
20
21

S 20 = 1 +
S 21

.
.
.

S100 = 1 +

1
1
1
1
1
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);
%
S(20) = sum(1./(1:20).^2);
%
for n =21:100
%
S(n) = S(n-1) +1/n^2;
%
end
%
clf; plot([20:100],S(20:100),'.',[20 100],[1,1]*pi^2/6,'-') %
axis([20 100 1.5 1.7])
%
[(98:100)' S(98:100)]
%

ans =
98.0000
99.0000
100.0

1
2
3
4
5
6
7
8

1.6348
1.6349
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
x
x
x
x
x

dali x e ednakvo na 2 ?
dali x e razli~ito od 2?
dali x e pogolemo od 2?
dali x e pomalo od 2?
dali x e pogolemo ili ednakvo na 2?
dali x e pomalo ili ednakvo na 2?

== 2
~= 2
> 2
< 2
>= 2
<= 2

Rezultatot na ligi~noto
vistinito ili ne.

testirawe e 1 ili 0 vo zavisnost dali tvrdeweto e

>> 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
x =
-2.0000
-1.0000
>> x == 0
ans =
0
0

0
1

pi

5; -1

3.1416
0

1 ]

5.0000
1.0000

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

&
|
~
xor
any
all

Logi~no I ( AND )
Logi~no ILI ( OR )
Logi~na negacija NE ( NOT)
Logi~no XOR
Vistinito ako bilo koj element na vektorot ne e nula
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
1
1
0
0

A
1
1
0
0

B
1
0
1
0

A&B
1
0
0
0

A
1
1
0
0

B
1
0
1
0

A|B
1
1
1
0

A
1
0

~A
0
1

B
1
0
1
0

xor(A,B)
0
1
1
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
ans =
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
x =
-2.0000
-5.0000

pi

5; -5

3.1416
-3.0000

-3

-1]

5.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
-3.0000
L =
0
1
1
0
0
0
>> pos = x.*L
pos =
0
3.1416
0
0

5.0000
-1.0000

5.0000
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,'-')
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

11. While Ciklus ( Petqa)


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

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
Columns 8 through 14
0.7361
0.7411
0.7377
0.7400
Columns 15 through 20
0
0
0
0

0.7487

0.7326

0.7435

0.7385

0.7395

0.7388

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

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 =


situacija e :

< c =

e . Po~esta

>> 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 = s( s a)( s b)( s b) kade

s=

a+b+c
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 mfajlovite. 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

y -os k a

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

-3

-2

-1

0
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

y -os k a

0.6
0.5
0.4
0.3
0.2
0.1
0
-1

-0.8

-0.6

-0.4

-0.2

0
x-oska

0.2

0.4

0.6

0.8

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
x2
x3
x4

=
=
=
=

Fib1(10)
Fib2(10)
Fib3(10)
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
tic,x2
tic,x3
tic,x4

=
=
=
=

Fib1(20),toc
Fib2(20),toc
Fib3(20),toc
Fib4(20),toc

x1 =
4181
elapsed_time
x2 =
4181
elapsed_time
x3 =
4181
elapsed_time
x4 =
4181
elapsed_time

0.1700 sec

0 sec

31.8000 sec

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
x =
-3.1400
0
ans =
-3
0
>> fix(x)
ans =
-3

3.14

6.45

3.1400

9.75], round(x)
6.4500

10

9.7500

>> floor(x)

47

---- Osnovi na MatLab ----

ans =
-4

>> ceil(x)
ans =
-3
0

10

>> sign(x), rem(x,3)


ans =
-1
0
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
1
0
0

0
0
1

>> A*A' - S
ans =
1.0e-015 *
-0.2220
0
0
-0.2220
0
0.0555

0
0.0555
-0.2220

>> A'*A - S
ans =
1.0e-015 *
-0.2220
0
0
-0.2220
0
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],
x =
1.3000
-2.4000
ans =
2.3000
ans =
2.4000

max(x),
0

max(abs(x))
2.3000

>> [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
36
Columns 13 through 15
37
38
39

24

25

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

-0.8

-0.6

-0.4

-0.2

>> hold on, plot(x(k),y(k),'o')


>> km = find(x>0.5 & y < 0)
km =
32
33
34

51

0.2

0.4

0.6

0.8

26

27

---- Osnovi na MatLab ----

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

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

14.6 Funkcijata find za matrici


find funkcijata dejstvuva na dadena matrica na sli~en na~in kako i na vektor.
>> A = [ -2
A =
-2
0
6

3
5
8

4;
4
-1
0

-1

6;

1]

4
6
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
2
3

4
5
6

7
8
9

>> n = find(A <= 0)


n =
1
2
8
9
>> A(n)

52

10
11
12

---- 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
2.0000
2.5000
3.0000
2.0000
2.5000
3.0000
2.0000
2.5000
3.0000
2.0000
2.5000
3.0000
Y =
1.0000
1.0000
1.0000
1.5000
1.5000
1.5000
2.0000
2.0000
2.0000
2.5000
2.5000
2.5000
3.0000
3.0000
3.0000

3.5000
3.5000
3.5000
3.5000
3.5000

4.0000
4.0000
4.0000
4.0000
4.0000

1.0000
1.5000
2.0000
2.5000
3.0000

1.0000
1.5000
2.0000
2.5000
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

1
0.5
0
-0.5
-1
3
2.5

4
3.5

1.5
y

2.5
1

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

f = xye 2 ( x

+ y2 )

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

2
1.5
1

0.5

Maximum

0
Maximum

-0.5
-1
-1.5
-2
-2

-1.5

-1

-0.5

0
x

0.5

1.5

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
101
Column 13
101
>> name = char(name)
name =
Thomas R. Lee

97

115

32

82

Funkcijata char e obratna funkcija na funkcijata double.


Slednata naredba kreira dvo-dimenzionalna K-niza.

56

46

32

76

---- 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 MatLabot 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
B =
0
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

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

ima 10 elementi bidej}i se broi i decimalna to~ka kako

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:

f ( x) =

1
1
+
6
2
( x 0.3) + 0.01 ( x 0.9) 2 + 0.04

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

5])

59

---- Osnovi na MatLab ----

100

80

60

40

20

-20
-5

-4

-3

-2

-1

0.8

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


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

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

-0.8

-0.6

-0.4

-0.2

0.2

No mo`no e i slednoto
>> fplot('[2*sin(x+3), humps(x)]', [-5 5])

60

0.4

0.6

---- Osnovi na MatLab ----

100

80

60

40

20

-20
-5

-4

-3

-2

-1

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 )
za t [0,3 ] .

y (t ) = cos(t )

z (t ) = t

Tri dimenzionalen crte` na krivata e:


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

10
8
6
4
2
0
1
0.5

1
0.5

-0.5

-0.5
-1

-1

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


3

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.4524 0.2749; 0.0087 0.8075 0.888];

0.6512; 0.7599

Sega e mo`no da se naredbata,


>> matdat
>> A
A =
0.2113
0.0824
0.7599
0.0087

0.8098
0.9870
0.4524
0.8075

0.4832
0.6512
0.2749
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.0824
0.7599
0.0087

0.8098
0.9870
0.4524
0.8075

0.4832
0.6512
0.2749
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
2.3113851e-001
6.0684258e-001
4.8598247e-001

8.9129897e-001
7.6209683e-001
4.5646767e-001
1.8503643e-002

8.2140716e-001
4.4470336e-001
6.1543235e-001
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
matlab\ops
matlab\lang
matlab\elmat
matlab\elfun
matlab\specfun
matlab\matfun
matlab\datafun
matlab\polyfun
matlab\funfun
matlab\sparfun
matlab\graph2d
matlab\graph3d
matlab\specgraph
matlab\graphics
matlab\uitools
matlab\strfun
matlab\iofun
matlab\timefun
matlab\datatypes
matlab\winfun
DDE/ActiveX)
matlab\demos

General purpose commands.


Operators and special characters.
Programming language constructs.
Elementary matrices and matrix manipulation.
Elementary math functions.
Specialized math functions.
Matrix functions - numerical linear algebra.
Data analysis and Fourier transforms.
Interpolation and polynomials.
Function functions and ODE solvers.
Sparse matrices.
Two dimensional graphs.
Three dimensional graphs.
Specialized graphs.
Handle Graphics.
Graphical user interface tools.
Character strings.
File input/output.
Time and dates.
Data types and structures.
-Windows Operating System Interface Files
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
pascal
rosser
toeplitz
vander
wilkinson

Magic square.
Pascal matrix.
Classic symmetric eigenvalue test problem.
Toeplitz matrix.
Vandermonde matrix.
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

-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
dekonv
polyval
roots
poly
polyfit

mno`ewe na polinomi
delewe na polinomi
presmetuvawe na vrednosta na polinomot
opredeluvawe na nulite na polinomot
opredeluvawe na polinom ako se znaat nulite
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
>> p2 = poly(A)
>> r = roots(p2)
p2 =
1.0000
r =
-3.3683
-2.0647

5.4330

-0.433];

6.9545

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

r =
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
>> p = polyfit(x,y,3)
p =
-0.1917

31.5821

-60.3262

43.1

128

290.7

498.4];

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

2.5

3.5

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

>> x1 = 0.1:0.01:0.8;
>> y1 = polyval(c,x1);
>> plot(x1,y1,x,y,'*')

72

0.1641

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

Vidi del 1.3 vo predavawata za vtoriot semestar


Isto
73

---- Osnovi na MatLab ----

>>
>>
>>
>>

x = [ 0 1 3 ]';
fx = [ -5 1 25]';
A = myvander(x)
coef = A\fx

A =
0
1
9
coef =
2
4
-5

0
1
3

1
1
1

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

0.5

1.5

2.5

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
1

0
1

1
1

74

---- Osnovi na MatLab ----

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 mfunkcija 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
L =
0.3333
-0.5000
0.1667

4.0000

-5.0000

-1.3333
1.5000
-0.1667

1.0000
0
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
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4

0.5

1.5

76

2.5

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

-5

-5
1
11

0
6
10

0
0
2

D =

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

-2

-5

-5
1
9
25
55

0
6
8
16
30

0
0
1
4
7

0
0
0
1
1

0
0
0
0
0

D =

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 ( x 0 h) f ( x 0 + h)
f
= lim
x 0 x
h0
2*h

f ( x0 ) = lim

Primerot e od predavawata za vtoriot semestar


Isto
9
Vidi del 2.1 vo predavawata za vtoriot semestar
8

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;
max1 = 15;
H(1) = h;
D(1) = (feval(f,x+h) - feval(f,x-h))/(2*h);
E(1) = 0;
for n = 1:2
h = h/10;
H(n+1) = h;
D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h);
E(n+1) = abs(D(n+1) - D(n));
end
n = 2;
while ((E(n)>toler)) & n<max1
h = h/10;
H(n+1) = h;
D(n+1) = (feval(f,x+h) - feval(f,x-h))/(2*h);
E(n+1) = abs(D(n+1) - D(n));
n = n+1;
end
n = length(D)-1;
% kraj na funkcijata............

%1
%2
%3
%4
%5
%6
%7
%8
%9
%10
%11
%12
%13
%14
%15
%16
%17
%18
%19
%20

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

10
11

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

Vidi 2.3 od predavawata vo vtoriot semestar


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


od predavawata na st. 29
14
od predavaqata na st. 30
13

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

15

h = pi/500;
x = 0:h:pi/2;
y = sin(x);
integral = simps1(h,y)

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

Ax = b

t.e

2 1 x1 4
1 1 x = 1

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
x =
1.0000
2.0000

0.3333
-0.6667

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 =
c1 =
raz1
err1
err1

[1.09 2.24]'
A*x1
= b - c1
= norm(raz1)
- 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
-3
5

-7
2
-1

0
6
5

b =
7
4
6
x =
0
-1
1
c =
7
4
6
err =
0
0
0

primer:
>>
>>
>>
>>
>>

A =
b =
x =
c =
err

[ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21]


[erf(0.8) erf(0.9) erf(1.1)]'
A\b
A*x
= b-c

A =
1.0000
1.0000
1.0000

0.8000
0.9000
1.1000

0.6400
0.8100
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);
A = [A';B']';
X = zeros(n,1);
for p = 1:n,
for k = [1:p-1,p+1:n],
if A(p,p)==0, break, end
mult = A(k,p)/A(p,p);
A(k,:) = A(k,:) - mult*A(p,:);
end
end
X = A(:,n+1)./diag(A);

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

primer:
>>
>>
>>
>>
>>

A =
b =
x =
c =
err

[ 1.0 0.8 0.64;1.0 0.9 0.81; 1.0 1.1 1.21]


[erf(0.8) erf(0.9) erf(1.1)]'
gaussj(A,b)
A*x
= b-c

A =
1.0000
1.0000
1.0000

0.8000
0.9000
1.1000

0.6400
0.8100
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 =
b =
x =
c =
err

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

A =
10
-3
5

-7
2
-1

0
6
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 GausZejdelovata 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
2
2

1
10
2

1
1
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.9300
1.0079
1.0006
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

0.4000
0.8840
0.9947
0.9999
1.0000
1.0000
1.0000
1.0000
1.0000

2.3000
1.0372
0.9995
0.9999
1.0000
1.0000
1.0000
1.0000
1.0000

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
2.9125
2.9562
2.9954
2.9993
2.9999
3.0000
3.0000
3.0000

0.4000
1.2775
1.0234
1.0036
1.0005
1.0001
1.0000
1.0000
1.0000

2.3000
1.0730
1.0134
1.0016
1.0002
1.0000
1.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
2.0288
2.9040
2.9860
2.9982
2.9998
3.0000
3.0000
3.0000
3.0000

7.3500
1.4782
1.0772
1.0097
1.0013
1.0002
1.0000
1.0000
1.0000
1.0000

2.4200
1.2899
1.0346
1.0047
1.0006
1.0001
1.0000
1.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
23
-5
16

17
56
3
12

-13
11
47
17

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

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
Neka se zadadeni empiriskite podatoci

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.

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

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
k
x2
x3k .

A= .
.
k
x n 1
xk
n

x1k 1 .
x 2k 1 .
x3k 1 .
.
.

.
.

x1
x2
x3
.
.

x nk11 . x n 1
x nk 1 . x n

1
1

.
.

1
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);
for j = 1:k+1
A(:,j)= x.^(k+1-j);
end
S = A'*A;
b = A'*y;
C = S\b;
Err = norm((y-A*C));

%1
%2
%3
%4
%5
%6
%7
%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 mfunkcijata 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
9
8
7
6
5
4
3
2
1

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
Q3 =
R: [4x4 double]
df: 3
normr: 1.2247

2.0476

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 1 ( x1 )
q k ( x1 )
q (x )
q k 1 ( x 2 )
k 2
q k ( x3 )
q k 1 ( x3 )

A=
.
.

.
.

q k ( x n 1 ) q k 1 ( x n 1 )
q (x )
q k 1 ( x n )
k n

q1 ( x1 )
. q 2 ( x1 )
q1 ( x 2 )
. q2 ( x2 )
q1 ( x3 )
. q 2 ( x3 )

.
.
.
.
.
.

. q 2 ( x n 1 ) q1 ( x n 1 )
. 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 ( nonlinear 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


funkcijata q1.

e vo ramkite na

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

y = ln( f ( x)) a c = ln(a1 )

kade

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

1.5

2.5

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
6

0.5

1.5

2.5

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.

U1 (
Un =

1 p
1 p
1 p
) +U2(
) + ... + U m (
)
L1,n
L2 , n
Lm , n
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
) p + ... + U m (
)p
L2,n / L1,n
Lm ,n / L1,n
1
1
1+ (
) p + ... + (
)p
L2,n / L1,n
Lm ,n / L1,n

U1 + U 2 (
Un =

toga{, za L1,n -> 0, Un -> U1.n. Vo slu~aj koga L1,n ne e nula no se u{te ima mala
vrednost, t.e to~kata Mn e blisku do M1,n, vlijanieto na U1,n e najgolemo, dodeka
vlijanieto na ostanatite to~ki e pomalo i zavisi od vrednosta na izrazot (
Vrednosta (

1
).
Lk ,n / L1,n

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

prika`ana e funkcijata ( )

za pove}e vrednosti na p, pri {to L = ( Lk ,n / L1,n ) , k =

1,2,...m.
>>
>>
>>
>>
>>
>>

L = 1:0.2:10;
p2 = 2;
p3 = 3;
y2 = (1./L).^p2;
Y3 = (1./L).^p3;
plot(L,y2,'-',L,y3,'--')

1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

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,
mo`eme da gi otfrlime onie to~ki za koi e (

1
) 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
bu{orina
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

SiO2 (%)

8
16
24
32
8
16
24
32
40
8
16
24
32
40
48
8
16
24
32
40
48
8
16
24
32
4
16
24
32
40
24
32
40
23
20

2
2
2
2
10
10
10
10
10
18
18
18
18
18
18
26
26
26
26
26
26
34
33
34
34
38
42
38
42
38
50
50
50
44
30

93.2
93.5
94.2
94
93
94.2
95
95
97
94.3
95
95
96
95.4
92
93.5
95
95
97
96
92
94
96
95.4
96.4
94.2
97
95
97
97
96
95
86
95
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

pri {to se konstatira deka redot na matricata SiO2 e od 35x4, {to odgovara na
podatocite.
So slednite naredbi, mo`eme ilustrativno da gi prika`eme mestata kade postojat
merni podatoci.
plot(SiO2(:,2),SiO2(:,3),'o')
axis('ij')
grid

0
5
10
15
20
25
30
35
40
45
50

10

15

20

25

105

30

35

40

45

50

---- 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);
y = Data(:,3)-x0(2);
`
val = Data(:,4);
dist = sqrt(x.^2+y.^2);
%----------------------------

106

%1
%2
%3
%4

---- 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 vektorkolona Less_then_r. Ovoj vektor se koristi vo naredbite 11 i 12 za da se
rearan`iraat vektorite dist i val na na~in da vektorite gi sodr`at samo
to~kite koi se vo ramkite na redijusot na vlijanie. Povtorno, ako se koristat
ciklusi programot bi bil:

k = 0;
for i=1:n
if (dist(i) <= R)
dist(k) = dist(i);
val(k) = val(i);
k = k+1;
end
end

Na kraj se naredbite 13 i 14 se vr{at kone~nite presmetki. So naredbata 14 se


presmetuva ili programira izrazot (

1 p
) , za sekoja to~ka a so naredbata 15 se
Lm,n

presmetuva kone~nata vrednost vrd, vo soglasnot so izrazot.

U1 (
Un =

1 p
1 p
1 p
) +U2(
) + ... + U m (
)
L1, n
L2 , n
Lm , n
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 mfunkcijska 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

97

40

93
95

94

45

96
96

35

97

96
96

97

88
94 91 87
90
9392
97

30
95

25

95

20

9
93

95
15

95

94

95

94
96

97

96

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

93

96

45

94

97

40

96

97

96

90

939189
88
92

35

96

97

97

30
95

25

95

9
93

20
95

94

15

95

94

96

97
96

10

95

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'
'w'
'a'
'r+'

~itawe
pi{uvawe (ako ne postoi fajlot se kreira)
pi{uvawe dodavaj}i na krajot (ako ne postoi fajlot se kreira)
~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
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
10.0000
11.0000
12.0000
13.0000
14.0000
15.0000
16.0000
17.0000
18.0000
19.0000
20.0000
21.0000
22.0000
23.0000
24.0000
25.0000
26.0000
27.0000
28.0000
29.0000
30.0000
31.0000
32.0000
33.0000
34.0000
35.0000

8.0000
16.0000
24.0000
32.0000
8.0000
16.0000
24.0000
32.0000
40.0000
8.0000
16.0000
24.0000
32.0000
40.0000
48.0000
8.0000
16.0000
24.0000
32.0000
40.0000
48.0000
8.0000
16.0000
24.0000
32.0000
4.0000
16.0000
24.0000
32.0000
40.0000
24.0000
32.0000
40.0000
23.0000
20.0000

2.0000
2.0000
2.0000
2.0000
10.0000
10.0000
10.0000
10.0000
10.0000
18.0000
18.0000
18.0000
18.0000
18.0000
18.0000
26.0000
26.0000
26.0000
26.0000
26.0000
26.0000
34.0000
33.0000
34.0000
34.0000
38.0000
42.0000
38.0000
42.0000
38.0000
50.0000
50.0000
50.0000
44.0000
30.0000

93.2000
93.5000
94.2000
94.0000
93.0000
94.2000
95.0000
95.0000
97.0000
94.3000
95.0000
95.0000
96.0000
95.4000
92.0000
93.5000
95.0000
95.0000
97.0000
96.0000
92.0000
94.0000
96.0000
95.4000
96.4000
94.2000
97.0000
95.0000
97.0000
97.0000
96.0000
95.0000
86.0000
95.0000
92.0000

114

S-ar putea să vă placă și