You are on page 1of 43

Etvs Lornd Tudomnyegyetem

Termszettudomnyi Kar
Alkalmazott Analzis s Szmtsmatematikai
Tanszk

Kznsges Differencilegyenletek
Kezdetirtk Feladatainak Numerikus
Megoldsa Matlab Alkalmazsval
Szakdolgozat

Ksztette: Tmavezet:
Macsotai gnes Dr. Farag Istvn
matematika BSc egyetemi tanr
elemz szakirnyos hallgat

Budapest
2010
Tartalomjegyzk

Bevezets 4

1. Matematikai bevezets 6
1.1. Differencilegyenletek alapvet tulajdonsgai . . . . . . . . . . . . . . . . . 6
1.2. Numerikus mdszer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2. Egylpses mdszerek 8
2.1. Az explicit Euler-mdszer . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1. Az expilicit Euler-mdszer konzisztencija . . . . . . . . . . . . . . 10
2.1.2. Az explicit Euler-mdszer konvergencija . . . . . . . . . . . . . . . 10
2.1.3. Az explicit Euler-mdszer megvalstsa Matlabbal . . . . . . . . . 12
2.1.4. Lotka-Volterra Modell . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2. A javtott Euler-mdszer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1. A javtott Euler-mdszer rendje . . . . . . . . . . . . . . . . . . . . 18
2.2.2. A javtott Euler-mdszer megvalstsa Matlabbal . . . . . . . . . . 18
2.3. Az implicit Euler-mdszer . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.1. Az implicit Euler-mdszer konzisztencija . . . . . . . . . . . . . . 21
2.3.2. Az implicit Euler-mdszer megvalstsa Matlabbal . . . . . . . . . 21
2.4. Runge-Kutta tpus mdszerek . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1. Ktlpcss Runge-Kutta mdszerek . . . . . . . . . . . . . . . . . . 28
2.4.2. Magasabb rend Runge-Kutta mdszerek a Matlabban . . . . . . . 30

3. Tbblpses mdszerek 35
3.1. A lineris tbblpses mdszer rendje . . . . . . . . . . . . . . . . . . . . . 35
3.2. Adams tpus mdszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2
3.3. Tbblpses mdszer a Matlabban . . . . . . . . . . . . . . . . . . . . . . 38

4. sszefoglals 40

Ksznetnyilvnts 42

Irodalomjegyzk 43
Bevezets

Szakdolgozatom a kznsges differencilegyenletek numerikus megoldsval foglalkozik.


De mik azok a differencilegyenletek s mirt is olyan fontosak? Differencilegyenlet alatt
egy olyan specilis fggynyegyenletet rtnk, amelyben a meghatrozand ismeretlen
egy megfelel rendben differencilhat fggvny, s az egyenlet kapcsolatot fejez ki az
ismeretlen fggvny klnbz rend derivltjai kztt. A differencilegyenlet megoldsa
azt jelenti, hogy tallunk egy olyan fggvnyt (fggvnyeket), amely kielgti az egyen-
letet. A fizika, kmia, biolgia vagy akr a kzgazdasgtan szmos alaptrvnye felrhat
differencilegyenletekkel. Nzznk nhny pldt!
Fizikai plda: Newton msodik trvnye azt mondja, hogy az elmozduls id szerinti m-
sodik derivltja egyenesen arnyos a testre hat ervel. Ha az er minden idpillanatban
csak a test helyzettl fgg, akkor a differencilegyenlet: x00 (t) = mx(t) alak, ahol a x(t)
az ismeretlen fggvny. Ezt a msodrend differencilegyenletet t tudjuk rni elsrendv
a kvetkezkppen: legyen x1 (t) = x(t) s x2 (t) = x0 (t), ekkor a differencilegyenletnk a
gy nz ki:
x01 = x2 ,

x02 = mx1 .

Biolgia plda: A nemlineris differencilegyenletek fontos szerepet jtszanak a populci


dinamikai modellezsben. Vegynk egy ragadoz-prda modellt. Legyen x(t) egy nylpop-
ulci mrete a t idpontban, mg y(t) egy rkapopulci mrete. Ismerjk a populcik
kezdeti mrett, x(0)-at s y(0)-at. Ekkor felrhatjuk a kvetkez diffrenecilegyenlet-
rendszert:
x0 (t) = ax(t) bx(t)y(t)

y 0 (t) = cx(t)y(t) dy(t),

4
TARTALOMJEGYZK 5

ahol a a nyulak nvekedsi rtja, d a rkapopulci hallozsi arnya. Mikor egy rka s
egy nyl tallkozik, akkor a nyulak szmnak cskkennie kell s a rkk szmnak nnie,
ezt fejezi ki b, illetve c. A tovbbiakban egy konkrt pldban megadjuk a paramterek
egy lehetsges megvlasztst s megvizsgljuk a modellnket.
1. fejezet

Matematikai bevezets

1.1. Differencilegyenletek alapvet tulajdonsgai


A differencilegyenleteknek kt tpusa van, a kznsges differencilegyenletek (ebben az
esetben egyvltozs az ismeretlen fggvny) s a parcilis differencilegyenletek (itt pedig
tbbvltozs az ismeretlen fggvny).
Differencilegyenletek nhny fontosabb jellemzi:

rend: egy differencilegyenlet rendjn a differencilegyenletben szerepl legmaga-


sabb rend derivlt rendjt rtjk,

explicit: ha a fggvnykapcsolatbl explicit kifejezhet a legmagasabb rend de-


rivlt,

implicit: ha nem explicit, teht nem tudjuk kifejezni a legmagasabb rend derivltat.

Az elsrend explicit kznsges differencilegyenlet alakja teht a kvetkez:

u0 = f (t, u),

u(t0 ) = u0 ,

ahol u : R R az ismeretlen differencilhat fggvny, s f : T R, T R2 adott


du(t)
folytonos fggvny, (t0 , y0 ) T s az u0 (t) = dt
jellst hasznljuk.
Ttel: (egzisztenciattel) Tegyk fel, hogy teljeslnek az albbi felttelek:

f : T R, T R2 egy tartomny,

6
1. FEJEZET. MATEMATIKAI BEVEZETS 7

f C(T ), azaz f folytonos T -n,

f a msodik vltozjban eleget tesz a Lipschitz-felttelnek, azaz ltezik olyan L 0


lland, hogy minden (t, u1 ), (t, u2 ) T -re igaz, hogy

|f (t, u1 ) f (t, u2 )| L |u1 u2 | .

Ekkor a kezdeti felttelbeli t0 pontnak ltezik olyan K(t0 ) krnyezete, hogy a kezdetirtk
feladatnak egyrtelmen ltezik megoldsa K(t0 )-n.

1.2. Numerikus mdszer


Krlttnk lv vilgunk jobb megismerse cljbl a klnbz jelensgeket prbljuk
meg modellezni. Mivel vilgunk bonyolultan mkdik, gy modelljeinket egyszerstennk
kell, hogy azokat tesztelni tudjuk (pldul szabadessnl eltekinthetnk a kzegellenlls-
tl, hogy egyszerbben ki tudjuk szmolni a testre hat ert). Ilyen folytonos modellek
diszkretizcijval foglalkozik a numerikus analzis s az ezeket megold numerikus md-
szerekkel. Termszetesen a megoldsok kzeltek, de megkveteljk, hogy bizonyos elfo-
gadhat s kontrollhat hibahatron bell maradjanak.
A modellekkel szembeni elvrsok:

ltezik megolds (egzisztencia),

a megolds egyrtelm (unicits),

a megolds folyamatosan fgg a feladatot ler adatoktl (stabilits).

Ezt sszefoglalan korrekt kitzs feladatnak nevezzk.


2. fejezet

Egylpses mdszerek

Tekintsk a kvetkez kezdetirtk feladatot:

u0 = f (t, u), (2.1)

u(t0 ) = u0 . (2.2)

