differenciálegyenletek numerikus integrálása -...
TRANSCRIPT
Differenciálegyenletek numerikus integrálása
2019. február 25.
Differenciálegyenletek
Olyan egyenletek, aholI a megoldást függvény alakjában keressükI az egyenletben a függvény és deriváltjai szerepelnekI adottak még kezdeti feltételek és határfeltételek
Példa: leejtett kő mozgásegyenlete
d2x(t)dt2 =
Fm
Kezdeti feltételek:
x(t = 0) = x0dxdt
∣∣∣∣t=0
= v0
Tipikus fizikai problémák
I n-test szimulációk (csillagászat)I molekuladinamika (kölcsönható részecskék)I hővezetésI hidrodinamika (turbulens áramlások)I magnetohidrodinamika (csillagmodellek, plazmafizika)I gravitációs hullámokI molekulapályák számítása (időfüggetlen Schrödinger-egyenlet)I stb.
Példa egyszerű egyenlet megoldására
Az előbbi egyszerű mozgásegyenletet kétszer integrálva dt szerint:
d2x(t)dt2 =
Fm
dx(t)dt =
Fmt + v0
x(t) =F
2mt2 + v0t + x0
Differenciálegyenletek csoportosítása
Változók száma szerintI közönséges: egyváltozós, az x = x(t) megoldás csak t-től függI parciális differenciálegyenlet: többváltozós
ilyenkor parciális deriváltak is szerepelnek
Lineáris vagy nem lineárisI lineáris: ha az x(t) és deriváltjai mind első rendben szerepelnekI nem lineáris: az x(t) vagy deriváltjai magasabb hatványon
A differenciálegyenlet rendjeI az a legmagasabb derivált, ami szerepel az egyenletbenI minden magasabb rendű differenciálegyenlet átírható
többváltozós csatolt elsőrendű egyenletek rendszerére
Közönséges vs. parciális differenciálegyenlet
Közönséges: a keresett függvénynek csak egy változója vanEbben a példában x = x(t) időfüggő
m d2x(t)dt2 = −kx(t)
Parciális: a keresett függvénynek több változója is vanaz egyenletben szerepelnek a parciális deriváltak isMost a ϕ = ϕ(x, t) függvény hely és időfüggő is
∂ϕ(x, t)∂t = D∂2ϕ(x, t)
∂x2
Lineáris vs. nem lineáris differenciálegyenletA tananyagban általában lineáris differenciálegyenletek fordulnakelő, de pl. a folyadékáramlás vagy az általános relativitáselméletegyenletei nem azok.(Nem is nagyon lehet őket általános esetben megoldani.)
Lineáris differenciálegyenlet, példa: harmonikus oszcillátorBár szerepel második derivált, minden derivált lineáris
m d2x(t)dt2 = −kx(t)
Nem lineáris differenciálegyenletPélda: Navier–Stokes-egyenletek
ρ
(∂v∂t + v · ∇v
)= −∇p
Elsőrendű vs. magasabb rendű differenciálegyenlet
Az első rendű egyenletben legfeljebb első rendű derivált szerepelPélda: az I = I(x) fényintenzitás csökkenése fényelnyelő közegben:
dI(x)dx = −kx
A dinamikai törvények többsége lineáris másodrendűdifferenciálegyenletPélda: ismét a harmonikus oszcillátor
m d2x(t)dt2 = −kx(t)
Differenciálegyenletek rendszere
Ha egyszerre több ismeretlen függvényünk is van, és ezekre többegyenletünk, akkor az egy differenciálegyenlet-rendszer.I az egyenletek ugyanazoktól a változóktól függnek
Az egyenletrendszer általában csatoltI ugyanaz a függvény több egyenletben is szerepel, pl:
dy(t)dt = z(t)
dz(t)dt = t − t2z(t)
Másodrendű lineáris egyenletek átírásaMásodrendű (vagy akár magasabb rendű) egyenletek numerikusmegoldása általában nem probléma, ha az egyenlet maga lineáris.
Megoldás menete: átírjuk az egyenletet elsőrendű egyenletekrendszerére, és azokat párhuzamosan integráljuk.
Példa: rugó egyenlete
d2x(t)dt2 = −kx(t)
m
Átírva:
dv(t)dt = −kx(t)
mdx(t)
dt = v(t)
Differenciálegyenletek numerikus megoldása
Lineáris egyenletek analitikus megoldásakorI a homogén egyenlet megoldása az általános megoldásI a konkrét kezdeti feltételeket megkövetelve partikuláris
megoldást kapunk
Numerikus integráláskorI majdnem mindig csak partikuláris megoldást adunkI a függvény értékeit csak diszkrét helyeken adjuk megI bízunk abban, hogy ez nagyon hasonlít az analitikus
megoldáshoz
Mi csak közönséges kezdeti érték problémákat fogunk nézni.
Térbeli határfeltételek
A végtelen fázisteret általában nem szimuláljukI a fizikai folyamatok valamilyen dobozba vannak zárvaI a doboz falán van valamilyen határfeltétel
Példa: molekuladinamikaI mi történik a részecskével a doboz falán?I rugalmasan visszapattanI kimegy az egyik oldalon és bejön a másikon
ezt periodikus határfeltételnek hívjuka nagyon nagy vagy végtelen teret szimulálja
A határfeltétel parciális differenciálegyenleteknél bonyolult.
Közönséges első rendű egyenletek rendszere
Az általános probléma: N darab egyenlet rendszere
dyi(x)dx = fi(x, y1, y2, ..., yN)
I az fi függvények tetszőlegesek, de nem tartalmazzák az yi-kderiváltjait.
I kezdeti feltételek: yi(x = x(0)) = y(0)i
A továbbiakban az i indexet elhagyjuk, és y-t mindig vektornaktételezzük fel.
Kezdeti- és peremfeltételek
Általában a keresett függvények értékei a kiindulási pontbanvannak megadvaI ez persze nem mindig van ígyI lehet, hogy a kezdeti és végpont is adottI vagy nem azonos időpontban adottak a kezdeti paraméterek
Példák:I kisbolygók pozícióját eltérő időpontokban sikerült csak
meghatározni, integrálni kell a pályájukatI ismerjük a részecske kezdőpontját és a végpontbeli sebességét,
meg kell határozni a pályáját
Az Euler-módszerÖtlet:I kezeljük a problémát iteratívanI írjük át a dx differenciálokat véges ∆x differenciákraI a ∆x lépéshosszt általában h-val jelöljükI léptessük a változók értékét diszkrét lépésekbenI az összes változót egyszerre!
yn+1 = yn + h · f(xn, yn)
Eközben a független változó is lép:
xn+1 = xn + h
Ez az ún. Euler-módszerI nem jó módszerI még akkor sem, ha a lépéseket nagyon picire vesszük
Az Euler-módszer hibája
Az Euler-módszer esetében a deriváltak értékét mindig a lépéselején vesszükI ha a derivált a lépés során túl gyorsan változik, akkor a
lépésnek lesz valamekkora hibájaI idővel nagy lesz az eltérés az analitikus megoldástólI az Euler-módszer hibája ugyan O(h2)
I viszont a lépések számával a hiba felösszegződikI ha a lépést felére csökkentjük, a hiba a negyedére csökken, de
kétszer több lépésre van szükség
v
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
0 5 10 15 20 25 30 35 40
dt = 0.01
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
0 5 10 15 20 25 30 35 40
dt = 0.001
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
0 5 10 15 20 25 30 35 40
dt = 0.05
A hiba kiszámításaEuler-módszer formulája:
yn+1 = yn + h · f(xn, yn)
Tegyük fel, hogy xn helyen a diszkréten számított yn és az egzakty(xn) megoldás azonos volt.I nézzük meg az eltérést egy lépés utánI ez lesz a lokális hibaI tekintsük y Taylor-sorát x körül az x + h helyen:
yn+1 = y(x + h) = y(x) + dydxh +
12
d2ydx2 h2 + ...
I hasonlítsuk össze az Euler-módszer formulájávalI mivel a módszer kifejezése ennek csak az első két tagját adja
meg, nem lehet pontosabb O(h2)-nélMivel a teljes számolás során ∼ 1/h lépés végzünk, ezért a globálishiba nem lehet kisebb O(h)-nál.
Energiamegmaradás
Az előző példában: harmonikus oszcillátorI a test minden kilengéskor egy kicsit túllendültI ez a módszer módszer pontatlansága miatt volt ígyI a test minden kitéréskor plusz potenciális energiát nyertI ez kinetikus energiává konvertálódott
Dinamikai rendszerek szimulációjakor az energiamegmaradásalapkövetelmény ⇒I az Euler-módszer nem lesz jó!I túl nagy energia nyereség/veszteség lépésenkéntI vagy keresünk olyan módszert, ami megtartja az energiát1,I vagy megpróbáljuk csökkenteni a hibát
1ún. szimplektikus integrátorok
A leapfrog2 módszer
Másodrendű dinamikai egyenleteknél működikI a sebességeket és a koordinátákat külön-külön lépésben
frissítjükI másodrendű módszer, a hiba O(h4)
xn = xn−1 +∆t · vn−1/2
an =F(xn)
m
vn+1/2 = vn−1/2 +∆t · an
A hiba lecsökkent, mégis ugyanannyi számolást kell csak végezni!
2bakugrás
Az integrálási idő invertálhatósága
Vajon visszafele integrálható-e egy rendszerI ha nem disszipatív, akkor elvileg igenI megmarad az energiaI nincsen belső súrlódás, viszkozitás stb.
Érdekes kérdés:I visszafele léptetve egy diszkrét integrátort,
visszajutunk-e az eredeti kiindulási pontba?I egyszerű integrátorral általában nemI a numerikus hibák összeadódnakI kaotikus egyenleteknél pedig fel is erősödnek
Az Euler-módszer
Az Euler-módszer javításaAz Euler-módszer aszimmetrikus:I Fejezzük ki most yn-et yn+1-ből:
yn = yn+1 − h · f(xn, yn)
I az aszimmetria ott jelenik meg, hogy a deriváltat mindig az xnhelyen vesszük.
Javítsunk a módszeren:I kiszámoljuk a deriváltat egy középső pontbanI ezt használjuk a teljes lépésben
k1 = h · f(xn, yn)
k2 = h · f(
xn +h2 , yn +
k12
)yn+1 = yn + k2 + O(h3)
Az Euler-módszer javítása
Az Euler-módszer
Az összes változót egyszerre léptetjük:
yn+1 = yn + h · f(xn, yn) + O(h2)
Majd végül léptetjük a független változót is:
xn+1 = xn + h
Az y itt több változó vektora:I tetszőleges fizikai mennyiségekből állI pl.: fázistér: koordináták és sebességek
Az x változó skalár, és általában az időnek felel meg.
Figyelem: a potenciálokat is mindig az időlépés kezdetén kellkiértékelni!
Az Euler-módszer
Példa Euler-módszerreHarmonikus oszcillátor: d2x
dt2 = −kxm
Mivel ez másodrendű, átírjuk elsőrendű egyenletek rendszeréredvdt = −kx
mdxdt = v
Felírjuk az egyenletrendszer diszkretizált változatát
vn+1 = vn −k · xn
m ·∆txn+1 = xn + vn ·∆t
Majd az idő léptetése
tn+1 = tn +∆t
Itt most x és v felel meg a korábbi y vektor elemeinek, t a korábbix független változónak és ∆t a h lépésköznek.
void e u l e r _ s t e p ( double∗ x , double∗ y ,double∗ yn , double h ,i n t N)
{i n t i ;f o r ( i = 0 ; i < N; i ++){
yn [ i ] += y [ i ] + h ∗ dy ( x , y , i ) ;}∗x += h ;
}
double dy ( double∗ x , double∗ y , i n t i ){
// i t t k i s z a m o l j u k az i . d e r i v a l t a t}^^ I
Példa a leapfrog módszerre
Korábbi egyenlet: harmonikus oszcillátor
Először a sebességet léptetjük(az összes komponenst, bár itt most csak egy van)
vn+1/2 = vn −k · xn
m ·∆t
majd a koordinátát
xn+1 = xn + vn+1/2 ·∆t
végül az időttn+1 = tn +∆t
Az Euler-módszer javítása: középponti módszerAz Euler-módszer aszimmetrikus:I Fejezzük ki most yn-et yn+1-ből:
yn = yn+1 − h · f(xn, yn)
I az aszimmetria ott jelenik meg, hogy a deriváltat mindig az xnhelyen vesszük.
Javítsunk a módszeren:I teszünk egy fél lépéstI kiszámoljuk a deriváltat egy középső pontbanI ezt használjuk a teljes lépésben
k1 = h · f(xn, yn)
k2 = h · f(
xn +h2 , yn +
k12
)yn+1 = yn + k2 + O(h3)
A középponti módszer
A hiba további csökkentése: a Runge–Kutta-módszer
A lépést több részlépésből előállítva bízhatunk abban, hogy a hibatovább csökken.
k1 = h · f(xn, yn)
k2 = h · f(xn +12h, yn +
12k1)
k3 = h · f(xn +12h, yn +
12k2)
k4 = h · f(xn + h, yn + k3)
yn+1 = yn +16k1 +
13k2 +
13k3 +
16k4 + O(h5)
A negyedrendű Runge–Kutta-módszer
Módszerek összehasonlítása
f kiértékeléseinekszáma
hiba
Euler-módszer 1 O(h2)középponti módszer 2 O(h3)4-ed rendű Runge–Kutta 4 O(h5)
A Runge–Kutta-módszer magasabb rendekre is általánosíthatóI meddig érdemes elmenni?I a több köztes pont mindig nagyobb pontosságot jelent?I nem feltétlenülI viszont több függvénykiértékeléssel jár
Adaptív lépéshossz-változtatásEddig a h lépéshosszt rögzítettnek vettükI a megoldás van, ahol gyorsan változik, van ahol lassanI ahol lassan változik, ott léphetnénk nagyobbatI valahogyan meg kell becsülni, hogy h megváltoztatásával
mekkora hibát vétünkI ha kellően kicsit, akkor megéri h-t növelni
Végezzük el az előbbi RK4 lépéstI egyetlen lépésbenI két fél lépésben
Ez jóval több függvénykiértékelést igényel (12, de kettő azonoshelyen van véve, így csak 11)I megéri-e?I a konkrét problémától függ
A Runge–Kutta-lépés hibájának becslése
Az RK4 lépést előbb egy, majd két fél lépésben végezzük:
Tekintsük a végeredmények különbségét
∆ = y2 − y1
I több koordináta esetén a maximum ∆ kell
Az optimális lépéshossz kiválasztása
A negyedrendű Runge–Kutta-módszer hibája O(h5)
I h1 nagyságú lépést téve a hiba ∆1I mekkora legyen h0, hogy a hiba ∆0 legyen?
h0 = h1
∣∣∣∣∆0∆1
∣∣∣∣ 15
I h1-et az előző lépésből vesszükI ∆1-et számoljukI ∆0 viszont adottI megmondjuk, hogy mekkora hibát engedünk az integrálás
során
Az adaptív lépéshossz előnye és hátránya
ElőnyeI nem kell előre megbecsülni a lépéshossztI azt a módszer automatikusan kitaláljaI a megoldás lapos szakaszain nagyon gyorsan halad
HátrányaI nem becsülhető előre a futásidőI ha a megoldás végig gyorsan változó, nagyon belassul
Példa: Naprendszer szimulációjaI nagyon pontos számítást igényel (akár RK8)I a Merkúr nagyon közel van a NaphozI miatta folyton nagyon belassul
A Runge–Kutta-együtthatók meghatározása
Az együtthatók meghatározása nagyon nehézI minden módszer egy külön cikket ér!I az együtthatókat egy ún. Butcher-táblában adják megI RK4 táblázata:
0
12
12
12 0 1
2
1 0 0 1
16
13
13
16
A Richardson-extrapolációHa garantált, hogy a megoldás simaI tegyünk meg egy lépést először kettőI majd 4, 6, 8 stb. részlépésbenI nézzük a megoldás konvergenciájátI extrapoláljunk a h = 0 esetre
A függvénykiértékelések számának minimalizálásaA Richardson-extrapoláció rengeteg függvénykiértékelést igényelI próbáljunk ezen optimalizálniI egy H lépést tegyünk meg n kis lépésben: h = H
n
z0 = y(x)z1 = z0 + h · f(x, z0)
zm+1 = zm−1 + 2h · f(x + mh, zm),
ahol az harmadik sor m = 1, 2, ..., n − 1 esetekre vonatkozik.I ezekből az n részlépéses próbalépés végül
y(x + H) ≈ 12 [zn + zn−1 + h · f(x + H, zn)]
I belátható, hogy – szemben a Runge–Kuttával, ahol egylépéshez négy függvénykiértékelés kellett – most csak egykiértékelés kell
Az extrapoláció numerikus stabilitása
Richardson-extrapolációkorI a lépésközt n növelésével finomítani kellI extrapolálni kell a h = 0, azaz n = ∞ esetre
Bulirsch–Stoer-módszerI végezzük az extrapolációt racionális törtfüggvényekkelI ez numerikusan stabil leszI tovább bonyolítható: adaptív lépéshossz-változtatás
Extrapoláció racionális törtfüggvényekkelÍrjuk a kiszámolt értékeket egy táblázatba:
T11T21 T22T31 T32 T33... ... ... ...
I Tk1 = yk, ahol yk = y(x + H), ahol a H lépést nk kisebbh = H/nk lépésből tettük meg
I a sorokat így lehet polinommal interpolálni:
Tk,j+1 = Tkj +Tkj − Tk−1,j
(nk/nk−j)2 − 1 j = 1, 2, ..., k − 2
I a hibát a sor két utolsó eleme adja
Problémás egyenletek
Ha az integrálás során megjelenő értékek sok nagyságrenddeleltérnekI a numerikus stabilitás problémásI a stabilitáshoz irreálisan kis lépéseket kell tenni
Példa egyenlety′ = −cy c > 0
I a megoldást ismerjük: y(x) = exp (−cx), deI ha az Euler-formulát írjuk fel, akkor
yn+1 = yn + hy′(xn) = (1 − ch)yn
I ha h > 2/c, akkor |yn| végtelenhez tart, pedig 0-hoz kellene
Egész ártatlan, de problémás egyenletekEgyszerű egyenlet u(0) = 1 és v(0) = 0 peremfeltételekkel:
u′ = 998u + 1998vv′ = −999u − 1999v
Megoldás helyettesítéssel:
u = 2y − z v = −y + z
vagyis
u = 2e−x − e−1000x
v = −ex + e−1000x
A stabilitásához h = 2/1000 kellene, pedig a második tagokteljesen elhanyagolhatók.
Implicit integrálási módszerek
Eredeti Euler-lépés:
yn+1 = yn + hf(xn, yn)
Vegyük ezt visszafelé, azaz a deriváltakat a lépés végén tekintsük:
yn+1 = yn + hf(xn+1, yn+1)
I yn+1 az egyenlet mindkét oldalán szerepelI ez egy implicit egyenlet yn+1-reI f tetszőlegesen bonyolult, de ismert függvényI konkrét f esetén yn+1 kifejezhető explicit alakban
Példa implicit módszerre
Korábbi problémás egyenlet:
y′ = −cy c > 0
Expliciten diszkretizálva:
yn+1 = yn + h · y′(xn) = yn − h · cyn
Impliciten diszkretizálva:
yn+1 = yn + h · y′(xn+1) = yn − h · cyn+1
Kifejezve yn+1-et:yn+1 =
yn1 + hc
Ez már szépen konvergál 0-hoz, ha c > 0
Implicit módszerek differenciálegyenlet-rendszerekre
Ha lineáris differenciálegyenlet-rendszerünk vanI f az yn+1-nek csak lineáris függvényeI ekkor minden lépésben lineáris egyenlet kell megoldani
Ha f általános függvényI ezt nem tudjuk egzaktul megoldaniI csak iteratív módszerekkel lehet kezelni az implicit kifejezést