uvod matlab skripta-2010

34
PRAKTIKUM FIZIKA 2 UVOD U PROGRAMSKI PAKET MATLAB [Mart 2009. godine] 2009 © Katedra za Mikroelektroniku i tehničku fiziku © M.Krstić i J. Crnjanski

Upload: neko-daleko

Post on 24-Jul-2015

1.215 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: uvod MatLab skripta-2010

PRAKTIKUM FIZIKA 2 UVOD U PROGRAMSKI PAKET MATLAB

[Mart 2009. godine]

2009 © Katedra za Mikroelektroniku i tehničku fiziku © M.Krstić i J. Crnjanski

Page 2: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 2

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

MatLab je programski paket koji objedinjuje izračunavanja, vizualizaciju i programiranje neophodne za rešavanje raznovrsnih problema prisutnih u prirodno-matematičkim i tehničkim naukama. Ime je dobio od reči MATrix LABoratory, pošto mu je osnovni element podataka matrica. MatLab se može koristiti za matematička izračunavanja, modelovanje i simulacije, analizu i obradu podataka, grafičko prikazivanje rezultata i razvoj algoritama. Ova skripta namenjena je studentima koji MatLab koriste prvi put, a u programiranju imaju malo ili nimalo iskustva. Skripta je posebno koncipirana da sadrži sve bitne alatke koje će biti potrebne studentima koji prate kurs Praktikum iz fizike 2.

Skripta je podeljena u 10 celina:

1. MatLab okruženje

2. Definicija promenljivih

3. Nizovi i operacije sa nizovima

4. Petlje - For, While, If

5. Grafičko predstavljanje rezultata

6. Funkcije

7. Numerička diferencijacija

8. Numerička integracija

9. Rešavanje sistema linearnih jednačina

10. Rešavanje diferencijalnih jednačina

Page 3: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 3

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

1. MatLab okruženje

Radno okruženje programskog paketa MatLab sastoji se od tri radna prozora:

1. komandni prozor (Command Window),

2. prethodne komande (Command History) i

3. tekući folder/radni prostor (Current Directory/Workspace).

U prozoru prethodne komande pamte se sve komande koje su izvršene iz komandnog prozora, slično kao što i bilo koji web pretraživač pamti History svih posećenih sajtova. Dvostrukim klikom mišem na bilo koju komandu iz prethodnih komandi, ta komanda se izvršava kao da je izvršena iz komandnog prozora.

U prozoru tekući folder/radni prostor nalazi se pregled foldera koji je podešen kao aktivni folder, a ukoliko se izabere opcija radni prostor, prikazuje se spisak promenljivih koje su izračunate izvršavanjem komandi u komandnom prozoru ili pokretanjem nekog programa. Vrednost promenljive se može ispisati u komandnom prozoru dvostrukim klikom na željenu promenljivu.

Komandni prozor omogućava trenutno izvršavanje pojedinačnih komandi, a istovremeno služi i za prikaz rezultata izvršavanja komandi ili kompletnih programa. Izvršavanje komande i prikaz rezultata njenog izvršenja:

>> komanda <Enter>

Jednom izvršena komanda se ne može naknadno modifikovati vraćanjem kursora u prethodni red komandnog prozora, već u slučaju greške mora biti ponovo uneta i izvršena. Kursorska strelica “na gore” (↑) na tastaturi omogućava izlistavanje prethodno unetih komandi redom i olakšava ponovno izvršenje već unetih komandi.

Brisanje sadržaja komandnog prozora postiže se naredbom:

>> clc <Enter>

KOMANDNI PROZOR

TEKUĆI FOLDER/ RADNI PROSTOR

PRETHODNE KOMANDE

Page 4: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 4

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

a upisivanjem tačka-zareza (;) nakon komande, rezultat izvršenja se ne prikazuje u komadnom prozoru. Brisanje sadržaja radnog prostora, odnosno radne memorije, postiže se komandom

>> clear all <Enter>

dok komanda

>> clear promenljiva <Enter>

briše samo navedenu promenljivu.

Komentari u kodu se označavaju znakom za procenat (%) i služe kao napomene ili podsetnik za onoga ko čita programski kod. MatLab ne izvršava komentare i standardno ih obeležava zelenom bojom.

Osim u komandnom prozoru, komande se mogu pisati i izvršavati i iz MatLab Editora. Da bi se pristupilo Editoru potrebno je startovati File/New/M-File. Otvoriće se novi prozor koji se zove Editor i koji pruža mogućnost ispisivanja programskog koda bez toga da se komande neposredno nakon ispisivanja i izvršavaju. Fajl generisan u Editoru može biti sačuvan i pokrenut u bilo kom kasnijem trenutku. Ekstenzija fajlova generisanih i snimljenih u Editoru je .m. Snimljeni .m fajl se može pokrenuti ili iz samog Editora naredbom Run, ili se može pozvati iz Komandnog prozora pozivanjem imena fajla kao komande. Pokretanjem .m fajla izvršavaju se sukcesivno sve komande navedene u fajlu. Editor se koristi i za generisanje funkcija tj. pravljenje funkcijskih datoteka o čemu će biti reči nešto kasnije.

Page 5: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 5

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

2. Definicija promenljivih

Za razliku od programskog jezika C, u Matlab-u nije neophodno prethodno deklarisati promenljive i njihov tip, već je potrebno samo uneti vrednosti promenljivih pre njihovog pojavljivanja u naredbama. Promenljiva kojoj je dodeljena numerička vrednost može se upotrebljavati u matematičkim izrazima, funkcijama i svim Matlab-ovim iskazima i komandama. Prilikom definisanje imena promenljive treba imati u vidu da:

1. naziv može da sadrži karaktere: slova (a-z), cifre (0-9) i/ili donju crtu (_)

2. naziv mora početi slovom

3. MatLab je „case sensitive“ tj. razlikuje velika od malih slova

4. MatLab 6 pamti prvih 31 karaktera imena promenljive; MatLab 7 pamti prvih 63 karaktera imena promenljive.

Primeri dobro definisanih promenljivih su:

>> brzina, naelektrisanje_elektrona, a1, A1, promenljiva1_pomocna.

Primeri loše definisanih promenljivih su:

>> naelektrisanje-elektrona, 1a, brzina!, _A1.

Primeri dodele vrednosti nekoj promenljivoj:

>> brzina = 100;

>> brzina = 100 + brzina*3;

Pojedine često korišćene promenljive automatski su definisane u MatLab-u. Među njima su:

>> pi % broj π. >> eps % najmanja razlika između dva broja koju MatLab može da uoči iznosi 2-52 >> i % imaginarna jedinica. Alternativno se koristi karakter j.

>> NaN % skraćenica od Not a Number. Upotrebljava se kad MatLab ne može da izračuna numeričku vrednost. Na primer, rezultat operacije 0/0 je NaN. >> inf % označava beskonačno veliku vrednost.

Imaginarna jedinica ima svoju rezervisanu oznaku i ili j, međutim to ne sprečava korisnika da ova slova koristi i u druge svrhe. Ukoliko je potrebno da se u istom kodu koristi i ili j i kao imaginarna jedinica i kao proizvoljna promenljiva i ukoliko je i ili j već iskorišćeno kao imaginarna jedinica, tada je poželjno pre korišćenja ovih oznaka kao proizvoljnih promenljivih ispisati naredbu