Tegyk fel, hogy ltezik u : I R megolds, azaz u C 1 (I) olyan fggvny, melyre
u0 (t) = f (t, u(t)), u(t0 ) = u0 . Ehhez elszr definiljuk h rcshlt ily mdon:
Legyen h > 0 esetn h := {tn = n h, n = 0, 1, 2...}. Jellje yh az h -n rtelmezett
gynevezett rcsfggvnyt.
Vezessnk be nhny egyszerst jellst. Legyen yn = yh (tn ) a kzelt rtk, un = u(tn )
pedig a pontos megolds a rcshl tn pontjban. Feladatunk: gy meghatrozni yh
rcsfggvnyt, mely a rcshl pontjaiban kzel legyen az u fggvny rtkeihez.
Hibafggvny: u(t) a kezdetirtk feladat pontos megoldsa s yn a numerikus
megoldsa, zn := yn un , z : h R fggvny a hibafggvny.
Definci: Azt mondjuk, hogy egy numerikus mdszer ltal ellltott yh (t) rcsfgg-
vnysorozat finomod h lpskzk esetn konvergl az u(t) kezdetirtk feladat megol-
dshoz, ha valamely t I pontban

t mindegyik rcshlnak pontja, azaz t h


lim |yh (t ) u(t )| = 0. (2.3)
h0

8
2. FEJEZET. EGYLPSES MDSZEREK 9

Megjegyzs: A (2.3) esetn azt mondjuk, hogy a numerikus mdszer konvergens a t


pontban. ltalnosan a numerikus mdszert konvergensnek nevezzk, ha az konvergens
minden t I pontban.
Definci: Ha egy numerikus mdszer konvergens, akkor az (2.3)-beli nullhoz tarts-
nak rendjt
|yh (t ) y(t )| = O(hp ) |zh (t ) = O(hp )|

a konvergencia rendjnek nevezzk.

2.1. Az explicit Euler-mdszer


Ismerjk az u0 = f (t, u) kezdetirtk feladatot s az u0 rtkt, gy ismerjk u(t) derivltjt
a t0 pontban: u0 (t0 ) = f (t0 , u(t0 )), s legyen a kezdeti pontban y 0 (t0 ) = u0 (t0 ). Egy
megfelelen kicsi h > 0-t vlasztva a derivlt irnyban tesznk egy h vetlet lpst.
Az els lps utn: t1 = t0 + h, y1 = yt0 + h f (t0 , yt0 )
Ekkor kapunk egy j (t1 , y1 ) pontot, ebbl a pontbl jabb h vetlet lpst tesznk a
f (t1 , y1 ) irnyban.
Ezt folytatva kapjuk az explicit Euler-mdszert:

yn+1 = yn + h f (tn , yn ), (2.4)

y 0 = u0 . (2.5)

Most pedig ellenrizzk az explicit Euler-mdszer konvergens-e s nzzk meg, hogy


milyen rendben konvergens!
Az egyszersg kedvrt legyen un = u(tn ). A hibafggvnybe helyettestsk be az Euler
eljrst, ekkor a kvetkez hibaegyenletet kapjuk:
 
zn+1 zn un+1 un
= + f (tn , un ) + [f (tn , un + zn ) f (tn , un )] . (2.6)
h h

(1)
A n := un+1hun + f (tn , un ) kifejezst a loklis approximcis hibnak vagy ms nven
a rezidulis hibnak nevezzk. A hibaegyenletbl ez a tag fejezi ki, hogy a numerikus
mdszer milyen pontosan approximlja a folytonos kezdetirtk feladatot, mivel a msik
tag csak f -tl fgg.
2. FEJEZET. EGYLPSES MDSZEREK 10

Definci: Az explicit Euler-mdszert konzisztensnek nevezzk, ha

lim n(1) = 0. (2.7)


h0

A (2.7)-beli konvergencia rendjt a numerikus mdszer konzisztencia rendjnek nevezzk.


(1)
Ha n = O(hp ), akkor a mdszert p-ed rendnek nevezzk.

2.1.1. Az explicit Euler-mdszer konzisztencija

Az explicit Euler-mdszer loklis approximcis hiba egyenletbl a kvetkezt kapjuk:

u(tn+1 ) u(tn )
n(1) := + f (tn , u(tn )).
h

rjuk t u(tn+1 )-et u(tn +h)-ra, feltesszk, hogy u C 3 (I) s Taylor-sorba fejtsk u(tn +h)
kifejezst a tn pont krl
h2 00
u(tn + h) u(tn ) u(tn ) + h u0 (tn ) + 2
u (tn ) + O(h3 ) u(tn )
= ,
h h

f (t, u(t)) helyett rjunk u0 (t), majd egyszerstnk. gy a kvetkezt kapjuk:

1
n(1) = hu00 (tn ) + O(h2 ).
2

Teht az explicit Euler-mdszer konzisztens s rendje egy.

2.1.2. Az explicit Euler-mdszer konvergencija

Definci: Egy numerikus mdszer stabilnak neveznk, ha f Lip(y) s ltezik olyan


K > 0 lland, amely mellett:
n
!
X
(1)
zn+1 K |z0 | + h i .
i=0

Ttel: Ha az explicit Euler-mdszer konzisztens s stabil, akkor konvergens is, s a


konvergencia rendje egybeesik a konzisztencia rendjvel.
Bizonyts: Feljebb mr szerepelt az explicit Euler-mdszer hibaegyenlete, ami a
kvetkez:
 
zn+1 zn un+1 un
= + f (tn , un ) + [f (tn , un + zn ) f (tn , un )] ,
h h
2. FEJEZET. EGYLPSES MDSZEREK 11

Alkalmazva a  
un+1 un
n(1) := + f (tn , un ) ,
h
n(2) := [f (tn , un + zn ) f (tn , un )]

jellseket, rendezzk t a hibaegyenletet a kvetkezkppen:

zn+1 = zn + hn(1) + hn(2) .

Felhasznlva a f Lipschitz-tulajdonsgt a kvetkez becsls rhat fel:



|zn+1 | |zn | + hL |zn | + h n(1) = (1 + hL) |zn | + h n(1) ,

ezt a becslst tovbbfejtve kapjuk a kvetkezt:



(1)
|zn | (1 + hL) |zn1 | + h n1
h i
(1) (1)
(1 + hL) (1 + hL) |zn2 | + h n2 + h n1 =

2 (1) (1)
= (1 + hL) |zn2 | + (1 + hL)h n2 + h n1 =
h i
2 (1) (1)
= (1 + hL) |zn2 | + h (1 + hL) n2 + n1
n1
X
n (1)
i
. . . (1 + hL) |z0 | + h (1 + hL) ni1 .
i=0

Most becsljk fell 1 + hL-et ehL -vel:


n1
" n1
#
X X
hLn hLn (1) hLn (1)
|zn | e |z0 | + e h ni1 e |z0 | + h ni1 ,
i=0 i=0

mivel hn = t gy:
" n1
#    
Lt
X (1)

Lt M2 Lt M2
=e |z0 | + h ni1 e |z0 | + h hn = e |z0 | + th ,
i=0
2 2

ahol M2 a maximuma u00 -nek a [0, t ] intervallumon. Azt tudjuk, hogy z0 = 0, mivel a
kezdeti pontban ismerjk a pontos megoldst. gy

M2
|zn | eLt t h = konstans h.
2

Teht az explicit Euler-mdszer stabil s konzisztens, gy konvergens is s a konvergencia


rendje egy.
Megjegyzs: A ttel ltalnosan is igaz, teht, ha egy numerikus mdszer konzisztens s
2. FEJEZET. EGYLPSES MDSZEREK 12

stabil, akkor konvergens is, s a konvergencia rendje egybeesik a konzisztencia rendjvel.


A tovbbi mdszereknl szintn rvnyes a stabilits (ezt a tovbbiakban nem szmoljuk
ki), ezrt elg lesz csak a konzisztencia rendjt meghatrozni, amibl a konvergencia rendje
kzvetlenl addik.

2.1.3. Az explicit Euler-mdszer megvalstsa Matlabbal

A Matlabban lteznek mr megrt, n. begyazott algoritmusok a kznsges differen-


