Documente Academic
Documente Profesional
Documente Cultură
OSNOVI NA
MatLab
so
PRIMERI
Qup~o Jordanovski
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
VOVED
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
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
Komanda
Pe~aten primer
32.4162 ( 4 decimalni mesta )
3.1416e+01
3.141592653589793e+01
31.42( 2 decimalni mesta)
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 (
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
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.
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
>> 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
2 3], z = [8 9]
2*z, -w]
cd )
2
9
18
-1
-2
-3
-2
-1
16
18
10
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
0.5200
-2.0000
-3
-5
-7
-3
-5
11
-3
-7
3.0000
2.2361
>> t = w + 2*c'
t =
3.0000
4.0000
7.4721
12
4.0000
7.4721
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
20
r
r
u = (10,11,12) a v = 21
22
toga{
13
rr
u v = 10 20 + (11) (21) + 12 (22) = 167
Vo MatLab-ot skalarniot proizvod se presmetuva na sledniot na~in:
>> u = [10, -11, 12 ], v = [20; -21; -22]
>> prod = u*v
u =
10
-11
12
v =
20
-21
-22
prod =
167
MatLab-ot presmetuva skalaren proizvod pome|u vektor-red i vektor-kolona.
Imeno ako imame vektor:
>> w = [2, 1, 3]
w =
2
1
3
Toga{ pri presmetuvawe na skalaren proizvod pome|u vektorite u i w , MatLab-ot }e
prijavi gre{ka.
>> u*v
??? Error using ==> *
Inner matrix dimensions must agree.
dodeka pak
u*w'
ans =
45
bidej}i so operacijata transponirawe, vektorot-red w e pretvoren vo vektor-kolona.
r
u =
2
i
14
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]
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
,1.
15
sin(x)
0.0000
0.7071
1.0000
0.7071
0.0000
xsin(x)
0.0000
0.1768
0.5000
0.5303
0.0000
Inf
0.4444
0.5000
4.0000
2.5000
16
ans =
-18
-10
12
26
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
17
121
144
>> u.^4
ans =
10000
14641
20736
11.0000
1.3333
18
,1-h,1. Soodvetnite
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
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
19
Stil na linijata
. to~ka
o krug
x krst
+ plus
- polna linija
* zvezda
: dve to~ki
-. isprekinata so to~ka
- - isprekinata
20
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
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
0
-0.5
-1
0.5
x
0.5
x
0.5
x
0
-0.5
-1
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
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-')
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
5
10
19
2
7
13
3
8
15
6
7
8
9
10
11
13
15
17
19
4
9
17
5
10
19
24
ans =
5
1
1
0
0
0
0
-1
2
0
0
0
25
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
2]; x = [8;
-4; 1];
-7], B, H = [A;B]
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
27
0
1
2
3
4
5
6
7
8
9
4
5
nz = 34
28
>> 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
-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
-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
8. Ciklusi ( Petqi )
x = -1:0.05:1;
for n = 1:8
subplot(4,2,n), plot(x,sin(n*pi*x))
end
31
-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
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
( 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
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
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
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.
false = 0
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.
>> 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
35
&
|
~
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
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
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
pi
5; -5
3.1416
-3.0000
-3
-1]
5.0000
-1.0000
5.0000
-1.0000
5.0000
0
37
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
x n = cos( x n 1 )
n=2,3,4 ....
0.7487
0.7326
0.7435
0.7385
0.7395
0.7388
39
a = pi^exp(1); c = exp(pi);
if a >= c
b = a^2 - c^2
end
< 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
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:
s=
a+b+c
2
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
42
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
43
44
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.....
45
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
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
3.14
6.45
3.1400
9.75], round(x)
6.4500
10
9.7500
>> floor(x)
47
ans =
-4
>> ceil(x)
ans =
-3
0
10
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.
48
0
1.0000
0.0000
0
0.0000
1.0000
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
max(x),
0
max(abs(x))
2.3000
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.
50
>> 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
51
0.2
0.4
0.6
0.8
26
27
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
3
5
8
4;
4
-1
0
-1
6;
1]
4
6
1
4
5
6
7
8
9
52
10
11
12
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.
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
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
1
0.5
0
-0.5
-1
3
2.5
4
3.5
1.5
y
2.5
1
f = xye 2 ( x
+ y2 )
54
55
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
97
115
32
82
56
46
32
76
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
58
p =
3.14159265
>> size(p)
ans =
1
10
Izleznata K-nizata
poseben karakter.
f ( x) =
1
1
+
6
2
( x 0.3) + 0.01 ( x 0.9) 2 + 0.04
5])
59
100
80
60
40
20
-20
-5
-4
-3
-2
-1
0.8
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
100
80
60
40
20
-20
-5
-4
-3
-2
-1
61
quad
Prilagodliva Simpsonova metoda i
quad8 Prilagodliva Wutn-Kouts metoda
x(t ) = sin(2t )
za t [0,3 ] .
y (t ) = cos(t )
z (t ) = t
10
8
6
4
2
0
1
0.5
1
0.5
-0.5
-0.5
-1
-1
62
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
0.6512; 0.7599
0.8098
0.9870
0.4524
0.8075
0.4832
0.6512
0.2749
0.8880
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
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.
8.9129897e-001
7.6209683e-001
4.5646767e-001
1.8503643e-002
8.2140716e-001
4.4470336e-001
6.1543235e-001
7.9193704e-001
64
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
65
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
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
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.
68
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
---- 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
= roots(p)
r =
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
-0.0000
-2.0000
-5.0000
5.4330
-0.433];
6.9545
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
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
r =
0
31.5821
-60.3262
43.1
128
290.7
498.4];
35.3400
71
>>
>>
>>
>>
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
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
>>
>>
>>
>>
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
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
0
1
1
1
74
75
>> 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
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
5.5000
11.0000
primer 1 7:
6
77
-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 =
f ( x 0 h) f ( x 0 + h)
f
= lim
x 0 x
h0
2*h
f ( x0 ) = lim
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
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)
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
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)
83
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
84
>> 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
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
x = A 1b
0.3333
-0.6667
86
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
>> 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
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
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
89
-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
90
%
[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
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
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
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
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.
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.
95
S = j =1 ( p( x j ) y j ) 2
n
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
96
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
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
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
98
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
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 )
f ( x) = a1 q1 ( x) kade q1 ( x) = e bx
99
e vo ramkite na
ln( f ( x)) = ln a1 + bx
ili napi{ano vo prepoznatliva forma:
y = c + bx
kade
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
ylg = log(y1);
[C,Err] = polylsq(x,ylg,1)
alg = C(2)
breg = C(1)
areg = exp(alg)
yteor = areg*exp(breg*x);
100
>> 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
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
(**)
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
1
L
prika`ana e funkcijata ( )
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
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
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
104
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.
106
%1
%2
%3
%4
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.
for i = 1:n
if(dist(i) ~= 0)
vrd = val(i)
break
end
107
end
k = 0;
for i=1:n
if (dist(i) <= R)
dist(k) = dist(i);
val(k) = val(i);
k = k+1;
end
end
1 p
) , za sekoja to~ka a so naredbata 15 se
Lm,n
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
108
>> 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
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
110
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)
~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
113
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