>> clear i; (ili clear j;)

koja oslobađa slovo i ili j za unos proizvoljne vrednosti i time sprečava mogućnost greške ukoliko MatLab promenljivu i ili j shvati kao imaginarnu jedinicu.

Zadatak 1: Proveriti tačnost trigonometrijskog izraza, izračunavanjem obe strane jednačine za vrednost x = π/5:

2 tan sincos .

2 2 tan

x x x

x

+=

Rešenje:

>> clear all;

Page 6: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 6

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> x = pi/5; % unos numericke vrednosti za promenljivu x

>> leva_strana = cos(x/2)^2;

>> desna_strana = (tan(x) + sin(x))/(2*tan(x));

>> display(leva_strana); % display ispisuje sadržaj promenljive

>> display(desna_strana);

Page 7: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 7

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

3. Nizovi i operacije sa nizovima

Ime programskog paketa MatLab, kao što je već rečeno, potiče od MATrix LABoratory i odražava činjenicu da je MatLab prevashodno orijentisan ka radu sa matricama. Čak i kada se definiše prosta skalarna promenljiva, na primer:

>> brzina = 100;

MatLab će tu promenljivu tretirati kao matricu dimenzije 1 × 1. Vektor je specijalna vrsta matrice i sadrži samo jednu kolonu (vektor-kolona) ili jednu vrstu (vektor-vrsta). Primeri vektora su:

>> [1 2 3 4 5 6 7 8 9] % vektor-vrsta tj. matrica 1 × 9

>> [1; 2; 3; 4; 5; 6; 7; 8; 9] % vektor-kolona tj. matrica 9 × 1

Reč niz podrazumeva bilo vektor bilo matricu. Ukoliko je niz jednodimenzionalan u pitanju je vektor, pošto ima samo jednu kolonu ili vrstu. Ukoliko je niz dvodimenzionalan onda u pravom smislu reči predstavlja matricu koja ima m kolona i n vrsta. MatLab može raditi i sa matricama koje imaju i više od dve dimenzije.

3.1 Vektori Kao što je već prikazano, jedan od načina za formiranje vektora vrste je upisivanje

njegovih elemenata, razdvojenih razmakom ili zarezom, unutar uglastih zagrada. Sa druge strane, da bi se napravio vektor kolona, potrebno je upisati levu uglastu zagradu [ i zatim elemente razdvojene tačkom i zarezom, ili Enter posle svakog elementa. Nakon poslednjeg elementa, upisuje se desna uglasta zagrada ]. Međutim, vektore je moguće generisati i na druge načine. Jedan od načina zahteva definisanje vrednosti početnog elementa, koraka i vrednosti poslednjeg elementa. Na primer, vektor 2, 4, 6, 8, 10 sadrži brojeve od 2 do 10, sa korakom 2. U MatLab programskom paketu ovakav vektor generiše se naredbom:

>> vektor = [2:2:10]; % vektor = [pocetni_element:korak:krajnji_element]

Korak ne mora imati pozitivnu vrednost. Ukoliko je korak negativan, generiše se vektor čiji elementi imaju opadajuće vrednosti, na primer: 10, 8, 6, 4, 2:

>> vektor = [10:-2:2];

Ukoliko prilikom pozivanja prethodnih komandi izostavi vrednost koraka, MatLab podrazumeva da je korak = 1. Takođe, nije neophodno pisati uglaste zagrade, dozvoljeno je:

>> vektor = 2:2:10;

odnosno

>> vektor = 10:-2:2;

Vektor se može generisati i pomoću komande linspace koja zahteva definisanje početnog elementa, krajnjeg elementa i broja elemenata u vektoru, a MatLab sam određuje vrednost ekvidistantnog koraka. Na primer, ukoliko je potrebno definisati vektor koji sadrži 5 elemenata, počinje brojem 2, a završava se brojem 10, potrebno je izvršiti komandu:

>> linspace(2,10,5); % linspace(pocetni_element,krajnji_element,broj_elemenata)

Transponovanje vektora postiže se dodavanjem apostrofa nakon oznake vektora:

>> x = 1:5; % definisan je vektor vrsta

>> x'; % transponovanje vektora-vrste x u vektor-kolonu sa identičnim elementima

Page 8: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 8

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

3.2 Matrice Dvodimenzionalna matrica tj. dvodimenzionalan niz sastoji se od elemenata raspoređenih u

vrste i kolone. Kao i prilikom definisanja vektora, matrica se može definisati pozivanjem komande:

>> matrica = [1 2 3;4 5 6;7 8 9];

% matrica = [elementi_prve_vrste;elementi_druge_vrste;elementi_trece_vrste]

Ovako definisana matrica predstavlja kvadratnu matricu 3 × 3:

1 2 3

4 5 6

7 8 9

matrica =

Definisanje elemenata matrice i vektora može se izvesti direktnim unošenjem vrednosti pojedinačnih elemenata, ali i korišćenjem matematičkih izraza ili unapred definisanih promenljivih i funkcija. Tako je, na primer, sledeća matrica pravilno generisana ukoliko su prethodno definisane vrednosti promenljivih a, b i c:

>> matrica = [a b^2 c^a; log(a) sqrt(9) c; b-a a-c c*a];

Ugrađene komande zeros(m,n), ones(m,n) i eye(n) generišu matrice čiji elementi imaju specijalne vrednosti. Komande zeros(m,n) i ones(m,n) generišu matrice sa m vrsta i n kolona, u kojima su svi elementi nule odnosno jedinice, respektivno. Komanda eye(n) generiše jediničnu kvadratnu matricu sa n vrsta i n kolona (elementi ove matrice koji se nalaze na glavnoj dijagonali imaju vrednost jedan, dok ostali elementi imaju vrednost nula).

Operator transponovanja kod matrica pretvara njene vrste u kolone i obratno.

Određenom elementu matrice pristupa se izvršavanjem komande:

>> a = matrica(2,1); % a = matrica(redni_broj_vrste, redni_broj_kolone)

>> display(a);

3.3. Upotreba dvotačke (:) Upotreba karaktera dvotačke biće prikazana na primerima. Pozivanjem komande:

>> x = niz(:);

promenljivoj x dodeljuju se svi elementi promenljive niz. U slučaju:

>> x = niz(m:n);

promenljivoj x dodeljuju se elementi promenljive niz, počev od elementa sa rednim brojem m, do elementa sa rednim brojem n. Promenljiva x sada predstavlja vektor sa m – n + 1 elemenata. Ukoliko su promenljive višedimenzionalne, dvotačka omogućava jednostavno pristupanje određenim elementima matrice:

>> A(:,n) – označava elemente u svim vrstama kolone n matrice A.

>> A(n,:) – označava elemente u svim kolonama vrste n matrice A.

>> A(:,m:n) – označava elemente u svim vrstama između kolona m i n matrice A.

>> A(m:n,:) – označava elemente u svim kolonama između vrsta m i n matrice A.