cilegyenletek megoldsra. Mivel az explicit Euler-mdszer nincs benne a mr megrtak
kztt, gy neknk kell megrni ezt az algoritmust egy m-fjlban. Elszr is indtsuk el a
Matlabot, majd az Editorba rjuk a kvetkezket, majd mentsk el.
function [t, y] = eeuler(diffegy, t0, y0, h, N)
t = zeros(N+1,1);
y = zeros(N+1,1);
t(1) = t0;
y(1) = y0;
for i=1:N
t(i+1) = t(i) + h;
y(i+1) = y(i) + h * diffegy(t(i),y(i));
end
Az els sorban azt adtuk meg, hogy hogyan fogjuk meghvni a mdszernket. Mi
eeuler-nek neveztk el, t bemen s kett kimen paramtere van. A kt kimen
paramter az id vektor s a kzeltett rtkek vektora. Az els bemen paramter egy
alfggvny, aminek jelen esetben diffegy a neve, ebben a fggvnyben rjuk meg azt differ-
encil fggvny, amit szeretnnk oldani. A msodik paramter t0, ez a kezdeti idpontot
jelli, a harmadik y0, ami a kezdetirtk, a kvetkez h, a lpstvolsg, majd vgl N
jelli, hogy hny lpst tesznk meg. A msodik s harmadik sorban vesszk fel t s
y vektorokat, amikben az rtkeket elszr mind 0-ra lltjuk. A kvetkez kt sorban
belltjuk a kezdrtkeket. Utna egy ciklus kvetkezik, melyben elszr belltjuk a ti
rtkeket, majd kiszmoljuk a meredeksget, vgl az yi rtkeket is, gy, ahogy az az
explicit Euler-mdszerben van.
Ez mg csak az explicit Euler-mdszer megvalstsa, mg nem tudjuk egy adott
2. FEJEZET. EGYLPSES MDSZEREK 13

differencilegyenletre lefuttatni. Ehhez szksgnk van egy alfggvnyre, aminek a neve


diffegy lesz. A kvetkez pldt fogjuk leprogramozni:

u0 (t) = u(t) + t + 1,

ahol t [0, 1] s u(0) = 1. Ktfle lpstvolsgot fogunk vizsglni, h1 = 0.1-et s


h2 = 0.01-et. A pldnkat termszetesen exact mdon is ki lehet szmolni, hogy meg
tudjuk nzni, mennyire pontos a mdszer.
Most pedig rjuk meg a diffegy nev alfggvnynket. Nyissunk egy j m-fjlt, amibe
rjuk a kvetkezket, majd mentsk el.
function dydt = diffegy(t,y)
dydt = -y + t + 1;
Most mr megrtunk mindkt fggvnyt, futtassuk le a programunkat elszr h1 = 0.1-
es lpstvolsggal, majd h2 = 0.01-es lpstvolsggal is. A Command ablakba rjuk a
kvetkezt: [T1,Ye] = eeuler(@diffegy, 0, 1, 0.1, 10). Enter utn kiadja T1 s
Ye vektorokat. Ha ki is szeretnnk rajzoltatni, akkor a plot(T1,Ye) paranccsal egy
kln ablakban megjelenik a fggvnynk. A h2 = 0.01-es lpstvolsghoz pedig rjuk
ezt: [T2,Xe] = eeuler(@diffegy, 0, 1, 0.01, 100).
Mivel az explicit Euler-mdszer hibjra vagyunk kvncsiak, a pontos megoldst is
le kell programoznunk. A pldnk pontos megoldsa:

u(t) = et + t

fggvny. A Matlabban egy j m-fjlba rjuk a kvetkezket:


function e = exact(t)
e = exp(-t) + t;
A Command ablakban hvjuk meg. Legyen Yp a pontos megolds T1 intervallumon,
mg Xp a pontos megolds T2 intervallumon. A plot(T1, [Ye, Yp]) s plot(T2, [Xe,
Xp]) parancsokkal egy brn is megtekinthetjk a pontos s az approximlt fggvnyeket.
Az albbi tblzatban lthatjuk, a mdszer hibjt h1 = 0.1 s h2 = 0.01 lpstvols-
goknl.
2. FEJEZET. EGYLPSES MDSZEREK 14

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.1000 1.0048 1.0000 4.8374e-003
0.2000 1.0187 1.0100 8.7308e-003
0.3000 1.0408 1.0290 1.1818e-002
0.4000 1.0703 1.0561 1.4220e-002
0.5000 1.1065 1.0905 1.6041e-002
0.6000 1.1488 1.1314 1.7371e-002
0.7000 1.1966 1.1783 1.8288e-002
0.8000 1.2493 1.2305 1.8862e-002
0.9000 1.3066 1.2874 1.9149e-002
1.0000 1.3679 1.3487 1.9201e-002

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.0100 1.0000 1.0000 4.9834e-005
0.0200 1.0002 1.0001 9.8673e-005
.. .. .. ..
. . . .
0.1000 1.0048 1.0044 4.5534e-004
.. .. .. ..
. . . .
0.5000 1.1065 1.1050 1.5246e-003
.. .. .. ..
. . . .
0.8000 1.2493 1.2475 1.8058e-003
.. .. .. ..
. . . .
0.9800 1.3553 1.3535 1.8468e-003
0.9900 1.3616 1.3597 1.8471e-003
1.0000 1.3679 1.3660 1.8471e-003
2. FEJEZET. EGYLPSES MDSZEREK 15
2. FEJEZET. EGYLPSES MDSZEREK 16

Amint azt lthatjuk, a minl kisebb lpstvolsgot hasznlunk, annl pontosabb lesz
a kzeltsnk a t = 1 pontban.

h 0.1 0.01 0.001


zi 1.9201e-002 1.8471e-003 1.8402e-004

2.1.4. Lotka-Volterra Modell

A bevezetben mr emltett ragadoz-prda vagy ms nven Lotka-Volterra modellt fog-


juk ebben a rszben Matlabban megvalstani. Legyen x(t) a prda populci mrete a t
idpontban, mg y(t) a ragadoz populci mrete. Ha nincs ragadoz, akkor feltesszk,
hogy a prda populci exponencilis vagy x0 = ax dinamikj, ahol a a prda populci
nvekedsi rtja. Feltesszk mg, hogy prda hinyban a ragadozk kihalnak y 0 = dy
egyenlet szerint, ahol d a ragadoz populci hallozsi arnya. Mikor prda ragadozval
tallkozik, a prda populcinak cskkennie kell x0 (t) = ax(t) bx(t)y(t) s a ragadoz
populcinak nvekednie y 0 (t) = cx(t)y(t)dy(t). Ismerjk a populcik kezdeti mrett,
x(0)-at s y(0)-at, mely a kt populci kezdeti arnyt mutatja meg. Ekkor felrhatjuk
a kvetkez differencilegyenlet-rendszert:

x0 (t) = ax(t) bx(t)y(t)

y 0 (t) = cx(t)y(t) dy(t).

Nzzk a kvetkez pldt:


x0 = x 2x2 xy

y 0 = 2y + 6xy,

legyen x(0) = 1, y(0) = 0.1 s a t = [0, 20]. Mathlabban nyissunk egy j m-fjlt s rjuk
bele a kvetkezket:
function euler (x, y, T, N)
xhistory=x; yhistory=y; h=T/N;
for n=1:N
u=f(x,y); v=g(x,y);
x=x+h*u; y=y+h*v;
xhistory=[xhistory,x]; yhistory=[yhistory,y];
end
2. FEJEZET. EGYLPSES MDSZEREK 17

t=0:h:T;
plot(t,xhistory,red, t, yhistory,blue)
xlabel(id), ylabel(prda (piros), ragadoz (kk))
function U=f(x,y)
U=x-2*x.*x-x.*y;
function V=g(x,y)
V=-2*y+6*x.*y;
Mentsk el, futtassuk gy: euler(1, 0.1, 20, 250) utn ezt a grafikont kapjuk:

Ahogy az a valsgban is van, a populci vagy kihal, vagy egyenslyba kerl. A


grafikonon is jl ltszik, hogy a kezdeti idpontokban a ragadozk szma cskken, mivel
nincsenek prda llatok, ezzel egy idben a prdallatok szma n s, ahogy telik az id
gy kerlnek egyenslyba a populci mretei.

2.2. A javtott Euler-mdszer


Prbljuk meg javtani az Euler-mdszert gy, hogy ne elsrend, hanem msodrend
legyen. Elszr egy fl lpst tve kiszmtjuk f (tn+ 1 , yn+ 1 ) rtkt, majd ezzel az j
2 2

meredeksggel tesznk egy egsz lpst az eredeti (tn , yn ) pontbl.


A mdszer algoritmikus lersa a kvetkez:

yn+1 = yn + h f (tn+ 1 , yn+ 1 ). (2.8)


2 2
2. FEJEZET. EGYLPSES MDSZEREK 18

2.2.1. A javtott Euler-mdszer rendje

