You are on page 1of 78

Obine diferencijalne

jednaine Numeriko
reavanje
Modeliranje i simulacija
sistema

Obine diferencijalne
jednaine (ODJ)
engl. Ordinary Differential Equation (ODE)
U matematici ODJ je jednaina koju ini funkcija
jedne nezavisne promenljive i njenih izvoda.
Veoma su este u modelovanju dinamikih sistema
U simulacijama nezavisno promenljiva ja vreme t

Generalna definicija ODJ:


(n1) )

f (t, y, y , y , y ,....y
(n1) , (n) ) 0

f (t, y, y , , ,...., y
y
y
y

y (n)

il
i

gde je:

y dy , y d 2 y ,..., y
dt
dt 2

(n)

dny
dt n

Eksplicitna forma

Implicitna forma

Parcijalne diferencijalne jednaine su sloenije od ODJ jer sadre


izvode vie nezavisnih promenljivih.

Ne razmatramo.

Linearna ODJ
Linearna ODJ sadri linearnu kombinaciju
izvoda zavisno promenljive y
n1

y (n) ai (t) y (i) r(t)


i0

ili
y

(n)

an1 y

(n1)

... a1 y a0 y r(t)

Linearne ODJ se reavaju na poseban nain


koji je dosta jednostavniji od opteg
postupka.

Svoenje ODJ na sistem DJ


1. reda
Svaka ODJ se moe napisati kao ekvivalentan
sistem obinih diferencijalnih jednaina 1. reda.
Jedan od naina za takvu transformaciju je
uvoenje smena
yk y

Dobija
se:

(k 1)

, k 1,2,..., n

ili zapisano u vektorskom


obliku:

y1 y2

yn1 yn

y2 y3

yn f (t, y1 ,..., yn )

...

y f (t, y)
y1

y1

y ... , y ...

,f

y
n

f1


...

f
n

y2
y3
...

f (t, y1,..., y

Primer transformacije
Posmatra se ODJ: d (1 y 2 ) dy y 0
2

dt
Smene:

y y
1

y d
y
2
dt

d
d
t

d
y

dy
1

dt
dt
d 2 d 2y
y
dt
dt 2

dt

d
y

y
1

dt
d 2 (1 y 2 )
y
y
dt

y
2

Uopten sistem DJ 1.
reda

Sistem n obinih diferencijalnih jednaina prvog


reda, gde se pojavljuje n zavisno promenljivih
y1,, yn
dy f ( y, ,..., , t), y ( ) y
1
1
n
y 2y
t 0
1
1
10
dt
dy f ( , ,..., , t), y ( ) y
2
2
n
2 0
20
y y 2y
t
1
dt
...
dy f ( , ,..., , t), y ( )
n
n y y 2y
n
n t0y
n0
1
dt

Numeriko reavanje ODJ


Svodi se na reavanje
jednaina 1. reda

sistema

diferencijalnih

ire posmatrano, sistem obinih diferencijalnih


jednaina se takoe svodi na sistem diferencijalnih
jednaina 1.
Primer: m1x1 c1x1 k1 x1 k (x1 x2 ) f (t)
c 2 x
m2 x
2
k

2x 2

x) 0

(x

y1 x1
y2

x1

x2

3
4

x2

y x y
1

y x

f (t) c

y
2

y x y 4
3

ky k(y
y
2

1 1

(Bez gubitka na optosti) nadalje


reavanje jedne DJ 1. reda.

se posmatra

Jednostavniji
problem
Problem:

dy f (t),
dt

ima analitiko
reenje:

y( ) y
0
t 0
t

y(t) y0 f (t)dt
t

Konkretna vrednost
a

y(a) f (t)dt,

t0 0

predstavlja povrinu
sa slike

f(t)
+

t0

Ideja numerikog
raunanja
Odredimo vrednosti funkcije f(t) u diskretnim
trenucima ih, i=0,1,2,
Vrednost integrala se moe aproksimirati sumom
pravougaonika sa slike
N 1

y(a)

f(t)

f (ih) h
i0

...

t0=0

t
a

Ovakva raunica je veoma gruba i praktino se ne


koristi.

Ako se h smanji greka se smanjuje, ali se produava


vreme
raunanj
a.

Numeriko reavanje DJ
1. reda
Proble
m:

dy f ( y, t), y( )
dt
t 0y

Reenj
e:
polazi se od poznatih (t0, y0) i sukcesivno raunaju
parovi (ti, yi) za i=1,2,
Iterativan raun se sprovodi korak-po-korak, gde
se (ti+1, yi+1) rauna na osnovu prethodno
sraunatog (ti, yi).

Ovde e se posmatrati:
Ojlerov postupak, i
Metode Runge-Kuta

Leonhard Euler
Born

15 April 1707
Basel, Switzerland

Died

18 September 1783 (aged 76)


[OS: 7 September 1783]
Saint Petersburg, Russian Empire

Residence

Kingdom of Prussia, Russian


Empire
Switzerland

Nationality

Swiss

Fields

Mathematics and physics

Institutions

Imperial Russian Academy of


Sciences
Berlin Academy

Alma mater

University of Basel

Doctoral advisor Johann Bernoulli


Doctoral
students

Nicolas Fuss
Johann Hennert
Joseph Louis Lagrange

Stepan Rumovsky

Ojlerov postupak
Vrednost yi+1 se moe odrediti na osnovu razvoja u
Tejlorov red u okolini take (ti, yi)
y yi y yi dyi h d 2 yi h2 ...
h ti1 ti
i1
dt

dt

2!

Za h malo yi+1 se aproksimira sa


y i1 y d i h
y
i
dt

Nakon diferenciranja se
dobija
d
y

d i d 2yi
y
dt
dt
dt 2
i1

d 2y i
ili

i1

dy

d
y

dt 2

dt

dt
h

Smenom u gornji izraz se dobija bolja


aproksimacija
d
y
yi1 yi

dt

2 i

dt

2!

d i1 d i
y
y h
h

dt
dt
dt 2

d
y

d y h2
yi

Ojlerov
postupak (2)
y d
y

i1

i1

dy

d
y

dt

dt

dt 2

Raunanje izvoda trai


vrednost yi+1 koju jo ne
znamo!

U svakoj iteraciji :
1. Uvodi se predviena (predicted)
vrednost
dy i
p
yi 1 yi dt h

p
i1

d
y

dt

c
p
y

i 1

2. I ona se koriguje

i1

dt
i

metod 1. reda
(ako se ne radi
drugi korak)

Korekcija
,a
ujedno i
procena
greke

metod 2. reda

Ojlerov postupak realizacija


U tekuoj iteraciji
indeks i+1 je zamenjen
sa 1
prethodna iteracija ima
indeks 0
function [t1,y1c,e] =
dy0 = f(t0,y0);
y1p = y0 + dy0*h;
t1 = t0 + h;
dy1 = f(t1,y1p);
e = (dy1-dy0)*h/2.0;
y1c = y1p + e;

OjlerKorak(f,t0,y0,h)
% izvod u tacki (t0,y0)
% izvod u tacki (t1,y1p)
% procena greske
% korekcija

Reenje nad intervalom [0, tk] sa


korakom h
function Y = Ojler2(f,tk,y0,h) t0
= 0;
Y = y0;

yp
y

d
y
0

dy1

dt

yc
y

dt

p
1

0h

dy0 h

dt 2

koraka = tk / h;
for i = 1:koraka
[t1,y1,e] = OjlerKorak(f,t0,y0,h);
y0 = y1;
t0 = t1;
Y = [Y; y1];
% zapamti
y1
end

Primer: DJ 1.
reda
Problem:
dy
t
e

dt

function dy = difJedn(t,y)
% opis DJ
alpha=1.0; lambda=1.0;
dy = lambda*exp(-alpha*t)*y;

y y(0) y0

function y = analitickoResenje(t,y0) %
analitiko reenje
alpha=1.0; lambda=1.0;
y = y0*exp(lambda/alpha*(1-exp(-alpha*t)));

Analitiko
reenje:

y(t) y0 e

1e

tkraj
= 5;
t = (0:tkraj)';
y0 = 1;
ya = analitickoResenje(t,y0);
y1 = Ojler2( @difJedn, tkraj, y0, 1 );

% h=1

y05 = Ojler2( @difJedn, tkraj, y0, 0.5 );


% h=0.5
y05 = y05(1:2:end); % izbaci reenja u 0.5s, 1.5s,

[t
y
a
y
1
y
1y
a
y
0
5
y
0
5y
a]
pl
ot
(t,
y
a,
t,
y
1,
'.'
,
t,
y
0
5,
'.'
)

Primer: rezultati
t
ya
ye1
ye1-ya
----------------------------------------------------------------0.0
1.0000
1.0000
0
1.0
1.8816
1.8679
-0.0137
2.0
2.3742
2.3843
0.0101
3.0
2.5863
2.6131
0.0268
4.0
2.6689
2.7033
0.0343
5.0
2.7000
2.7373
0.0373

ye05
1.0000
1.8786
2.3786
2.5952
2.6799
2.7118

Legenda:
ya
analitiko reenje
ye1 Euler 2. reda sa fiksnim korakom h=1
ye05 Euler 2. reda sa fiksnim korakom h=0.5

ye05-ya

0
-0.0030
0.0044
0.0090
0.0110
0.0117

2.8
2.6

2.4
2.2

2
1.8
1.6
1.4
1.2
10

0.5

1.5

2.5
t

3.5

4.5

Promenljivi korak
integracije
Raunanje korekcije zavisi od
koraka h
Ideja: na osnovu veliine prilagoditi
korak h
za veliko smanjiti korak, a
za malo poveati korak

Parametri prorauna:
Dozvoljena relativna greka relGr
Dozvoljena apsolutna greka apsGr
Minimalan korak hmin

dy

i1

dt

dy

dt 2

Promenljivi korak integracije


(2)
function [T, Y] = Ojler2ad(f,tk,y0,hmin,apsGr,relGr) t0
= 0;
Y = y0; T = t0;
h = (tk-t0)/8.0;
% pocetni korak
while t0 < tk
if t0+h > tk, h=tk-t0; end
% ogranici poslednji korak
[t1,y1,e] = OjlerKorak(f,t0,y0,h);
korakDobar = true;
% fleg za kraj koraka integracije
% Ako je greska velika smanji korak i resetuj fleg
if h > hmin
if abs(e) > abs(y1)*relGr+apsGr, h=h/2.0; korakDobar=false; end
if h < hmin, h=hmin; end
% ogranici min korak
end
if korakDobar
% Nema greske: nastavi ka novoj tacki
y0 = y1; t0 = t1;
Y = [Y; y1];
T = [T; t1];
% da li se korak moze povecati?
if abs(e) < (abs(y1)*relGr+apsGr)/4.0, h=h*2.0; end
end

end

Primer: rezultati sa promenljivim


korakom
tkraj = 5;
t = (0:tkraj)'; y0
= 1;
ya = analitickoResenje(t,y0);
[t3, y3]=Ojler2ad(@difJedn,tkraj,y0,0.01,0.01,0.01);
[t4, y4]=Ojler2ad(@difJedn,tkraj,y0,0.01,0.001,0.000001);
y3i = interp1(t3,y3,t);
y4i = interp1(t4,y4,t);
[t ya y3i y3i-ya y4i y4i-ya]

t
ya
y3i
y3i-ya
----------------------------------------------------------0.0
1.0000
1.0000
0
1.0
1.8816
1.8773
-0.0043
2.0
2.3742
2.3732
-0.0010
3.0
2.5863
2.5862
-0.0001
4.0
2.6689
2.6755
0.0065
5.0
2.7000
2.7085
0.0085
Legenda:
ya analitiko reenje

y4i
1.0000
1.8811
2.3736
2.5858
2.6686
2.6998

y4i-ya
0
-0.0005
-0.0006
-0.0004
-0.0003
-0.0002

y3i Euler 2. reda sa promenljivim korakom: h=0.01 relGr=0.01 apsGr=0.01


y4i Euler 2. reda sa promenljivim korakom: h=0.01 relGr=0.001 apsGr=0.000001

Primer

y3i

y4i

2.8
2.6

2.8
2.6

2.4

2.4

2.2

2.2

1.8

1.8

1.6

1.6

1.4

1.4

1.2

1.2

0.5
0

1.5

2.5

3.5

4.5

0.5

1
0

1.5

2.5

3.5

4.5

Metode Runge-Kuta (RK)


Runge i Kuta su uoptili Ojlerov postupak
Pored toga, uveli su aproksimacije za vie
lanove razvoja y u Tejlorov red
Ako se aproksimiraju lanovi do 2. izvoda onda se govori
o metodama
2.reda (postoji itava familija tih metoda)
Ako se aproksimiraju lanovi do 3. izvoda onda se govori
o metodama
3.reda (opet, vie metoda)

Carl Runge
Born

Residence

30 August 1856
Bremen, German Confederation
3 January 1927 (aged 70)
Gttingen, Weimar Republic
Germany

Citizenship

German

Died

Fields

Mathematics
Physics
Institutions
University of Hannover (18861904)
Georg-August University of Gttingen
(1904
1925)
Alma mater
Berlin University
Doctoral advisor Karl Weierstrass
Ernst Kummer
Doctoral
Max Born
students
Known for
RungeKutta method
Runge's phenomenon

LaplaceRungeLenz vector

Martin Wilhelm Kutta


Born

Residence

November 3, 1867
Pitschen, Upper Silesia
December 25, 1944 (aged 77)
Frstenfeldbruck
Germany

Nationality

German

Fields

Mathematician

Institutions

University of Stuttgart
RWTH Aachen
University of Breslau
University of Munich
C. L. Ferdinand Lindemann

Died

Alma mater
Doctoral
advisor
Other
academic
advisors
Known for

Gustav A. Bauer
Walther Franz Anton von Dyck

Runge-Kutta method
Zhukovsky-Kutta aerofoil
KuttaJoukowski theorem

Kutta condition

RK 2. reda
Ojlerov metod ponovo
y p y i f ( y , t )h y i k
i

i1

i f
(y

k , i h)
t f
1

y k k k

y
c

i1

Moe se zapisati
kao

yi1 yi 2 k1 2
k2 k1 f ( yi , ti )h

k2 f ( yi k1, ti h)h

(y ,t
i i

) h

k 2 k

2
2
y 1 k 1k
i
2
2 1 2

RK uvodi tri konstante c1,


c2, a2

y i1 y i c k
c
1 1

k1 f ( yi , ti )h
k2 f ( yi a2
k1, ti a2 h)h

RK 2. reda
Moe se pokazati da izmeu c1, c2, a2 vrednosti
postoje zavisnosti
(izvoenje postoji u odvojenom materijalu)
c1 c2 1

ca 1
2 2

Ovaj sistem 3 jednaine sa 2 nepoznate daje slobodu


izbora reenja.
Jedno mogue reenje vodi ka Ojlerovom metodu 2.
reda
c 1 , c 1 , a 1
2
2
1
2
2

Postoje i druga reenja, npr.


c1 0, c2 1, a2 1

c1 1 , c2 3 , a2 2

U tim reenjima se vrednosti f raunaju unutar


intervala h.

RK 3. reda
Uvode se konstante: c1, c2, c3, a2,
a3, b3
yi1 yi c1k1 c2 k2
c3k3 k1 f ( yi , ti )h
k

f
(y

k 3 f
(y

k ,
t a

3 1

Veze konstanti
c
c
1

2 1

b k
(a

c 3 1

Isto kao kod RK 2.


reda

2h)

b ) 2,
k t
3

a h)
h
3

c2a2 c a 3 1 2
3
2
c2a2 c
3
c3 ( 3

a 23 1 3
3

)2 16
a

Mogue reenje
c 28
1

c2 3 3 8
c
a2 323
a
b 0
3

RK 3. reda - realizacija
function [T, Y] = rkutta3( F, tp, tf, y0, h )
% Metod integracije RUNGE-KUTTA 3. reda sa nepromenljivim korakom
T = tp : h : tf; n
= length(T);
Y = zeros( n, length(y0) );
Y(1,:) = y0(:)';
t = tp;
for i = 1 : n-1 y
= Y(i,:)';
k1 = h * F( t, y );
k2 = h * F( t+2/3*h, y+2/3*k1 );
k3 = h * F( t+2/3*h, y+2/3*k2 );
Y(i+1,:) = (y + k1/4 + 3/8*k2 + 3/8*k3)'; t =
t + h;
end

Primer: rezultati RK 3
tkraj = 5;
t = (0:tkraj)'; y0
= 1;
ya = analitickoResenje(t,y0);
y1 = Ojler2(@difJedn,tkraj,y0,1);
[t3,y3] = rkutta3(@difJedn,0,tkraj,y0,1); % h=1 [t ya
y1 y1-ya y3 y3-ya]

t
ya
y1
y1-ya
---------------------------------------------------------0.0
1.0000
1.0000
0
1.0
1.8816
1.8679
-0.0137
2.0
2.3742
2.3843
0.0101
3.0
2.5863
2.6131
0.0268
4.0
2.6689
2.7033
0.0343
5.0
2.7000
2.7373
0.0373
Legenda:
ya analitiko reenje
y1 Euler 2. reda sa fiksnim korakom: h=1
y3 RK 3. reda sa fiksnim korakom: h=1

y3
1.0000
1.8732
2.3642
2.5761
2.6588
2.6899

y3-ya
0
-0.0083
-0.0100
-0.0102
-0.0101
-0.0101

RK 4-5. reda
function [T,
Y]= rkutta45( F, tp, tf, y0, hmin, absGr, relGr )
% Metod integracije RUNGE-KUTTA 4-5 reda, ima promenljivi korak
t = tp;
T =t;
y = y0(:);
Y =y';
h = (tf-tp)/8.0;
% pocetni korak
while t < tf
if t+h > tf, h = tf-t; end
% ogranici poslednji korak
k = h * F(t, y );
1
k = h * F(t+1/4*h, y+1/4*k1 );
2
k = h * F(t+3/8*h, y+1/32*(3*k1+9*k2) );
3
k = h * F(t+12/13*h, y+1/2197*(1932*k1-7200*k2+7296*k3) );
4
k = h * F(t+h, y+439/216*k1-8*k2+3680/513*k3-845/4104*k4 );
5
k = h * F(t+1/2*h, y-8/27*k1+2*k2-3544/2565*k3+1859/4104*k4-11/40*k5 );
6
y4 = y + 25/216*k1 + 1408/2565*k3 + 2197/4104*k4 - 1/5*k5;
y =y
16/135*k1 + 6656/12825*k3 + 28561/56430*k4 - 9/50*k5 + 2/55*k6;
5 +
e = y5 - y4;
korakDobar = true;
% fleg za kraj koraka integracije
if h > hmin
% Ako je greska velika smanji korak i resetuj fleg
if all(abs(e) > max(abs(y5)*relGr,absGr)), h=h/2.0; korakDobar=false; end
if h < hmin, h=hmin; end
% ogranici min korak
end
if korakDobar
y = y5; t = t+h;
Y = [Y; y'];

% Nema greske ? nastavi ka novoj tacki (po vremenu)

T = [T; t];
if all(abs(e) < max(abs(y5)*relGr,absGr)/4.0), h=h*2.0; end
en
d
end

% povecati korak?

Primer RK 4-5. reda


[t,y] = rkutta45(@vdpol, 0, 10, [1;0], 1e-6, 1e-6, 1e-6);
plot(t,y,'.-')
function xp = vdpol( t, x )
% Opis Van der Pol-ove dif. jednacine xp
= [x(2);
(1-x(1)^2)*x(2)-x(1) ];

3
2

-1

-2

-30

10

MATLAB i reavanje ODJ


MATLAB sadri ODE metode za reavanje sistema ODJ
1. reda: ode23, ode45, ode113, ode15s, ode23s,
ode23t, ode23tb, ode15i
Sintaksa:
[T, Y] =
vremenskiOpseg, y0, opcije)

solver(difJedn,

solver - je neki od algoritama ode23, ode45,


difJedn - je na opis jednaina koje se reavaju
vremenskiOpseg
Tk krajnje vreme (poetno vreme ==0)
[Tp Tk] interval u kome se trai reenje
[Tp t1 t2 t3 Tk] zadati trenuci u kojima se oekuje reenje

y0 vrednosti zavisno promenljivih u


poetnom trenutku opcije podeavanje
parametara ODE algoritma
Postavlja se funkcijom odeset

Podeava: apsolutnu greku, relativnu greku, poetni korak,


minimalan korak,

T vektor vremenskih trenutaka reenja


Y matrica vrednosti zavisno promenljivih u
trenucima T

Osobine solvera
Naziv

Metod

Stif

Tanost Kada upotrebiti?

ode45

Runge-Kutta
(4,5)

ne

srednja

ode23

Runge-Kutta
(2,3)

ne

Prvo njega probati!


mala
za manje tano
raunanje i
kada je model blago stif
mala do za tano raunanje
numeriki
velika
zahtevnih problema
mala do kada je ode45 spor zbog
stif
srednja
mala
za manje tano
raunanje stif

ode113 AdamsBashforthMoulton
ode15s NDF

ne

ode23s modifikovan

da

Rosenbrock
ode23t trapezoidno
pravilo

srednje mala

da

da

uglavnom uvek.

Za srednje stif probleme

ode23t TR-BDF2
b

da

mala

za manje tano
raunanje stif

Kod stif (krutih) problema neke promenljive stanja se mogu menjati vrlo
sporo u odnosu na interval simulacije, a druge mnogo bre. Metode koje
nisu dizajnirane za stif probleme nisu efikasne jer primenjuju mali korak
integracije.

Osobine solvera (2)

ode45 zasnovan na Runge-Kutta (4,5) metodi (Dormand-Prince)


Jednokoraan - rauna y(tn) u jednom koraku na osnovu y(tn-1)
Pogodan za brojne probleme sa kontinulanim stanjima
Podrazumevan algoritam
ode23 zasnovan na Runge-Kutta (2,3) (Bogacki & Shampine)
Slian ode45, ali moe biti efikasniji za manje tano raunanje i kada je
model blago stif
ode113 je metod promenljivog reda (Adams-Bashforth-Moulton)
Moe biti efikasniji od ode45 za tanije raunanje
Viekoraan - rauna y(tn) na osnovu vie prethodnih vrednosti
ode15s je metod promenljivog reda zasnovan na formulama numerikog
diferenciranja (NDF).
Viekoraan, numeriki rauna Jakobian.
Kod stif problema pogodniji od ode45.
ode23s zasnovan na modifikovanoj Rosenbrock formuli drugog reda
Jednokorani, numeriki rauna Jakobian
Efikasniji je od ode15s za manje tano raunanje
Bolji za neke stif probleme of ode15s
ode23t zasnovan na trapezoidnom pravilu
Pogodan za blage stif probleme
ode23tb je implementacija TR-BDF2: implicitan Runge-Kutta u fazi 1, a
trapezoidno pravilo u fazi 2

Bolji za neke stif probleme of ode15s

ode23/ode45 uticaj tolerancije raunanja


global lambda alpha ncall;
lambda=1.0; alpha=1.0;

% Globalne promenljive
% Model parameteri

function yt=ode1p7(t,y)
% globalne promenljive
global lambda alpha ncall;

for ncase=1:4
reltol=1.0e-02^(ncase+1);
abstol=reltol;
ncall=0;

% tolerancije racunanje

% ODE
yt=lambda*exp(-alpha*t)*y;
% inkrementiraj brojac

% reset brojaca

ncall=ncall+1;
t0=0.0; tf=10.0; tout=[t0:1.0:tf]';
y0=1.0;
% Inicijana vrednost
options=odeset('RelTol',reltol,'AbsTol',abstol);

Program 1.7, dy/dt = *exp(-*t)*y)

2.8

[t,y]=ode23('ode1p7',tout,y0,options);
2.6

% Prikaz rezultata
fprintf('reltol
= abstol = %6.2e\n\n',reltol);
fprintf('
t
ye
y
erry\n');

2.4

2.2

ye=y0*exp((lambda/alpha)*(1-exp(-alpha*t)));
erry=ye-y;
fprintf('%5.1f%9.4f%9.4f%15.10f\n',[t,ye,y,erry]');
fprintf('\n ncall = %5d\n',ncall);
end

y(t)

1.8
1.6
1.4

1.2

10

ode23
reltol = abstol = 1.00e-004
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =
reltol
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =

ye
y
erry
1.0000 1.0000 0.0000000000
1.8816 1.8816 -0.0000020034
2.3742 2.3743 -0.0000638807
2.5863 2.5864 -0.0000933201
2.6689 2.6691 -0.0001103656
2.7000 2.7002 -0.0001284242
2.7116 2.7117 -0.0001434300
2.7158 2.7160 -0.0001552112
2.7174 2.7175 -0.0001581733
2.7179 2.7181 -0.0001592608
2.7182 2.7183 -0.0001592537
73
= abstol = 1.00e-006
ye

erry

1.0000 1.0000 0.0000000000


1.8816 1.8816 -0.0000003221
2.3742 2.3742 -0.0000012721
2.5863 2.5863 -0.0000016231
2.6689 2.6689 -0.0000018847
2.7000 2.7000 -0.0000021190
2.7116 2.7116 -0.0000023452
2.7158 2.7158 -0.0000025176
2.7174 2.7174 -0.0000026866
2.7179 2.7179 -0.0000028883
2.7182 2.7182 -0.0000029806
268

reltol
t

= abstol = 1.00e-008
ye
y

erry

0.0
1.0000
1.0000 0.0000000000
1.0
1.8816
1.8816-0.0000000072
2.0
2.3742
2.3742-0.0000000188
3.0
2.5863
2.5863-0.0000000229
4.0
2.6689
2.6689-0.0000000260
5.0
2.7000
2.7000-0.0000000285
6.0
2.7116
2.7116-0.0000000309
7.0
2.7158
2.7158-0.0000000331
8.0
2.7174
2.7174-0.0000000354
9.0
2.7179 2.7179 -0.0000000374
10.0
2.7182
2.7182-0.0000000394
ncall =
1180
reltol = abstol = 1.00e-010
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =

ye

erry

1.0000
1.0000 0.0000000000
1.8816
1.8816-0.0000000001
2.3742
2.3742-0.0000000003
2.5863
2.5863-0.0000000003
2.6689
2.6689-0.0000000003
2.7000
2.7000-0.0000000004
2.7116
2.7116-0.0000000004
2.7158
2.7158-0.0000000004
2.7174
2.7174-0.0000000004
2.7179 2.7179 -0.0000000005
2.7182 2.7182 -0.0000000005
5392

ode45
reltol = abstol = 1.00e-004
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =
reltol
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =

ye
y
erry
1.0000 1.0000 0.0000000000
1.8816 1.8815 0.0000785756
2.3742 2.3742 0.0000230677
2.5863 2.5862 0.0000132883
2.6689 2.6689 0.0000149230
2.7000 2.7000 0.0000165095
2.7116 2.7115 0.0000172423
2.7158 2.7158 0.0000175329
2.7174 2.7174 0.0000176427
2.7179 2.7179 0.0000176835
2.7182 2.7181 0.0000177068
73
= abstol = 1.00e-006
ye

erry

1.0000 1.0000
1.8816 1.8816
2.3742 2.3742
2.5863 2.5863
2.6689 2.6689
2.7000 2.7000
2.7116 2.7116
2.7158 2.7158
2.7174 2.7174
2.7179 2.7179
2.7182 2.7182
85

0.0000000000
0.0000010053
0.0000010986
0.0000011560
0.0000010643
0.0000010083
0.0000009776
0.0000009652
0.0000009604
0.0000009586
0.0000009579

reltol
t

= abstol = 1.00e-008
ye
y

erry

0.0
1.0000
1.0000 0.0000000000
1.0
1.8816
1.8816 0.0000000237
2.0
2.3742
2.3742 0.0000000012
3.0
2.5863
2.5863 0.0000000128
4.0
2.6689
2.6689 0.0000000112
5.0
2.7000
2.7000 0.0000000428
6.0
2.7116
2.7116 0.0000000092
7.0
2.7158
2.7158 0.0000000014
8.0
2.7174
2.7174-0.0000000231
9.0
2.7179 2.7179 -0.0000000081
10.0
2.7182
2.7182 0.0000000077
ncall =
163
reltol = abstol = 1.00e-010
t
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
ncall =

ye

erry

1.0000
1.0000 0.0000000000
1.8816
1.8816 0.0000000001
2.3742
2.3742-0.0000000001
2.5863
2.5863-0.0000000001
2.6689
2.6689 0.0000000003
2.7000
2.7000 0.0000000004
2.7116
2.7116-0.0000000004
2.7158
2.7158 0.0000000003
2.7174
2.7174 0.0000000002
2.7179 2.7179 -0.0000000003
2.7182
2.7182 0.0000000001
385

ode45 Diferencijalna jednaina


1. reda
> global lambda alpha ncall;
> lambda=1; alpha=1; ncall=0;
> tout = [0 10];
> y0 = 1;
> [t,y]=ode45('ode1p7',tout,y0);
>> ncall
% broj poziva f-je
ncall =
67
>> [t y]
ans =
0
0.0502
0.1005
0.1507
0.2010
0.4510
0.7010
0.9510
1.2010
1.4510
1.7010
1.9510
2.2010
2.4510

1.0000
1.0502
1.1003
1.1502
1.1997
1.4375
1.6551
1.8472
2.0119
2.1503
2.2648
2.3581
2.4334
2.4937
...

9.8002
10.0000
>> size(t,1)

2.7181
2.7181
% broj vrsta u t

ans =
45

>
>
>

ncall=0;
tout = 0:10;
[t,y]=ode45('ode1p7',tout,y0);

> ncall
ncall
=
6
7
>
>
[t
y]
an
s
=

0
1.0000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
10.0000
3

2.5

1.5

1.0000
1.8816
2.3742
2.5862
2.6689
2.7000
2.7115
2.7158
2.7173
2.7179
2.7181

5
t

10

ode45 Dve diferencijalne jednaine 1. reda =


model 2. reda
function yt=ode1p8(t,y)
% parametri modela
a=5.5; b=4.5;
% jednacine yt(1)=a*y(1)+b*y(2); yt(2)=
b*y(1)-a*y(2); yt=yt';
t0=0.0; tf=6.0; tout=[t0 tf];
a=5.5; b=4.5;
y10=0.0 y20=2.0 y0=[y10 y20]';
;
;
[t,y]=ode45('ode1p8',tout,y0);
lambda1=-(a-b); lambda2=-(a+b);
exp1=exp(lambda1*t);
exp2=exp(lambda2*t);
y1e=(y10+y20)/2.0*exp1-(y20y10)/2.0*exp2; y2e=(y10+y20)/2.0*exp1+
(y20-y10)/2.0*exp2;
[t1,y1]=ode45('ode1p8',t0:tf,y0);
plot(t,[y1e y2e],t,y,'.',t1,y1,'ok');
xlabel('t'), ylabel('y1(t),y2(t)')
>> size(t)
ans =
117

> size(y)
ans =
117

1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

1
6

LotkaVolterra
jednaina

Model dinamikog biolokog sistema gde dve vrste


imaju odnos: grabljivica-plen
dx x(y)
dt
dy y(x)
dt

Deterministik
i
Kontinualan
Nelinearan
model 2. reda

x broj jedinki plena (npr. zeevi)


y broj jedinki grabljivica (npr. lisice)
izvodi predstavljaju porast broja populacije, t vreme, a
parametri ,,, odreuju njihovu interakciju.

Pretpostavke:
Plen uvek ima dovoljno hrane
Zalihe hrane za grabljivice zavise od populacije plena

Stopa promene populacije je proporcionalna njenoj


veliini
Okruenje se ne menja u korist jedne vrste i nema
genetske adaptacije

Promena populacije PlenGrabljivica


Promena populacije plena

Raste srazmerno broju jedinki zbor


reprodukcije
Oprada srazmerno uestanosti susreta sa
grabljivicama

Promena populacije grabljivica


Raste srazmerno ishrani
Opada zbog prirodne smrti

dx x
dt xy

dy y
dt xy

Simulacija
function zp = lotka7(t,z,alpha,beta,gama,delta) %
Lotka-Volterra model
x = z(1); y = z(2);
zp = [ x*(alpha - beta*y)
-y*(gama - delta*x) ];
al = 0.7; be = 0.01; ga = 0.8; de = 0.05;
tout = 0:0.05:30;
[t,x] = ode45(@lotka7,tout,[40; 80],[], al, be, ga, de);
plot(t,x)

400

plen
grabljivice

350
300
250
200
150
100
50
0 0

10

15

20

25

30

Analiza uticaja susreta grabljivica


i plena
al = 0.7; ga = 0.5; de = 0.005;
beta = 0.005:0.001:0.02;
tout = 0:0.05:30;
xx = []; yy = [];

% parametar susretanja

for be = beta
[t,x] = ode45(@lotka7, tout, [80; 10], [], al, be, ga, de );
xx = [xx x(:,1)];
yy = [yy x(:,2)];
end
[X,Y]=meshgrid(t,beta);
g=waterfall(X,Y,xx');
xlabel('t'), ylabel('beta-susreti'), zlabel('x1(t,beta)')
set(g,'linewidth',2), title('Populacija plena')
pause
g=waterfall(X,Y,yy');
xlabel('t'), ylabel('beta-susreti'), zlabel('x1(t,beta)')
set(g,'linewidth',2), title('Populacija grabljivica')

Populacija plena

x1(t,beta)

600
500
400
300
200
100
0
0.02
0.015
0.01
0.005

15

10

25

20

30

beta-susreti
Populacija grabljivica

x1(t,beta)

600
500
400
300
200

100
0

0.02

0.015
0.01
0.005

beta-susreti

15

10
t

20

25

30

Van der Pol oscillator


Van der Pol oscilator je nekonzervativni oscilator sa nelinearnim
priguenjem.
Opisuje se diferencijalnom jednainom 2. reda:
d 2 x (1
x
dt 2

dx x 0
dt

gde je x promenljiva zavisna od vremena t, a je parametar


(mera nelinearnosti i jaina priguenja)
Ovaj oscilator je 1920. godine osmislio holandski el. inenjer i
fiziar Balthasar van der Pol dok je radio za Philips.
Balthasar van der Pol
Born

January 27, 1889


Utrecht

Died

October 6, 1959 (aged 70)


Wassenaar

Nationality

Dutch

Fields

Physics

Notable

IEEE Medal of Honor

awards

Van der Pol


jednaina

d 2 x (1 2 ) dx x 0
Diferencijalna jednaina
x
2. reda:
dt 2
dt
y dx
Uvodimo smenu:
dt
d d 2 x (1 x 2 dx
)
Nakon
diferenciranja y
x
dobijamo:
dt d 2
dt
t

Konano model od dve diferencijalne jednaine 1. reda


(ekvivalentan polaznoj jednaini)

dx
dt y
dy

2
dt (1 x ) y x

function zprim = vdpol(t, z, mi)


% Opis Van der Pol-ove dif. jednacine x
= z(1);
y = z(2);
xprim = y;
yprim = mi*(1-x^2)*y x;
zprim = [xprim; yprim];

Van der Pol simulacija


mi=0.2

tp = 0;

tk = 100;

x0 = [0.5 0];

3
2
1

mi = 0.2;
[t, x] = ode45( @vdpol, [tp tk], x0, [], mi);
subplot(3,1,1), plot( t, x(:,1) ), title('mi=0.2'),
axis([0 100 -3 3])
mi = 1;
[t, x] = ode45( @vdpol, [tp tk], x0, [], mi);
subplot(3,1,2), plot( t, x(:,1) ), title('mi=1'),
axis([0 100 -3 3])
mi = 10;
[t, x] = ode45( @vdpol, [tp tk], x0, [], mi);
subplot(3,1,3), plot( t, x(:,1) ), title('mi=10'),
axis([0 100 -3 3])

0
-1
-2
-30

10

20

30

40

50

60

70

80

90

100

60

70

80

90

100

60

70

80

90

100

mi=1
3
2
1
0
-1
-2
-30

10

20

30

40

50
mi=10

3
2
1
0
-1
-2
-30

10

20

30

40

50

Test
solvera
mx cx kx 0, x(0)
x

Proble
m:

, x(0)
v
0

x 0 1, v 0 0
s1 s2

Nije stif :
m 1, c 11, k 10
st
x(t) q e s t
1

e2

s 10, s 2 1
1

q x 0 s1x0 v0 1 10
1
9
s1 s2
q2 s1x0 v0 10

x(t) 1 e 10t
9

9
10 e t
9

Jeste stif :
m 1, c 1001, k 1000
st
s t

q 2e
x(t) q e
2

s 1000, s 2 1
1

q
x

0q

q s 1x 0 v 0
2
s s 2
1

x(t)

999
1000
999

1 e 1000t 1000 e
t

999

999

Test solvera (2)


Algoritam

ode23
ode45
ode113

Taaka Poziv Traje


a
[ms]
Jeste
stif
4079 12250
502

Taak Poziva Traje


a
[ms]
Nije
stif
180
538
35

12149 19435

732

217

349

15

6279 13372

900

126

254

19

ode15s

158

194

29

120

150

23

ode23s

260

1298

85

225

1123

75

ode23t

420

469

70

365

401

61

ode23tb

321

808

237

279

591

56

global brojac
m=1; k=10; c=11;
opt = odeset('AbsTol',1e-6,'RelTol',1e-6);
brojac=0;
tic;
[t,x]=ode23(@oscil5,[0 10],[1;0],opt,m,c,k);

function xp = oscil5(t,x,m,c,k)
global brojac;
xp = [ x(2); (-c*x(2)-k*x(1))/m ];
brojac = brojac + 1;

traje=toc;

You might also like