>> A(m:n,p:q) – označava elemente u vrstama od m do n i kolonama od p do q matrice A.

Neka je matrica A definisana izvršavanjem komande:

>> A = [1 3 5 7 9 11; 2 4 6 8 10 12; 3 6 9 12 15 18; 4 8 12 16 20 24;...

Page 9: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 9

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

5 10 15 20 25 30]

Matrice B, C, D, E i F koje sadrže određeni broj elemenata matrice A, definisane su komandama:

>> B = A(:,3)

B =

5

6

9

12

15

>> C = A(2,:)

C =

2 4 6 8 10 12

>> E = A(2:4,:)

E =

2 4 6 8 10 12

3 6 9 12 15 18

4 8 12 16 20 24

>> F = A(1:3,2:4)

F =

3 5 7

4 6 8

6 9 12

3.4 Ugrađene funkcije za obradu nizova: Slede primeri nekih od najznačajnijih ugrađenih funkcija za obradu nizova:

• length(A) – određuje broj elemenata vektora A:

>> A = 1:5;

>> length(A)

• size(A) – određuje dimenzije matrice A:

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

>> size(A)

• reshape(A,m,n) – preuređuje matricu A sa r vrsta i s kolona tako da ima m vrsta i n kolona. Proizvod r i s mora biti jednak proizvodu m i n:

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

A =

5 1 6

8 0 2

Page 10: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 10

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> B = reshape(A,3,2)

B =

5 0

8 6

1 2

• diag(v) – kada je v vektor, generiše kvadratnu matricu sa elementima vektora v na glavnoj dijagonali:

>> v = [7 4 2];

>> A = diag(v)

A =

7 0 0

0 4 0

0 0 2

• diag(A) – kada je A matrica, generiše vektor od elemenata glavne dijagonale matrice A.

>> A = [1 2 3; 4 5 6; 7 8 9]

A =

1 2 3

4 5 6

7 8 9

>> v = diag(A)

v =

1

5

9

3.5 Matematičke operacije sa nizovima U programskom paketu MatLab ne postoji razlika između skalarnih i vektorskih vrednosti,

tj. i najobičnija skalarna promenljiva se u memoriji pamti kao matrica 1 × 1, pa treba razlikovati operacije nad pojedinačnim elementima i operacije sa celim matricama.

Sabiranje i oduzimanje

Operacije sabiranja i oduzimanja nizova mogu biti izvedene nad nizovima istih dimenzija. Drugim rečima, nizovi moraju imati jednak broj vrsta i kolona. Zbir tj. razlika dva niza dobija se sabiranjem tj. oduzimanjem odgovarajućih elemenata kao što je to predstavljano jednačinom:

11 1

1

,n

m mn

a a

A

a a

=L

M O M

L

11 1

1

n

m mn

b b

B

b b

=L

M O M

L

11 11 1 1

1 1

n n

m m mn mn

a b a b

A B

a b a b

± ±± =

± ±

L

M O M

L

Page 11: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 11

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Ukoliko se neka skalarna vrednost (matrica 1 × 1) sabira ili oduzima sa nekim nizom, ta skalarna vrednost se sabira odnosno oduzima sa svakim elementom niza.

Množenje nizova

Operacija množenja nizova (*) izvodi se u skladu sa pravilima linearne algebre. Kod sabiranja tj. oduzimanja bilo je potrebno da nizovi budu istih dimenzija. Prilikom matričnog množenja potrebno da broj kolona matrice A bude jednak broju vrsta matrice B. Proizvod ovih matrica imaće isti broj kolona kao matrica B i isti broj vrsta kao matrica A. Primera radi, ukoliko je matrica A dimenzija m × k, a matrica B dimenzija k × n, množenje je moguće izvesti, jer matrica A ima k kolona, a matrica B ima k vrsta. Proizvod ove dve matrice biće dimenzija m × n. Sledi primer množenja dve matrice dimenzija 4 × 3 i 3 × 2:

11 12 13

21 22 23

31 32 33

41 42 43

,

a a a

a a aA

a a a

a a a

= 11 12

21 22

31 32

b b

B b b

b b

=

( ) ( )( ) ( )( ) ( )( ) ( )

11 11 12 21 13 31 11 12 12 22 13 32

21 11 22 21 23 31 21 12 22 22 23 32

31 11 32 21 33 31 31 12 32 22 33 32

41 11 42 21 43 31 41 12 42 22 43 32

*

a b a b a b a b a b a b

a b a b a b a b a b a bA B

a b a b a b a b a b a b

a b a b a b a b a b a b

+ + + ++ + + +

=+ + + ++ + + +

Treba primetiti da operacija množenja matrica nije komutativna, tj. važi nejednakost A*B ≠ B*A. Takođe, treba primetiti da je stepenovanje matrice moguće izvesti samo ako je matrica kvadratna, tj. dimenzije n × n, pošto se proizvod A*A može izračunati samo ako je broj kolona prve matrice jednak broju vrsta druge matrice.

Dva vektora mogu da se pomnože samo ako imaju isti broj elemenata i ako je jedan vektor-vrsta, a drugi vektor-kolona. Množenjem vektora-vrste i vektora-kolone dobija se matrica 1 × 1 tj. skalarna vrednost. Ovakvo množenje naziva skalarni proizvod a ugrađena funkcija koju MatLab koristi za izračunavanje skalarnog proizvoda dva vektora je dot(a,b). Ulazni argumenti a i b mogu biti ili vektori-vrste ili vektori-kolone:

>> A =[1 2 3]

A =

1 2 3

>> B = [1 2 3]

B =

1 2 3

>> dot(A,B)

ans =

14

>> A = [1 2 3]

A =

1 2 3

Page 12: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 12

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> B = [1;2;3]

B =

1

2

3

>> dot(A,B)

ans =

14

Množenjem vektora kolone i vektora vrste sa po n elemenata dobija se kvadratna matrica n × n:

>> A = [1;2;3]

A =

1

2

3

>> B = [1 2 3]

B =

1 2 3

>> A*B

ans =

1 2 3

2 4 6

3 6 9

Deljenje nizova

Kao i kod množenja, tako i kod deljenja važe pravila linearne algebre. U programskom paketu MatLab postoje dve vrste deljenja: deljenje sa leva (\) i deljenje sa desna (/). Međutim, pre objašnjenja procedure deljenja nizova, biće uvedeni pojmovi jedinične matrice, inverzne operacije i determinante.

Jedinična matrica je kvadratna matrica koja ima jedinice na glavnoj dijagonali i nule na svim ostalim mestima. Ona se može napraviti komandom eye(), kao što je već pomenuto. Kada se neka matrica ili vektor pomnoži jedinčnom matricom, dobija se ta ista matrica ili vektor. Specijalno, ako je matrica kvadratna, onda se ona može pomnožiti jediničnom matricom i sa leva i sa desna, tj. u tom slučaju operacija množenja je komutativna.

Matrica B je inverzna matrica matrici A ako je proizvod te dve matrice jedinična matrica. U MatLabu inverzna matrica dobija se stepenovanjem na -1 ili funkcijom inv(A). Inverzna matrica postoji samo ako je matrica kvadratna i ako je njena determinanta različita od nule.