A loklis approximcis hiba kiszmolshoz fel kell tennnk, hogy f mindkt vltozja
szerint ktszer folytonosan differencilhat, azaz f C 2 (T ).

un+1 un
n(1) = + f (tn+ 1 , yn+ 1 )
h 2 2

Az un+1 s u0 (tn+ 1 ) = f (tn+ 1 , y(tn+ 1 )) fggvnyeket sorba fejtve a tn pont krl a kapjuk:
2 2 2

h2 00
u(tn ) + hu0 (tn ) + u (tn ) + O(h3 ) u(tn )
n(1) = 2
h
h h2
+u0 (tn ) + u00 (tn ) + u000 (tn ) + O(h3 ).
2 8
A zrjel felbontsa s a h-val val oszts utn:

h h h2
= u0 (tn ) u00 (tn ) + o(h2 ) + u0 (tn ) + u00 (tn ) + u000 (tn ) + O(h3 )
2 2 8
h2 000
= u (tn ) + O(h2 ).
8
Teht a javtott Euler-mdszer msodrendben konzisztens, ahogy vrtuk.

2.2.2. A javtott Euler-mdszer megvalstsa Matlabbal

Az explicit Euler-mdszerhez hasonlan a javtott Euler-mdszer sincs a begyazott al-


goritmusok kztt, ezt is neknk kell megrnunk. Nyissunk egy j m-fljt, amibe rjuk a
kvetkezket:
function [t, y] = javeuler(diffegy, t0, y0, h, N)
t = zeros(N+1,1);
y = zeros(N+1,1);
t(1) = t0;
y(1) = y0;
hfel = 0.5 * h;
for i=1:N
t(i+1) = t(i) + h;
y(i+1) = y(i) + h*diffegy(t(i)+hfel, y(i)+ hfel*diffegy(t(i), y(i)));
end
2. FEJEZET. EGYLPSES MDSZEREK 19

A program nem sokban tr el az explicit Euler-mdszernl hasznlttl. A klnbsg


az az rtk, mikor fl lpst tesznk, ehhez csak a meredeksget kell megvltoztatnunk.
Elszr is a cikluson kvl mg definilnunk kell hf el = h + 0, 5 -t, s a ciklusban a
meredeksg defincijt is megfelelen mdostjuk.
Most is ugyanazt a pldt vizsgljuk h1 = 0.1 s h2 = 0.01 lpstvolsgokkal. A
Command ablakban a kvetkezkppen hvjuk meg [T1, Yj] = javeuler(@diffegy,
0, 1, 0.1, 10) s [T2, Xj] = javeuler(@diffegy, 0, 1, 0.01, 100). A plot(T1,
[Yj, Yp]) s a plot(T2, [Xj, Xp]) parancsokkal megint ki tudjuk rajzoltatni a kzel-
t s a pontos megoldst. Az albbi tblzatban lthatjuk a pontos rtkeket, a javtott
Euler-mdszer kzeltseit s hibjt h1 = 0.1 s h2 = 0.01 lpstvolsgoknl.

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.1000 1.0048 1.0050 1.6258e-004
0.2000 1.0187 1.0190 2.9425e-004
0.3000 1.0408 1.0412 3.9940e-004
0.4000 1.0703 1.0708 4.8190e-004
0.5000 1.1065 1.1071 5.4511e-004
0.6000 1.1488 1.1494 5.9193e-004
0.7000 1.1966 1.1972 6.2492e-004
0.8000 1.2493 1.2500 6.4629e-004
0.9000 1.3066 1.3072 6.5795e-004
1.0000 1.3679 1.3685 6.6154e-004
2. FEJEZET. EGYLPSES MDSZEREK 20

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.0100 1.0000 1.0001 1.6625e-007
0.0200 1.0002 1.0002 3.2919e-007
.. .. .. ..
. . . .
0.1000 1.0048 1.0048 1.5194e-006
.. .. .. ..
. . . .
0.5000 1.1065 1.1065 5.0925e-006
.. .. .. ..
. . . .
0.8000 1.2493 1.2493 6.0362e-006
.. .. .. ..
. . . .
0.9000 1.3066 1.3066 6.1445e-006
.. .. .. ..
. . . .
0.9900 1.3616 1.3616 6.1772e-006
1.0000 1.3679 1.3679 6.1775e-006

EE EE jav E jav E
h 0.1 0.01 0.1 0.001
zn 1.9201e-002 1.8471e-003 6.6154e-004 6.1775e-006

A pldn is jl lthatjuk, hogy a javtott Euler-mdszer gyorsabban konvergl, mint az


explicit Euler-mdszer.

2.3. Az implicit Euler-mdszer


Prbljuk meg mg jobban javtani az Euler-mdszer. Most ne a (tn , yn ) meredeksggel
lpjnk, hanem a (tn+1 , yn+1 ) meredeksggel. Ekkor a mdszernk implicit lesz, s azt
remljk, hogy magasabb rend, mint az explicit Euler-mdszer.
Mdszer lersa kplettel:

yn+1 = yn + h f (tn+1 , yn+1 ), (2.9)

y 0 = u0 . (2.10)
2. FEJEZET. EGYLPSES MDSZEREK 21

2.3.1. Az implicit Euler-mdszer konzisztencija

Az explicit Euler-mdszerhez hasonlan szmolhatjuk ki az implicit mdszer rendjt.

u(tn+1 ) u(tn )
n(1) := + f (tn+1 , u(tn+1 )),
h
mivel f (tn+1 , u(tn+1 )) = u0 (tn+1 )-gyel, gy

u(tn+1 ) u(tn+1 h)
= + u0 (tn+1 ).
h

Ha u(tn+1 h) kifejezst a tn+1 krl Taylor-sorba fejtjk, a kvetkezt kapjuk:

u(tn+1 ) (u(tn+1 ) h u0 (tn+1 ) + O(h2 ))


n(1) = + u0 (tn+1 ),
h

a zrjelet felbontva s egyszerstve:

u(tn+1 ) + u(tn+1 ) h u0 (tn+1 ) + O(h2 )


= = O(h).
h

Teht az implicit Euler-mdszer, a vrttal ellenttben az explicit mdszerhez hasonlan


els rendben konzisztens.

2.3.2. Az implicit Euler-mdszer megvalstsa Matlabbal

Az implicit feladatok leprogramozsa ltalban bonyolult, gy n kt egyszerbb megol-


dst fogok bemutatni a fentebb emltett pldnkra. Elsnek nzzk azt a megoldst, ami
pontosabb, de csak erre a pldra alkalmazhat. Ehhez elszr is kicsit t kell rnunk
a feladatunkat. Teht az u0 (t) = u(t) + t + 1 egyenletet rjuk be az implicit Euler-
mdszerbe:
yn+1 = yn + h (yn+1 + tn+1 + 1).

Most bontsuk fel a zrjelet, majd rendezzk t:

yn+1 = yn h yn+1 + h tn+1 + h,

yn + h tn+1 + h
yn+1 = .
1+h
Ezt programozzuk le a mr megszokott mdon. Nyissunk egy j m-fjlt, amibe rjuk az
albbiakat:
function [t, y] = ieuler(t0, y0, h, N)
2. FEJEZET. EGYLPSES MDSZEREK 22

t = zeros(N+1,1);
y = zeros(N+1,1);
t(1) = t0;
y(1) = y0;
for i=1:N
t(i+1) = t(i) + h;
y(i+1) = (y(i) + h * t(i+1) + h) / (1+h);
end
Mentsk el, majd a Command ablakban hvjuk meg gy: [T1, Yi] = ieuler(0,
1, 0.1, 10). Majd h2 = 0.01 lpstvolsggal is futtassuk le. A mdszer hibjt a
tblzatban lthatjuk h1 = 0.1 s h2 = 0.01 lpstvolsgok mellett.

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.1000 1.0048 1.0091 4.2535e-003
0.2000 1.0187 1.0264 7.7155e-003
0.3000 1.0408 1.0513 1.0497e-002
0.4000 1.0703 1.0830 1.2693e-002
0.5000 1.1065 1.1209 1.4391e-002
0.6000 1.1488 1.1645 1.5662e-002
0.7000 1.1966 1.2132 1.6573e-002
0.8000 1.2493 1.2665 1.7178e-002
0.9000 1.3066 1.3241 1.7528e-002
1.0000 1.3679 1.3855 1.7664e-002
2. FEJEZET. EGYLPSES MDSZEREK 23

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.0100 1.0000 1.0001 4.9176e-005
0.0200 1.0002 1.0003 9.7376e-005
.. .. .. ..
. . . .
0.1000 1.0048 1.0053 4.4954e-004
.. .. .. ..
. . . .
0.5000 1.1065 1.1080 1.5082e-003
.. .. .. ..
. . . .
0.8000 1.2493 1.2511 1.7890e-003
.. .. .. ..
. . . .
0.9000 1.3066 1.3084 1.8215e-003
.. .. .. ..
. . . .
0.9900 1.3616 1.3634 1.8316e-003
1.0000 1.3679 1.3697 1.8318e-003

Nzznk meg egy msik mdszert is, ami nem ennyire pontos, de nem kell minden
megoldani kvnt differencilegyenlethez rnunk egy-egy j mdszert.
function [t, y] = ie(diffegy, t0, y0, h, N)
t = zeros(N+1,1);
y = zeros(N+1,1);
t(1) = t0;
y(1) = y0;
for i=1:N
t(i+1) = t(i) + h;
yexp = y(i) + h * diffegy(t(i),y(i));
y(i+1) = y(i) + h * diffegy(t(i+1), yexp);
end
Itt explicit Euler-mdszerrel kzeltjk yn+1 rtkt, amit az implicit Euler-mdszerben
hasznlunk fel, br gy nem lesz annyira pontos a mdszer, mint az elbb. Termszetesen
nem muszj az explicit Euler-mdszert hasznlni, brmelyik msik explicit mdszer is j,
hogy approximljuk yn+1 -et. Tulajdonkppen a (2.9) implicit Euler-mdszer nemlineris
2. FEJEZET. EGYLPSES MDSZEREK 24

egyenlett oldjuk meg az egyszer iterci mdszervel, amikor is egy itercis lpst
tesznk csak meg s kezdrtknek az explicit Euler-mdszer eredmnyt hasznljuk.
Mentsk el az m-fjlt, majd hvjuk meg a kvetkezkppen: [T1, Yie] = ie(@diffegy,
0, 1, 0.1, 10), majd h2 = 0.01 lpstvolsggal is: [T2, Xie] = ie(@diffegy, 0,
1, 0.01, 100). A mdszer hibjt az albbi tblzatokban lthatjuk:

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.1000 1.0048 1.0100 5.1626e-003
0.2000 1.0187 1.0281 9.3692e-003
0.3000 1.0408 1.0536 1.2753e-002
0.4000 1.0703 1.0857 1.5430e-002
0.5000 1.1065 1.1240 1.7501e-002
0.6000 1.1488 1.1679 1.9058e-002
0.7000 1.1966 1.2168 2.0176e-002
0.8000 1.2493 1.2703 2.0924e-002
0.9000 1.3066 1.3279 2.1360e-002
1.0000 1.3679 1.3894 2.1537e-002
2. FEJEZET. EGYLPSES MDSZEREK 25

ti u(ti ) y(ti ) zi
0 1.0000 1.0000 0
0.0100 1.0000 1.0001 5.0166e-005
0.0200 1.0002 1.0003 9.9337e-005
.. .. .. ..
. . . .
0.1000 1.0048 1.0053 4.5859e-004
.. .. .. ..
. . . .
0.5000 1.1065 1.1081 1.5386e-003
.. .. .. ..
. . . .
0.8000 1.2493 1.2512 1.8251e-003
.. .. .. ..
. . . .
0.9000 1.3066 1.3084 1.8583e-003
.. .. .. ..
. . . .
0.9800 1.3553 1.3572 1.8683e-003
0.9900 1.3616 1.3634 1.8686e-003
1.0000 1.3679 1.3697 1.8687e-003

ieuler ieuler ie ie
h 0.1 0.01 0.1 0.001
zi 1.7664e-002 1.8318e-003 2.1537e-002 1.8687e-003

Ha egy grafikonon brzoljuk az implicit Euler-mdszer, az explicit Euler-mdszer s a


2. FEJEZET. EGYLPSES MDSZEREK 26

pontos megoldsokat, szrevehetjk, hogy az implicit Euler kzeltse a pontos megolds


felett, mg az explicit Euler-mdszer a pontos megolds alatt fut. Ebbl az szrevtelbl
jn a kzpponti szably, amit teht gy szrmaztatunk, hogy az implicit Euler-mdszer
s az explicit Euler-mdszer kzeltseit sszeadjuk, majd elosztjuk kettvel. Ekkor egy
mg jobb kzeltst kapunk:

2.4. Runge-Kutta tpus mdszerek


Ebben a fejezetben ismerkedhetnk meg a Runge-Kutta mdszerekkel, amik szintn az
egylpses mdszerekhez tartoznak, azaz yn -bl yn+1 -et szmoljuk. Ms egylpses md-
szerektl eltren itt az eredmny kiszmolshoz elbb tbb "lpcst" is ki kell szmol-
nunk. gy magasabb rend mdszereket is el tudunk lltani.
Definiljuk az albbi m darab ki szmokat a kvetkezkppen:

k1 = f (tn , yn )

k2 = f (tn + ha2 , yn + hb21 k1 )

k3 = f (tn + ha3 , yn + h(b31 k1 + b32 k2 ))


..
.
m1
X
km = f (tn + ham , h bmi ki ).
i=1
2. FEJEZET. EGYLPSES MDSZEREK 27

Ezen ki szmok lineris kombincijnak segtsgvel definiljuk az ltalnos, m-lpcss


Runge-Kutta mdszert:
m
X
yn+1 = yn + h i ki .
i=1

A paramtereket az n. Butcher-tblzatba rendezzk:

a1 b11 b1m
a2 b21 b2m
.. ..
. .
am bm1 bmm

1 m

Az explicit Runge-Kutta mdszereknl a mtrix egy szigoran alshromszg mtrix,


mg az implicit Runge-Kutta mdszereknl nem ilyen. Ha alshromszg mtrix, teht a
ftlban nem csak nulla elemek vannak diagonlis implicit Runge-Kutta (DIRK) md-
szernek nevezzk.
Az explicit Euler-mdszer rtelmezhet Runge-Kutta mdszernek is. A Butcher tb-
lja a kvetkez:

0 0
1

Az explicit Euler-mdszer elsrend volt, de nem is tudunk nagyobb rend, egylpcss


mdszert ellltani.
Az implicit Euler-mdszer Butcher tblja:

1 1
1

A javtott Euler-mdszer Butcher tblja:

0 0 0
0.5 0.5 0
0 1

A javtott Euler-mdszer ktlpcss, msodrend mdszer. Nzzk meg, hogy van-e ms


ktlpcss, msodrend mdszer, illetve ltezik-e ktlpcss, harmadrend mdszer!
2. FEJEZET. EGYLPSES MDSZEREK 28

2.4.1. Ktlpcss Runge-Kutta mdszerek

ltalnos mdszer m = 2 esetn:


k1 = f (tn , yn )

k2 = f (tn + ha2 , yn + hb21 k1 )

yn+1 = yn + h(1 k1 + 2 k2 )

A megvlaszthat szabad paramtereink a2 , b21 , 1 s 2 . rjuk fel elszr a loklis


approximcis hiba egyenlett erre az ltalnos esetre.
u(tn+1 ) u(tn )
n(1) = + [1 f (tn , u(tn )) + 2 f (tn + ha2 , u(tn ) + b21 hf (tn , u(tn )))] .
h
Fejtsk Taylor-sorba u(tn+1 )-et tn pont krl.
h2 00
u(tn + h) u(tn ) u(tn ) + hu0 (tn ) + u (tn ) + O(h3 ) u(tn ) h
= 2
= u0 (tn )+ u00 (tn )+O(h2 ).
h h 2
Most pedig f (tn + ha2 , u(tn ) + b21 hf (tn , u(tn )))-et kell a (tn , u(tn )) pont krl.

f (tn + ha2 , u(tn ) + b21 hf (tn , u(tn ))) = f + 1 f a2 h + 2 f b21 hf + O(h2 ),

ahol f , 1 f s 2 f a (tn , u(tn )) helyen rtend. Az albbiakat kaptuk:


 
1 00
n = [u (tn ) + 1 f + 2 f ] + h u (tn ) + 2 (a2 1 f + b21 2 f f ) + O(h2 )
(1) 0
2
Mivel u0 (t) = f (t, u(t)) megoldsa a differencilegyenletnek s u00 (t) = 1 f + f 2 f a
(t, u(t)) helyen, gy
 