Page 13: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 13

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Determinanta je funkcija pridružena kvadratnim matricama tj. to je funkcija koja svakoj kvadratnoj matrici pridružuje broj koji se zove detereminanta matrice. Bez ulaženja u strogu definiciju determinante, dat je primer određivanja determinante matrice dimenzije 2 × 2:

11 12

21 22

a aA

a a=

11 1211 22 12 21

21 22

det .a a

A a a a aa a

= = −

Ugrađena funkcija koja određuje determinantu matrice A poziva se komandom:

>> det(A).

Deljenje s leva (\)

Deljenjem sa leva može se odrediti rešenje matrične jednačine AX = B, gde su X i B vektori-kolone. Matematički gledano, ova jednačina se rešava množenjem obe strane matricom inverznom matrici A:

1 1A AX A B− −= ï 1IX A B−= ï 1X A B−=

Poslednja jednačina definiše rešenje X, a MatLabu se realizuje pomoću operacije deljenja sa leva:

>> X = A \ B

Rešenje je moguće dobiti i množenjem inverznom matricom. Razlika je u algoritmu koji MatLab koristi u ova dva slučaja. Prilikom množenja inverznom matricom, MatLab prvo traži inverznu matricu, a zatim je množi sa matricom B. U slučaju deljenja s leva, rešenje se dobija numerički, primenom Gauss-ove eliminacije. Za rešavanje sistema linearnih jednačina preporučuje se matrično deljenje s leva, jer je to u slučaju velikih matrica efikasniji metod.

Deljenje s desna (/)

Deljenjem sa desna može se rešiti matrična jednačina XC = D, gde su X i D vektori-vrste. Matematički, jednačina se može rešiti množenjem obe strane jednačine matricom koja je inverzna matrici C:

1 1XCC DC− −= ï 1X DC −=

Poslednja jednačina definiše rešenje X, a u MatLabu se realizuje pomoću operacije deljenja sa desna:

>> X = D / C

Na primerima koji slede biće pokazano rešavanje sistema linearnih jednačina deljenjem sa leva i deljenjem sa desna.

Zadatak 2: Primenom matričnih operacija, rešiti sistem jednačina:

4 2 6 8

2 8 2 4

6 10 3 0.

x y z

x y z

x y z

− + =+ + =+ + =

Rešenje: Sistem se može predstaviti u matričnom obliku i to na dva načina, predstavljanjem nepoznatih preko vektora-kolone i predstavljanjem nepoznatih preko vektora-vrste:

4 2 6 8

2 8 2 4

6 10 3 0

x

y

z

−= ñ ,AX B=

Page 14: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 14

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

4 2 6

2 8 10 8 4 0

6 2 3

x y z − = ñ .XC D=

U prvom slučaju, kada su nepoznate predstavljene preko vektora-kolone, rešenje se dobija pozivanjem komandi:

>> A = [4 -2 6; 2 8 2; 6 10 3];

>> B = [8;4;0];

>> X1 = A\B

X1 =

-1.8049

0.2927

2.6341

Primenom metode množenja sa inverznom matricom, dobija se

>> X1prim = inv(A)*B

X1prim =

-1.8049

0.2927

2.6341

U drugom slučaju, kada su nepoznate predstavljene preko vektora-vrste, rešenje se dobija pozivanjem komandi:

>> C = [4 2 6; -2 8 10; 6 2 3];

>> D = [8 4 0];

>> X2 = D/C

X2 =

-1.8049 0.2927 2.6341

odnosno primenom metode množenja sa inverznom matricom:

>> X2prim = D*inv(C)

X2prim =

-1.8049 0.2927 2.6341

Operacije sa pojedinačnim elementima niza

Ukoliko se ispred operatora množenja (*), deljenja (/) ili stepenovanja (^) stavi tačka (.), MatLab izvršava odgovarajuću operaciju množenja, deljenja ili stepenovanja element po element, a ne matrično. Primera radi, ako vektor T predstavlja vremensku osu, tj. sadrži vremenske trenutke u kojima se odvijao neki događaj, a u nekom matematičkom izrazu figuriše T 2, potrebno je izvršiti kvadriranje element po element, što se postiže komandom:

>> T.^2;

Sledeći primer prikazuje matrično kvadridanje kvadratne matrice i kvadriranje element-po-element:

>> M = [1 2 3;4 5 6;7 8 9]

M =

1 2 3

Page 15: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 15

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

4 5 6

7 8 9

>> M^2 % matricno kvadriranje

ans =

30 36 42

66 81 96

102 126 150

>> M.^2 % kvadriranje element-po-element

ans =

1 4 9

16 25 36

49 64 81

Page 16: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 16

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

4. Petlje - For, While, If

Osnovne petlje u programskom paketu MatLab su For, While i If petlje. For-petlja obavlja zadate naredbe više puta u skladu sa brojačem koji je definisan od strane korisnika:

>> for brojac

>> telo petlje;

>> end;

Primera radi, formiranje vektora-vrste od 10 elemenata (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) može se postići primenom For-petlje:

>> for i = 1:1:10

>> vektor(i) = i;

>> end;

While-petlja obavlja zadate naredbe u okviru tela petlje, sve dok zadati uslov daje logički tačnu vrednost:

>> while uslov

>> telo petlje;

>> end;

Formiranje vektora-vrste iz prethodnog primera može se ostvariti i primenom While-petlje, s tom razlikom što u okviru While-petlje nije automatski definisan brojač, niti postoji mogućnost njegovog automatskog inkrementiranja, već je ove korake neophodno dodati u kod:

>> i=1;

>> while i<=10

>> vektor(i) = i;

>> i = i+1;

>> end;

If-petlja ima nešto drugačiju namenu i na osnovu ispitivanja da li je zadati uslov ispunjen ili ne, usmerava izvršenje koda u jednom (ili nijednom) od više ponuđenih pravaca:

>> if uslov

>> ako je uslov ispunjen uraditi ovo;

>> else

>> ako uslov nije ispunjen uraditi ovo;

>> end;

Primena If-petlje prikazana je na sledećem primeru. Potrebno prebrojati koliko elemenata niza iz prethodnog primera ima vrednost veću od 5, a koliko manju ili jednaku 5:

>> manji_od5 = 0;

>> veci_od5 = 0;

>> for i = 1:1:10

>> if vektor(i)>5

>> veci_od5 = veci_od5+1;

>> else

>> manji_od5 = manji_od5 + 1;

Page 17: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 17

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> end

>> end

>> manji_od5

manji_od5 =

5

>> veci_od5

veci_od5 =

5

Page 18: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 18

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

5. Grafičko predstavljanje rezultata

U ovom poglavlju biće objašnjeno kako se u programskom paketu MatLab generišu dvodimenzionalni i trodimenzionalni grafikoni.

5.1 Dvodimenzionalni (2D) grafici Komanda plot omogućava generisanje 2D grafikona u pravouglom koordinatnom sistemu.

U najkraćem obliku, komanda glasi plot(x,y), gde su x i y vektori tj. jednodimenzionalni (1D) nizovi sa istim brojem elemenata (istih dimenzija). Pozivanjem ove komande u posebnom prozoru označenom kao Figure prikazuje se grafik funkcije y = y(x), primera radi:

>> x = [1 2 3 4 5 6 7 8 9 10];

>> y = [2 4 6 8 10 12 14 16 18 20];

>> plot(x,y);

Na dobijenom grafiku vrednosti vektora x su na apcisi, a vrednosti y su na ordinati. Automatska boja linije je plava. Opšti oblik komande plot koji omogućava modifikacije izgleda grafika dat je u formi:

plot(x,y,'oznaka linije','ime svojstva',vrednost svojstva)

Promena oznake linije i svojstva su opcionalne. Oznaka linije definiše vrstu i boju linije i markera. Markeri su oznake tačaka u kojima je definisana vrednost funkcije. Za gornji primer, markeri bi stajali u tačkama (1, 2), (2, 4), (3, 6)... U sledećim tabelama date su vrste linija i njihove oznake, boje linija i njihove oznake i vrste markera i njihove oznake:

Vrsta markera Oznaka znak plus +

kružić °

zvezdica *

tačka .

kvadrat s

romb d

petokraka zvezda p

šestokraka zvezda h

Vrsta linije Oznaka puna (automatska) - isprekidana -- tačkasta : crta-tačka -.

Boja linije Oznaka crvena r

zelena g

plava b

cijan c

magenta m

žuta y

crna k

bela w

Page 19: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 19

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Ime svojstva i vrednost svojstva omogućavaju definisanje debljine linija, veličine markera, boja ivica markera i boje kojom se markeri ispunjavaju. U tabeli je dat pregled svojstava:

Ime svojstva Opis Moguće vrednosti svojstva LineWidth debljina linije broj (automatski 0.5) MarkerSize veličina markera broj MarkerEdgeColor boja ivice markera oznaka boje – slovo MarkerFaceColor popuna markera oznaka boje – slovo

Primer korišćenja komande plot u punom obliku, ukoliko se za liniju grafika debljine 2 koristi crvena boja, a markeri su veličine 12 i u obliku kružića, ispunjeni žutom i oivičeni zelenom bojom:

>> x = [1:1:10];

>> plot(x,sin(x),'-ro','LineWidth',2,...

'MarkerSize',12,'MarkerEdgeColor','g','MarkerFaceColor','y')

Naravno, kako je uzet jako veliki korak (svega deset tačaka), grafički prikaz funkcije sin(x) je veoma neprecizan. Ukoliko postoji potreba da se istovremeno prikaže više grafikona, pre svake naredbe plot, potrebno je otvoriti zaseban prozor za iscrtavanje grafika naredbom figure(n), gde je n redni broj prozora:

>> x = [-2:0.01:4];

>> y = 3.5.^(-0.5*x).*cos(6*x);

>> figure(1)

>> plot(x,y,':g','LineWidth',2);

>> y2 = x.^2+4*sin(2*x)-1;

>> figure(2)

>> plot(x,y2,'--k','LineWidth',2);

Page 20: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 20

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Sa druge strane, ukoliko je potrebno da se u istom koordinatnom sistemu grafički prikažu dve zavisnosti, umesto otvaranja novog prozora komandom figure(2) koristi se komanda hold all, koja na postojeću sadržinu Figure prozora dodaje novu grafičku zavisnost:

>> x = [-2:0.01:4];

>> y = 3.5.^(-0.5*x).*cos(6*x);

>> figure(1)

>> plot(x,y,':g','LineWidth',2);

>> hold all;

>> y2 = x.^2+4*sin(2*x)-1;

>> plot(x,y2,'--k','LineWidth',2);

Konačno, postoji mogućnost da se u okviru istog Figure prozora prikaže više grafika sa nezavisnim koordinatnim osama upotrebom komande subplot. Sintaksa komande

>> subplot(m,n,p)

deli prostor Figure prozora u tabelu koja se sastoji od m redova i n kolona. Brojem p definiše se odgovarajuća pozicija na koju je potrebno da se smesti grafik. Slede primeri korišćenja komande subplot:

Page 21: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 21

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

5.2 Formatiranje grafika

Formatiranje grafika podrazumeva opciono dodavanje i formatiranje naslova grafika, imena koordinatnih osa i njihovog opsega, legende i mreže:

• title('zeljeni naslov grfikona') – dodavanje i formatiranje naslova • xlabel('tekst')– dodavanje oznake ose na apcisu • ylabel('tekst')– dodavanje oznake ose na ordinatu • legend('tekst1','tekst2',...,pol)– dodavanje legende • xlim([x1 x2]) – definisanje opsega vrednosti za apcisu • ylim([y1 y2]) – definisanje opsega vrednosti za ordinatu • grid on ili grid off – prikazuje pomoćnu mrežu u skladu sa oznakama na osama

Primer formatiranja grafika:

>> x = [-2:0.01:4];

>> y = 3.5.^(-0.5*x).*cos(6*x);

>> figure(1)

>> plot(x,y,':g','LineWidth',2);

>> hold all;

>> y2 = x.^2+4*sin(2*x)-1;

>> plot(x,y2,'--k','LineWidth',2);

>> title('Uporedni prikaz grafika');

>> xlabel('x osa');

>> ylabel('y osa');

Page 22: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 22

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> legend('y = 3.5 ^-^0^.^5^x cos(6x)','y = x^2 + 4sin(2x) - 1',2);

% MatLab automatski dodeljuje prvi tekst prvoj funkciji, a drugi tekst drugoj

% funkciji

>> xlim([-1 3.3]);

>> ylim([-5 15]);

Pol Položaj -1 Izvan granica osa, desna strana 0 Unutar granica osa, gde najmanje smeta 1 Gornji desni ugao 2 Gornji levi ugao 3 Donji levi ugao 4 Donji desni ugao

5.3 Logaritamske podele U mnogim naučnim i tehničkim primenama, ponekad je potrebno da jedna ili obe ose

grafika imaju logaritamsku podelu:

>> semilogy(x,y) % logaritamska podela (osnova 10) y ose i linearna podela x ose

>> semilogx(x,y) % logaritamska podela (osnova 10) x ose i linearna podela y ose

>> loglog(x,y) % logaritamska podela i x i y ose

Sledi primer grafičkog prikazivanja funkcije y = 2exp(-0.2x + 10) za linearnu i logaritamsku podelu osa:

>> x = linspace(0.1,60,1000);

>> y = 2.^(-0.2*x + 10);

>> subplot(2,2,1);

>> plot(x,y,'b','LineWidth',2);

>> xlabel('Linearna skala');

>> ylabel('Linearna skala');

>> grid on;

>> subplot(2,2,2);

Page 23: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 23

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> semilogy(x,y,'b','LineWidth',2);

>> xlabel('Linearna skala');

>> ylabel('Log skala');

>> grid on;

>> subplot(2,2,3);

>> semilogx(x,y,'b','LineWidth',2);

>> xlabel('Log skala');

>> ylabel('Linearna skala');

>> grid on;

>> subplot(2,2,4);

>> loglog(x,y,'b','LineWidth',2);