1 1
n1 = f + (1 + 2 )f + h (1 f ) (2 f )f + a2 2 (1 f ) + 2 (2 f )b21 f + O(h2 ).
2 2
Hogy az ltalnos mdszernk msodrend legyen az albbi feltteleknek kell teljesl-
nik:
1 + 2 = 1,
1
a2 2 = ,
2
1
b21 2 = .
2
1
Legyen := 2 . Ekkor 1 = 1 s legyen a := a2 = b21 = 2
, 6= 0 az elbbi felttelek
miatt. Teht az ltalnos ktlpcss, msodrend Runge-Kutta mdszer tblzata gy
nz ki:
2. FEJEZET. EGYLPSES MDSZEREK 29

0 0 0
a a 0
1

ahol a = 21 .
Msik krdsnk az volt, hogy lehet-e ktlpcss, harmadrend mdszer ellltani.
Teht a fenti paramteres mdszerben a-t vagy -t lehet-e gy megvlasztani, hogy a
mdszer harmadrend legyen?
Elszr is rjuk fel az ltalnos alakot:

yn+1 = yn + h [(1 )f (tn , yn ) + f (tn + ah, yn + ahf (tn , yn ))] ,

ahol a a = 0.5.
Megmutatjuk, hogy nem lehetsges ilyen megvlaszts. Ehhez elg azt megmutatnunk,
hogy van olyan elsrend kznsges differencilegyenlet, amelyre semmilyen paramter-
vlaszts mellett sem lehet a ktlpcss mdszer harmadrend. Tekintsk a kvetkez
differencilegyenletet:
u0 = u,

u(0) = u0 .

Mivel ebben a feladatban f (t, u) = u, gy f (tn , yn ) = yn . Ezen megvlaszts esetn az


albbi mdon mdosul a kpletnk.

yn+1 = yn + h [(1 )yn + (yn + ahyn )] .

Elvgezve a beszorzsokat s egyszerstseket, ekkor

yn+1 = yn + h(yn yn + yn + ahyn ) = yn + h(1 + ah)yn .

Mivel a = 0, 5, gy:
yn+1 yn
= (1 + 0, 5h)yn .
h
Most mr felrhatjuk az approximcis hibaegyenlett:
u(tn+1 ) utn
n(1) = + (1 + 0, 5h)un ,
h
Taylor-sorba fejtjk u(tn+1 )-et tn krl:
h2 000
 
h 00
n = u (tn ) + u (tn ) + u (tn ) + O(h ) + (1 + 0, 5h)u(tn ).
(1) 0 3
2 6
2. FEJEZET. EGYLPSES MDSZEREK 30

A differencilegyenletbl kvetkezik, hogy u(t) = u0 (t) = u00 (t) = u000 (t).

h h2 h2
 
1
(1)
n = u(tn ) 1 + 1 + h + O(h3 ) = u(tn ) + O(h3 ).
2 6 2 6

Mivel u(tn ) 6= 0, ezrt a mdszer legfeljebb msodrend lehet.


Hogy egy mdszer p rendben konzisztens legyen az albbi felttel(ek)nek kell teljesl-
nie:

rend(p) Felttel
1 e = 1
1
2 a = 2

3 a2 = 13 , Ba = 1
6

4 a3 = 14 , ABa = 18 , Aa2 = 1
12
, A2 a = 1
24

 
ahol e = (1, 1, . . . , 1), ak = ak1 , ak2 , . . . , aks , A = diag[a1 , . . . , as ] s B a Butcher tblzat-
bl a bij -k ltal alkotott mtrix.
Azt mr tudjuk, hogy kevesebb lpcs biztosan nem elg magasabb rend mdszerek
ellltshoz. Sokszor tbb lpcsre van szksgnk, mint a kvnt rend. A kvetkez
tblzatban lthatjuk, hogy hogyan kapcsoldik a rend p s a lpcsk m szma egymshoz.

Lpcsk szma (m) Rend(p)

1m4 p(m) = m
5m7 p(m) m 1
8 m 10 p(m) m 2
m > 10 p(m) m 3

2.4.2. Magasabb rend Runge-Kutta mdszerek a Matlabban

Mr emltettem, hogy lteznek begyazott differencilegyenlet megold algoritmusok a


Matlabban. Ilyen pldul az ode45, ami a Dormand-Prince mdszert alkalmazza. Ez
egy egylpses, vltakoz lpskz mdszer. Kiszmol egy negyed s egy td rend
Runge-Kutta mdszert, s gy vlaszt lpskzt, hogy a hiba a negyed rend mdszer
hibja legyen. A kvetkez tblzatban lthatjuk a mdszer Butcher-tbljt. Az els
sor a negyed rend mdszer megoldst adja, mg a msodik az td rendjt.
2. FEJEZET. EGYLPSES MDSZEREK 31

0
1 1
5 5
3 3 9
10 40 40
4 44 56 32
5 45 15 9
8 19372 25360 64448 212
9 6561 2187 6561 729
9017 355 46732 49 5103
1 3168 33 5247 176 18656
35 500 125 2187 11
1 384
0 1113 192 6784 84
5179 7571 393 92097 187 1
57600
0 16695 640 339200 2100 40
35 500 125 2187 11
384
0 1113 192 6784 84
0

Hvjuk meg az ode45 algoritmust hasonl mdon, mint a sajt magunk ltal rt pro-
gramokat: [T1, Y45] = ode45(@diffegy, T1, 1). Itt is kt kimen paramter van,
az id s a kzelt rtk vektor. A bemen paramtere rendre: az alfggvny, amiben
a differencilegyenletnk defincija van, az id vektor, hogy melyik idpontokban sz-
moljuk ki a megoldst, a kezdetirtk vektor. Meg lehet adni egy negyedik vlaszthat
paramtert is (options), aminek segtsgvel a default integrlsi rtkeket tllthatjuk.
Az albbi tblzatokban lthatjuk, hogy mennyire pontos az ode45 nemcsak h2 =
0.01, hanem h1 = 0.1 lpstvolsg mellett is.

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.1000 1.0048 1.0048 2.9737e-010
0.2000 1.0187 1.0187 5.3815e-010
0.3000 1.0408 1.0408 7.3041e-010
0.4000 1.0703 1.0703 8.8120e-010
0.5000 1.1065 1.1065 9.9668e-010
0.6000 1.1488 1.1488 1.0822e-009
0.7000 1.1966 1.1966 1.1424e-009
0.8000 1.2493 1.2493 1.1814e-009
0.9000 1.3066 1.3066 1.2026e-009
1.0000 1.3679 1.3679 1.2090e-009
2. FEJEZET. EGYLPSES MDSZEREK 32

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.0100 1.0000 1.0000 2.2204e-016
0.0200 1.0002 1.0002 8.8940e-011
.. .. .. ..
. . . .
0.1000 1.0048 1.0048 5.4080e-009
.. .. .. ..
. . . .
0.5000 1.1065 1.1065 2.8278e-009
.. .. .. ..
. . . .
0.8000 1.2493 1.2493 1.6519e-009
.. .. .. ..
. . . .
0.9000 1.3066 1.3066 1.3610e-009
.. .. .. ..
. . . .
0.9900 1.3616 1.3616 1.0920e-009
1.0000 1.3679 1.3679 1.0903e-009

A mdszer pontossga igen keveset javult h2 = 0.01 lpstvolsgnl. Ez egyrszt azrt


van, mert az ode45 algoritmus vltoz lpskz, msrszt van egy beptett default rtk
a pontossgra is (ezt az rtket mr h1 = 0.1-nl elrte). A negyedik bemen paramterrel
llthatjuk t a mdszer pontossgt az odeset fggvny segtsgvel vagy mi magunk
is rhatunk ilyen fggvnyeket.
Nzznk egy msik begyazott mdszert is, nevezetesen az ode23, ami szintn Runge-
Kutta mdszereken alapszik, mgpedig a Bogacki-Shampine mdszeren.
Bogacki-Shampine Butcher-tblja:

0
1 1
2 2
3 3
4
0 4
2 1 4
1 9 3 9
2 1 4
9 3 9
0
7 1 1 1
24 4 3 8