>> xlabel('Log skala');

>> ylabel('Log skala');

>> grid on;

5.4 Grafici u polarnim koordinatama

MatLab omogućava jednostavan prikaz zavisnosti u polarnim koordinatama primenom komande:

polar(ugao,poteg,'oznake linije')

Sledi primer korišćenja ove komande:

>> ugao = linspace(0,2*pi,200);

>> poteg = 3*cos(0.5*ugao).^2 + ugao;

>> figure(1)

>> polar(ugao,poteg,'b');

Page 24: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 24

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Pored navedenih mogućnosti, programski paket MatLab omogućava generisanje i nekih specijalnih vrsta grafika: vertikalni trakasti grafikon, horizontalni trakasti grafikon, stepenasti grafikon, grafikon diskretnih podataka, kružni dijagram, histogram... Detaljne informacije o ovim tipovima grafika se mogu naći u MatLab Help-u.

5.5 Trodimenzionalni (3D) grafici Generisanje 3D grafikona postiže se komandama mesh i surf. Komanda mesh generiše

trodimenzionalnu zavisnost u formi mreže, dok naredba surf prikazuje trodimenzionalnu zavisnost kao ispunjenu površinu. Razlika između ove dve komande se najlakše može uočiti na konkretnom primeru:

>> [x,y] = meshgrid(-8:0.5:8);

>> r = sqrt(x.^2+y.^2)+eps;

>> z = sin(r)./r;

>> figure(1);mesh(z);

>> figure(2);surf(z);

Naredba meshgrid se koristi za generisanje podele x i y ose u formi matrica x i y odgovarajućih diemenzija. Promenljiva z definisana je kao sinc funkcija (podseća na meksički šešir – sombrero).

>> mesh(x,y,z)

>> surf(x,y,z)

Page 25: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 25

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

6. Funkcije Programski paket MatLab raspolaže velikim brojem ugrađenih funkcija kao što su exp(x),

sqrt(x), sin(x)... Međutim, MatLab omogućava i da korisnik samostalno definiše funkciju, generisanjem .m fajla u MatLab Editoru i snimanjem ovog fajla u obliku funkcijske datoteke. Komandna linija koja definiše funkciju ima oblik:

function [izlaz1, izlaz2, ...] = imefunkcije(ulaz1,ulaz2, ...)

Promenljive izlaz1, izlaz2,... su promenljive u koje se smešta rezultat funkcije, dok su ulazne promenljive vrednosti za koje funkcija treba da obavi traženu operaciju. Imefunckije je proizvoljno korisničko ime pod kojim funkcija mora da se zapamti. Kasnije, pod tim imenom funkcija se poziva iz glavnog programa ili Komandnog prozora. Obratiti pažnju da posle definisanja funkcije ne stavlja ; !!! Zarad preglednosti, funkcije će biti objašnjene na konkretnom primeru.

Zadatak 3: Napraviti funkciju koja rešava kvadratnu jednačinu oblika: 2 0,ax bx c+ + =

gde su a, b, c koeficijenti, a x promenljiva. Rešenje kvadratne jednačine dato je izrazom:

2

1/ 2

4

2

b b acx

a

− ± −= .

Sledi kod funkcije koja rešava zadati problem, a zatim i glavni program iz koga se poziva generisana funkcija za određene koeficijente a, b, c.

Funkcija kvadratna_jednacina:

function [x1 x2] = kvadratna_jednacina(a,b,c)

%izlazne promenljive su x1 i x2. Ime funckije je kvadratna_jednacina i pod tim imenom se snima funkcija kao funkcijska datoteka tj. kao .m fajl. Isto ime se kasnije koristi za pozivanje funkcije iz glavnog programa. Ulazne promenljive su a, b, c koje predstavljaju koeficijente jednacine

x1 = (-b + sqrt(b^2 - 4*a*c))/(2*a);

x2 = (-b - sqrt(b^2 - 4*a*c))/(2*a);

Nakon generisanja funkcije, potrebno pozivanjem File/Save As snimiti funkciju pod imenom kvadratna_jednacina.

Glavni program:

clear all; close all

a = 5;b = 8;c = 12;

[resenje1 resenje2] = kvadratna_jednacina(a,b,c);

% Promenljiva resenje1 prihvata vrednost iz promenljive x1, a promenljiva resenje2 vrednost iz promenljive x2. Nakon pokretanja glavnog programa u Komandnom prozoru prikazuju se resenja:

>>resenje1

resenje1 =

-0.8000 + 1.3266i

>> resenje2

resenje2 =

-0.8000 - 1.3266i

Page 26: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 26

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

7. Numerička diferencijacija

Prema definiciji, izvod funkcije f određen je izrazom:

( ) ( )0

lim .h

f x h f xdf

dx h→

+ −=

Ukoliko je x vektor:

x = [x(1) x(2) ... x(n)]

onda komanda diff(x) daje vektor razlika dva susedna elementa vektora x:

diff(x) = [x(2)-x(1) x(3)-x(2) ... x(n)-n(n-1)].

Treba napomenuti da dobijeni vektor ima jedan element manje nego vektor x. Neka su dati vektori x i y koji predstavljaju argumente i vrednosti funkcije y(x), respektivno. Izvod dy/dx se može odrediti pozivanjem komande:

>> diff(y)./diff(x);

Komanda diff(y,n)./diff(x,n) generiše n-ti izvod funkcije y.

Zadatak 4: Ispitati funkciju 3x3 – x2 + 6, čiji je izvod po x jednak 9x2 – 2x. Nacrtati u istom prozoru izvod kao grafik funkcije 9x2 – 2x i izvod posmatrane funkcije koristeći komandu diff i time pokazati da su ova dva grafika ista.

x = linspace(0,50,5000);

y = 3*x.^3 - x.^2 + 6;

figure(1);subplot(2,1,1);

plot(x,9*x.^2 - x,'LineWidth',2);

% Prethodna komanda iscrtava funkciju y(x). Da bi se grafički prikazao i vektor diff(y)./diff(x) potrebno je definisati x osu sa jednim elementom manje:

for i=1:length(x)-1

xosa(i) = x(i);

end

subplot(2,1,2);

plot(xosa,diff(y)./diff(x),'LineWidth',2);

Page 27: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 27

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

8. Numerička integracija

Određeni integral funkcije f(x) od a do b, predstavlja površinu koju kriva zahvata sa apcisom (x osom) u granicama [a,b]. U numeričkoj matematici postoji više algoritama tj. metoda za izračunavanje određenog integrala. MatLab nudi tri ugrađene funkcije za izračunavanje određenog integrala: quad, quadl, trapz.

Komanda quad koristi Simpson-ovu metodu integraljenja i ima sledeći oblik:

quad('funkcija',a,b) ili quad(@funkcija,a,b).

Komanda quadl koristi Lobatto-ovu metodu integraljenja. Ima identičan oblik kao i prethodna funkcija:

quadl('funkcija',a,b) ili quadl(@funkcija,a,b)

Komanda trapz se koristi za integraljenje funkcije zadate u obliku skupa tačaka. Koristi metodu trapeza. Oblik komande je:

trapz(x,y)

gde su x i y vektori x koordinata i y koordinata. Vektori moraju imati isti broj elementa.

Zadatak 5: Primenom ugrađenih funkcija odrediti numeričku vrednost integrala:

( )( )8

0

exp 3 10 2 10x x x dx− + + + .

>> quad('x.*exp(-3*x+10) + 2*x + 10',0,8)

ans =

2.5914e+003

>> quadl('x.*exp(-3*x+10) + 2*x + 10',0,8)

ans =

2.5914e+003

Postoji još jedan način na koji se mogu izvršiti prethodne komande i on podrazumeva prethodno definisanje funkcijske datoteke koja sadrži definiciju funkcije f = x*exp(-3*x+10) + 2*x + 10, a zatim pozivanje komande u quad obliku:

>> quad(@f,0,8)

Page 28: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 28

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

9. Rešavanje sistema linearnih jednačina

Sistem jednačina definisan izrazima:

11 1 12 2 13 3 1

21 1 22 2 23 3 2

31 1 32 2 33 3 3

a x a x a x b

a x a x a x b

a x a x a x b

+ + =+ + =+ + =

Matrični zapis ovog sistema glasi:

,A X B⋅ =

11 12 13

21 22 23

31 32 33

a a a

A a a a

a a a

= , 1

2

3

b

B b

b

= , 1

2

3

x

X x

x

= ,

pa je moguće primenom operacije deljenja sa leva (\) rešiti jednačinu AX = B:

>> X = A\B;

što je ekvivalentno matematičkom rešenju X = A-1B. Dobijeni vektor X je vektor kolona koji u prvom redu ima rešenje po x1, u drugom po x2, a u trećem po x3.

Page 29: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 29

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

10. Rešavanje diferencijalnih jednačina

Diferencijalne jednačine igraju jako važnu ulogu u nauci i tehnici jer predstavljaju osnovu gotovo svakog fizičkog procesa. I ne samo fizički procesi, već i razni ekonomski, biološki, sociološki, klimatološki i drugi procesi, modeluju se određenim diferencijalnim jednačinama ili sistemima diferencijalnih jednačina. Problem je, međutim, što se jako mali broj tih jednačina može rešiti analitički. Programski paket MatLab pruža širok opseg funkcija tj. "solvera" koji služe za numeričko rešavanje složenih problema.

U narednom razmatranju biće dat prikaz rešavanja običnih diferencijalnih jednačina (Ordinary Differential Equations, ODE) sa početnim uslovima. Obična diferencijalna jednačina data je u obliku:

( , )dx

f x tdt

= ,

gde je f(x,t) poznata funkcija od x i t. Rešavanje ovakve diferencijalne jednačine prvog reda (jednačina je prvog reda pošto u njoj figuriše prvi izvod promenljive x) zahteva poznavanje jednog početnog uslova, odnosno vrednost promenljive x0 u nekom trenutku t = t0.

Diferencijalne jednačine se mogu podeliti na linearne i nelinearne jednačine. Linearna diferencijalna jednačina je ona jednačina u kojoj nepoznata, odnosno zavisna promenljiva x i njeni izvodi figurišu u linearnom smislu. Prema tome, jednačina:

1 2

dxc x c

dt= +

u kojoj su c1 i c2 konstante, je linearna, jer su x i dx/dt prvog stepena. Štaviše, prethodna jednačina bila bi linearna čak i onda kada bi c1 i c2 bili komplikovane funkcije vremena t, jer je od značaja samo na koji način u jednačini figurišu zavisna promenljiva x i njeni izvodi. Primeri linearnih diferencijalnih jednačina su:

(1 ) .dx

x xdt

= −

sin ,

dxx

dt=

...dx

x x tdt

= +

Nelinearne diferencijalne jednačine se, generalno gledano, mogu podeliti na dve klase: autonomne i neautonomne jednačine. Ukoliko se ovom trenutku razmatranje ograniči na nelinearne diferencijalne jednačine prvog reda, autonomne jednačine su one kod kojih je brzine promene x prosto funkcija samog rešenja x i ne zavisi eksplicitno od vremena:

( )dx

f xdt

= .

Kod neautonomnih jednačina, brzina promene x zavisi i od vremena t. Analitička rešenja su moguća samo za specijalne slučajeve.

10.1 Postupak rešavanja diferencijalne jednačine

Prilikom rešavanja diferencijalnih jednačina poželjno je pratiti proceduru koja će biti izložena korak po korak.

Page 30: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 30

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

Korak1 - Postavka problema

Za konkretan fizički problem generisati matematičko-fizički model, odnosno formulisati odgovarajuće diferencijalne (i ukoliko je potrebno, alegabarske) jednačine.

Korak 2 - Formiranje funkcijske datoteke

Svaku diferencijalnu jednačinu predstaviti u skladu sa sintaksom MatLab-a u odgovarajućoj funkcijskoj datoteci, što omogućava jednostavno pozivanje jednačina iz bilo kog drugog MatLab programa, bilo iz Editora ili komandnog prozora. Slično kao i kod formiranja bilo koje druge funkcije, funkcijska datoteka se definiše zaglavljem koje ima oblik:

function lokalna_promenljiva = ime_funkcije(promenljive)

gde je lokalna_promenljiva lokalna promenljiva u koju se smešta rezultat izvršenja funkcije, a ime_funkcije je proizvoljno korisničko ime po kome će se funkcija pozivati iz glavnog programa. Formiranje jednostavne funkcijske datoteke biće prikazano na primeru autonomne nelinearne jednačine prvog reda kojom se mogu modelovati epidemski procesi.

Zadatak 6: Jedna kolonija od 1000 bakterija razmnožava se brzinom od r = 0.8 jedinki na sat. Koliko će bakterija biti u koloniji nakon 10 sati?

Rešenje: Proces razmnožavanja bakterija se može modelovati diferencijalnom jednačinom oblika (korak 1):

,dN

rNdt

=

gde je N broj individua tj. populacija bakterija, a početni uslov je definisan sa N(0) = 1000. Ova jednačina se može rešiti analitički i ima dobro poznato rešenje u obliku ekponencijalne funkcije:

( ) ( ) ( )0 expN t N rt= .

Rešenje ove jednačine se može dobiti i numerički, koristeći integrisan MatLab ODE solver.

Nakon postavke problema, pristupa se pisanju funkcijske datoteke (korak 2) u MatLab editoru:

function dNdt = bakterije(t,N) % zaglavlje funkcijske datoteke

% u lokalnu promenljivu dNdt smesta se rezltat izvrsenja funkcije;

% ime funkcije je bakterije i pod tim imenom ce funkcija biti pozivana iz nekog drugog programa ili direktno iz komandnog prozora

% promenljive su t i N - vreme i populacija bakterija.

% Obratiti paznju da se ne kraju komandne linije u kojoj se definise funkcija NE stavlja tačka-zarez (;) ! dNdt = 0.8*N; % telo funkcije

Ovako napisanu funkcijsku datoteku potrebno je snimiti kao .m fajl pod imenom koje odgovara imenu funkcije, u konkretnom slučaju bakterije.m. Osim toga, funkciju je uvek potrebno snimiti u isti folder gde se nalazi i glavni program iz kog će ta funkcija biti pozvana.