Most futtassuk le a pldnkra az ode23 algoritmust is. Elszr h1 = 0.1 lpstvol-


sggal: [T1, Y23] = ode23(@diffegy, T1, 1), majd h2 = 0.01 lpstvolsggal: [T2,
2. FEJEZET. EGYLPSES MDSZEREK 33

X23] = ode23(@diffegy, T2, 1). A kvetkez tblzatok mutatjk a mdszer hibjt


h1 = 0.1 s h2 = 0.01 lpstvolsg mellett.

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.1000 1.0048 1.0048 4.0847e-006
0.2000 1.0187 1.0187 7.3920e-006
0.3000 1.0408 1.0408 1.0033e-005
0.4000 1.0703 1.0703 1.2104e-005
0.5000 1.1065 1.1065 1.3690e-005
0.6000 1.1488 1.1488 1.4865e-005
0.7000 1.1966 1.1966 1.5692e-005
0.8000 1.2493 1.2493 1.6227e-005
0.9000 1.3066 1.3066 1.6518e-005
1.0000 1.3679 1.3679 1.6607e-005

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.0100 1.0000 1.0000 4.1583e-010
0.0200 1.0002 1.0002 3.3825e-008
.. .. .. ..
. . . .
0.1000 1.0048 1.0048 1.8521e-006
.. .. .. ..
. . . .
0.5000 1.1065 1.1065 1.2194e-005
.. .. .. ..
. . . .
0.9000 1.3066 1.3066 1.5515e-005
.. .. .. ..
. . . .
0.9900 1.3616 1.3616 1.5233e-005
1.0000 1.3679 1.3679 1.5087e-005

Itt azt is lthatjuk, hogy alig javult a mdszer pontossga. Ez ugyancsak azrt van,
mert az ode23 is vltoz lpskz s elrte a pontossg a belltott default rtket.
2. FEJEZET. EGYLPSES MDSZEREK 34

ode45 ode45 ode23 ode23


h 0.1 0.01 0.1 0.01
zn 1.2090e-009 1.0903e-009 1.6607e-005 1.5087e-005

A tblzatbl lthatjuk, hogy ennl a pldnl az ode45 pontosabb, mint az ode23.


Az ode23 algoritmust hatkonyabb lehet nagyobb hibahatrnl vagy, ha differencile-
gyenlet enyhn merev.
3. fejezet

Tbblpses mdszerek

Az eddig vizsglt mdszerek mind egylpsesek voltak, melyeknl t0 pontbl indulva,


ismerve y0 rtkt megprbltuk meghatrozni t1 -et. Ezutn t1 ismeretben kzeltettk
t2 -t y1 segtsgvel, de itt mr nem hasznltuk fel y0 ismerett, s gy tovbb. A tbb-
lpses mdszereknl az alaptlet az, hogy az adott pontbeli megolds ne csak az eggyel
elz rtktl fggjn, hanem a tbbi korbbitl is.
Egy ltalnos r-lpses numerikus mdszer ltalnos alakja a kvetkezkppen rhat fel:

a0 yn + a1 yn1 + . . . + ar ynr
= b0 fn + b1 fn1 + . . . + br fnr (3.1)
h

ahol a0 , . . . , ar , b0 , . . . , br a mdszert ler paramterek s fn f (tn , yn )-t jelli. Hogy egy


mdszer egyrtelm legyen (n. normalizl) felttelt adunk meg:
r
X
bk = 1 (3.2)
k=0

Ha ki tudjuk kifejezni a legmagasabb derivltat explicit mdon, azaz b0 = 0, akkor a


mdszer explicit, ha nem tudjuk kifejezni, azaz b0 6= 0, akkor pedig implicit.

3.1. A lineris tbblpses mdszer rendje


A mdszer indulshoz kellenek az y0 , . . . , yr1 rtkek. Ezek vagy adottak, vagy egy
msik mdszerrel kell meghatrozni ket (pldul Runge-Kutta mdszerekkel).
A (3.1) lineris tbblpses mdszernek is csak a konzisztencit fogjuk vizsglni, a
stabilits itt is rvnyes.

35
3. FEJEZET. TBBLPSES MDSZEREK 36

Hogyan vlasszuk meg a0 , . . . , ar , b0 , . . . , br 2r + 2 darab egytthatt, hogy a mdszer


adott p-ed rend legyen?
Loklis approximcis hiba:
r r
1X X
n(1) = ak y(tnk ) + bk f (tnk , ytnk )
h k=0 k=0

Fejtsk Taylor-sorba y(tnk ) s f (tnk , ytnk )-t gy, hogy majd a mdszer p-ed rendben
konzisztens legyen.
p
X (kh)l (l)
y(tnk ) = y(tn kh) = (1)l y (tn ) + O(hp+1 ),
k=0
l!
p1
X (kh)l (l+1)
0
f (tnk , ytnk ) = y (tnk ) = (1)l y (tn ) + O(hp ).
k=0
l!
Ha l = 0, akkor kapjuk a kvetkez felttelt:
r
X
ak = 0. (3.3)
k=0

Ha l = 1, 2, ..., p, akkor:
r l l1 r
X
l+1 k h (l)
X (kh)l1 (l)
ak (1) y (tn ) + bk (1)l1 y (tn ) = 0.
k=0
l! k=0
(l 1)!

Osszuk el mindkt oldalt hl1 -gyel, (1)l1 -gyel s y (l) (tn )-nel:
r r
X kl X k l1
ak + bk = 0.
k=0
l! k=0 (l 1)!

Vonjuk ssze a szummkat, szorozzuk fel l!-sal s emeljk ki k l1 -et:


r
X
k l1 (kak + lbk ) = 0. (3.4)
k=0

Ez p darab jabb felttel. A (3.2), (3.3), (3.4) egyenletekbl p + 2 darab felttelnk van
s 2r + 2 darab paramternk, teht p 2r lehet legfeljebb a mdszer rendje.

3.2. Adams tpus mdszerek


Bashforth (1883) egy kapillris jelensg lersra egy matematikai modellt ksztett. En-
nek megoldsra javasolta Adams a mdszert.
Z xk+1
y(xk+1 ) y(xk ) = f (x, y(x)) dx.
xk
3. FEJEZET. TBBLPSES MDSZEREK 37

Legyen az egyszersg kedvrt fk = f (xk , y(xk )). Illessznk interpolcis polinomot az


(xkr , fkr ), , (xk , fk ) pontokra s azt integrljuk az adott intervallumon.
Z xk+1 r
X
fki lki (x) dx
xk i=0

r
X Z xk+1
= fki lki (x) dx,
i=0 xk
R xk+1
ahol xk
lki (x) dx elre kiszmthatak. Ebbl kapjunk explicit Adams mdszert vagy
ms nven Adams-Bashforth-mdszert:

yn yn1
= b1 fn1 + . . . + br fnr .
h

Az Adams-Moulton-mdszerhez most az (xkr , fkr ), . . . , (xk+1 , fk+1 ) pontokra illessznk


polinomot s azt integrljuk az [xk , xk+1 ] intervallumon.
Z xk+1 r
X
fki lki (x) dx
xk i=1

r
X Z xk+1
= fki lki (x) dx,
i=1 xk
R xk+1
ahol xk
lki (x) dx elre kiszmthatak. Az elzek alapjn a kvetkez mdszerhez
jutunk:
yn yn1
= b0 fn + b1 fn1 + . . . + br fnr ,
h
ahol b0 6= 0. Ez egy implicit sma, fk+1 -hez szksgnk van yk+1 -re. Az indulshoz kel-
lenek y0 , . . . , yr1 rtkek. Ezek vagy adottak, vagy egy msik mdszerrel kell meghatroz-
ni ket. Az Adams-Bashforth-mdszerrel egytt prediktor-korrektor prknt hasznljk,
azaz elszr Adams-Bashforth-mdszerrel meghatrozzuk uk+1 egy yk+1 kzeltst, majd
ennek segtsgvel az Adams-Moulton-mdszerrel meghatrozzuk yk+1 -et. sszefoglal
nven Adams tpus mdszereknek nevezzk azokat a tbblpses mdszereket, ahol
a0 = 1, a1 = 1, a2 = . . . = ar = 0. ltalnos alakjuk:

yn yn1
= b0 fn + b1 fn1 + . . . + br fnr (3.5)
h