Korak 3 - Odabir solvera

MatLab nudi više ugrađenih solvera za rešavanje diferencijalnih jednačina. Svaki od njih koristi neki drugi algoritam tj. neku drugu numeričku proceduru i pogodan je za određeni tip

Page 31: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 31

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

jednačina. U sledećoj tabeli dat je pregled ODE solvera i date su napomene kada se dati solver primenjuje:

SSoollvveerr TTiipp pprroobblleemmaa PPrreecciizznnoosstt KKaaddaa kkoorriissttiittii

ode45 Linearan Srednja Prvo probati ovaj solver (Runge-Kuta

metoda - single step metoda)

ode23 Linearan Niska Kada se ne traži velika preciznost (Euler-ova metoda - single step)

ode113 Linearan Visoka Multistep metoda – kada se traži

visoka preciznost

ode15s Nelinearan Srednja Ako ode45 ne radi

ode23s Nelinearan Niska Kada se ne traži velika preciznost

ode23t Osrednje nelinearan Niska Kada se ne traži velika preciznost

ode23tb Nelinearan Niska Kada se ne traži velika preciznost

Korak 4 - Pokretanje ODE solvera iz glavnog programa i podešavanje parametara ODE solvera

Komanda koja pokreće izabrani solver i poziva funkciju definisanu u okviru funkcijske datoteke ima oblik:

[t,x] = odgovarajuci_solver('ime funkcije',[interval_t],x0);

Odnosno, za slučaj konkretnog primera iz zadatka 6:

>> [t,N] = ode23('bakterije',[0 10],1000);

% promenljiva t prihvata vremensku osu, promenljiva N prihvata odgovarajuću vremensku zavisnost rešenja, odnosno broja bakterija.

% upotrebljen je solver ode23, koji poziva prethodno definisanu funkciju ‘bakterije’

% vremenski interval u toku kog se posmatra dinamika sistema je definisan sa [0 10] s obzirom na to da se u zadatku trazi populacija bakterija nakon 10 sati, a da je zadat pocetni uslov da je populacija u trenutku t = 0 bila 1000 jedinki

Ceo programski kod glavnog programa koji pokreće ODE solver i prikazuje rešenje jednačine izgleda ovako:

>> clear all, close all

% definisanje pocetnog i krajnjeg trenutka vremena

>> tpoc = 0;tkraj = 10;

% definisanje vremenske ose sa rezolucijom od 100 tacaka

>> vreme = linspace(tpoc,tkraj,100);

>> N0 = 1000; % pocetni uslov N(0)= 1000

% pokretanje ode solvera.

>> [t,N]=ode23('bakterije',[tpoc tkraj],N0);

% Upotrebljen je ode23, zato sto je ovo problem koji numericki nije zahtevan (sto potvrdjuje cinjenica da za ovaj problem postoji analiticko resenje). Solver ode23 nema veliku preciznost ali daje veoma dobre rezultate za resavanje jednacina koje cije resenje je eksponencijalna funkcija. Osim toga ode23 nije vremenski zahtevan solver pa se resenje dobija relativno brzo.

% prikaz rezultata

Page 32: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 32

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

>> figure(1); plot(t,N,'LineWidth',2);

>> title('Populacija bakterija nakon 10h - Numericko resenje');

>> xlabel('Vreme');

>> ylabel('Populacija');

% analiticko resenje jednacine

>> Nanaliticko = N0*exp(0.8*vreme);

>> figure(2);plot(vreme,Nanaliticko,'LineWidth',2);

>> xlabel('Vreme');

>> ylabel('Populacija');

>> title('Analiticko resenje');

Sledi još jedan primer u okviru kog će biti prikazano rešavanje neautonomne nelinearne diferencijalne jednačine prvog reda.

Zadatak 7: Na jednom kraju trkačke staze postavljen je sigurnosni odbojnik koji zaustavlja vozilo nad kojim je vozač izgubio kontrolu. Sila kojojm odbojnik deluje na vozilo funkcija je i brzine i pomaka prednje ploče odbojnika:

( )33 1 ,F Kv x= +

gde je K konstanta proporcionalnosti iznosi 30 sÿkg/m5. Vozilo čija je masa m = 1500 kg, udara u odbojnik brzinom od 90 km/h. Nacrtati krivu brzine vozila kao funkciju položaja na intervalu od 0 do 3 m.

Korak 1 – Postavka problema:

U trenutku kada automobil udari u odbojnik, koji je na slici prikazan kao opruga, na automobil deluje sila u smeru koji je suprotan od smera kretanja automobila i usporava automobil do njegovog zaustavljanja. Na osnovu II Newton-ovog zakona:

0 1 2 3 4 5 6 7 8 9 100

0.5

1

1.5

2

2.5

3x 106 Populacija bakterija nakon 10h

Vreme

Pop

ulac

ija

0 1 2 3 4 5 6 7 8 9 100

0.5

1

1.5

2

2.5

3x 106

Vreme

Pop

ulac

ija

Analiticko resenje

v

x

Page 33: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 33

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

ma F= −

( )33 1ma Kv x= − +

( )33 1 ,K

a v xm

= − +

Kako se u zadatku traži grafik brzine u zavisnosti od pređenog puta (koordinate x), a ne vremena t, potrebno je izvršiti smenu promenljivih u diferencijalnoj jednačini:

1dv dv dv dx dv dx dv

a vdt dt dt dx dx dt dx

= = ⋅ = = = .

pa diferencijalna jednačina postaje:

( )33 1dv K

v v xdx m

= − +

( )32 1

dv Kv x

dx m= − +

Korak 2 – Formiranje funkcijske datotetke:

function dvdx = odbojnik(x,v)

global k m

% komanda global definise da su k i m globalne promenljive. Ovim se omogucava da se vrednost promenljivih definise u glavnom programu a da se koriste i u ovoj funkcijskoj datoteci. Moguce je i definisati ove promenljive diretno u samoj funkcijskoj datoteci tj. umesto komande global k m definisati k = 30; m = 1500; ali se time smanjuje fleksibilnost programa

dvdx = -k/m*v^2*(x+1)^3; % telo funkcije

Korak 3 i 4 – Odabir solvera i glavni program:

>> global k m

>> k = 30; m = 1500; v0 = 90*1000/3600;

>> [x v] = ode45('odbojnik',[0:0.1:3],v0);

>> plot(x,v,'LineWidth',2);

>> title('Brzina u funkciji od pomeraja x');

>> xlabel('x [m]'); ylabel('Brzina [m/s]');

Page 34: uvod MatLab skripta-2010

M.Krstić, J.Crnjanski: Uvod u MatLab 34

2009 ©© KKaatteeddrraa zzaa MMiikkrrooeelleekkttrroonniikkuu uu tteehhiiččkkuu ffiizziikkuu,, EElleekkttrrootteehhnniiččkkii ffaakkuulltteett,, BBeeooggrraadd

0 0.5 1 1.5 2 2.5 30

5

10

15

20

25Brzina u funkciji od pomeraja x

x [m]

Brz

ina

[m/s

]