Ha a mdszer explicit, azaz ha b0 = 0, akkor a mdszer Adams-Bashforth mdszernek


nevezzk, mg, ha a mdszer implicit, b0 6= 0, akkor Adams-Moulton mdszernek.
3. FEJEZET. TBBLPSES MDSZEREK 38

3.3. Tbblpses mdszer a Matlabban


Termszetesen tbblpses mdszerek algoritmusai is megtallhatk a Matlabban. Ilyen
pldul az ode113, mely rendje 1-tl 13-ig vltozhat s az Adams-Bashforth-Moulton
PECE mdszeren alapszik. Az algoritmus elszr egy Adams-Bashforth mdszerrel "pre-
diktlja" yn+1 -et, majd az Adams-Moulton mdszer "korriglja" azt. A PECE mdszert
(P = prediction step, E = evaulate, C = correction step) prediktor-korrektor mdszernek
(magyarul: jsl-javt mdszernek) is szoks nevezni. A mdszer egy explicit s egy
implicit mdszer egyms utni alkalmazsa.

Prediktor: Egy explicit mdszer, amellyel megmondjuk, hogy az itercit honnt


indtsuk az implicit mdszer esetn.

Korrektor: Az alkalmazott implicit mdszer, amellyel finomtjuk yn+1 rtkt.

Futtassuk le a pldnkra ezt a programot is. Hvjuk meg a kvetkezkppen, h1 = 0.1


lpskzre: [T1, Y113] = ode113(@diffegy, T1, 1), majd h2 = 0.01 lpstvolsgra:
[T2, X113] = ode113(@diffegy, T2, 1). A mdszer pontossgt az albbi tblza-
tokban lthatjuk:

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.1000 1.0048 1.0048 6.2300e-006
0.2000 1.0187 1.0187 1.8714e-005
0.3000 1.0408 1.0408 2.7885e-005
0.4000 1.0703 1.0703 2.1933e-005
0.5000 1.1065 1.1065 1.8889e-005
0.6000 1.1488 1.1488 1.7254e-005
0.7000 1.1966 1.1966 1.5668e-005
0.8000 1.2493 1.2493 1.4228e-005
0.9000 1.3066 1.3066 1.2872e-005
1.0000 1.3679 1.3679 1.1643e-005
3. FEJEZET. TBBLPSES MDSZEREK 39

tn u(tn ) y(tn ) zn
0 1.0000 1.0000 0
0.0100 1.0000 1.0001 1.6625e-007
0.0200 1.0002 1.0002 1.4800e-007
.. .. .. ..
. . . .
0.1000 1.0048 1.0048 1.4004e-007
.. .. .. ..
. . . .
0.5000 1.1065 1.1065 1.7178e-008
.. .. .. ..
. . . .
0.8000 1.2493 1.2493 2.0090e-008
.. .. .. ..
. . . .
0.9000 1.3066 1.3066 1.8052e-008
.. .. .. ..
. . . .
0.9800 1.3553 1.3553 1.6692e-008
0.9900 1.3616 1.3616 1.6525e-008
1.0000 1.3679 1.3679 1.6360e-008
4. fejezet

sszefoglals

Clunk az volt, hogy numerikus megoldst talljunk kznsges differencilegyenlet kezde-


tirtk feladataira. Erre szmos mdszert nztnk. Megismerkedtnk egylpses s tbb-
lpses mdszerekkel is. Mindegyik mdszernek kiszmoltuk a rendjt s egy adott pldn
teszteltk a pontossgukat. Az albbi tblzatban sszefoglaltam azon mdszerek pon-
tossgt t = 1 pontban, melyekkel a szakdolgozatom foglalkozott:

zn
mdszer h1 = 0.1 h2 = 0.01

explicit Euler 1.9201e-002 1.8471e-003


javtott Euler 6.6154e-004 6.1775e-006
implicit Euler (pontosabb) 1.7664e-002 1.8318e-003
implicit Euler 2.1537e-002 1.8687e-003
ode45 1.2090e-009 1.0903e-009
ode23 1.6607e-005 1.5087e-005
ode113 1.1643e-005 1.6360e-008

Termszetesen a Matlabban nemcsak az itt szerepelt begyazott mdszerek lteznek.


Ezek s az odeset fggvny bemutatsa, a merev rendszerek vizsglata meghaladja a
szakdolgozat kereteit, gy csak egy rviden foglaltuk ssze ezen begyazott mdszerek
fbb jellemzt.
Az ode45 egy explicit Runge-Kutta formuln alapszik, mghozz a Dormand-Prince
pron. ltalban ez az algoritmus a legjobb els prblkozsnak a legtbb differencile-
gyenletre.

40
4. FEJEZET. SSZEFOGLALS 41

Az ode23 is explicit Runge-Kutta mdszeren alapszik, a Bogacki-Shampine pron.


Hatkonyabb lehet az ode45-nl, ha nagyobb a hibahatr vagy, ha differencilegyenlet
enyhn merev.
Az ode113 vltoz rend Adams-Bashforth-Moulton PECE mdszer. Hatkonyabb
lehet az ode45-nl, ha szigorbb hibahatrnl vagy, ha a differencilegyenletet drga
kiszmolni.
Ezeket a mdszereket nem merev feladatok megoldsra terveztk, gy ha nagyon
lassak, akkor inkbb egy msikat prbljunk az albbiak kzl.
Az ode15s vltoz rend mdszer, mely a differencia kpleteken alapszik. ltalban
a Gear-mdszert vagy ms nven BDF mdszert hasznlja, ami kevsb hatkony. Az
ode15s is tbblpses, mint az ode113. Hasznljuk ezt, ha az ode45 elbukik, vagy
nem hatkony, ha a feladat merev, vagy algebrai differencilegyenlet-rendszert akarunk
megoldani.
Az ode23s egy mdostott msodrend Rosenbrock formuln alapszik. Ez egy egy-
lpses mdszer, gy eredmnyesebb lehet az ode15s-nl nagyobb hibahatrnl. Tbb
olyan merev rendszert is meg tud oldani, amelyeknl az ode15s nem hatkony.
Az ode23t a trapz szably egyfajta megvalstsa. Hasznljuk ezt a megoldt, ha a
feladat csak enyhn merev s, ha a megoldst szmtsi hibk nlkl szeretnnk megkapni.
Az ode23t algebrai differencilegyenlet-rendszert is meg tud oldani.
Az ode23tb a TR-BDF2 mdszer megvalstsa, egy implicit Runge-Kutta mdszer,
melynek els lpse egy trapz szably, a msodik lps pedig egy msodrend differencia
kplet. A konstrukci miatt mindkt lpsben ugyanazt az itercis mtrixot hasznlja.
Hasonlan, mint az ode23s hatkonyabb lehet az ode15s-nl nagy hibahatrnl.
Vgl pedig az ode15i vltoz lpskz algoritmus. Ez a mdszer teljesen implicit
differencilegyenletek megoldsra alkalmas.
Ksznetnyilvnts

Ksznettel tartozom tmavezetmnek, Farag Istvnnak, odaad segtsgrt s trel-


mrt. Ksznm Valk vnak s Karsai Tamsnak az tleteiket s tancsaikat, melyek
segtsgvel munkm eredmnyesebb lehetett. Hls vagyok csaldomnak s a szeretteim-
nek tmogatsukrt.

42
Irodalomjegyzk

[1] Bogacki, P. and L. F. Shampine, A 3(2) pair of Runge-Kutta formulas, Appl. Math.
Letters, Vol. 2, 1989.

[2] Dormand, J. R. and P. J. Prince, A family of embedded Runge-Kutta formulae, J.


Comp. Appl. Math., Vol. 6, 1980.

[3] Shampine, L. F. and M. K. Gordon, Computer Solution of Ordinary Differential


Equations: the Initial Value Problem, W. H. Freeman, SanFrancisco, 1975.

[4] J. David Logan, A First Course in Differential Equations, Springer Science+Business


Media, Inc., 2006.

[5] Internetes forrs, David Houcque, Applications of MATLAB: Ordinary Differential


Equations (ODE)
http://www.mccormick.northwestern.edu/docs/efirst/ode.pdf

[6] Farag Istvn, Horvth Rbert, Numerikus Mdszerek Egyetemi Jegyzet, 2011.

[7] Stoyan Gisbert, Tak Galina, Numerikus Mdszerek II, Typotex, 1995.

43