Numerická matematika 2

Hlavní téma: numerické řešení okrajových a smíšených úloh pro diferenciální rovnice

Praktická část zkoušky: vyřešit jeden z příkladů

Ústní část zkoušky: klasické věty a důkazy, praktické použití metod

Kdo odevzdá praktickou část do určitého termínu (7. 6. 2024), bude mít u zkoušky o jednu otázku méně (3 → 2)

Termíny zkoušek (je potřeba přihlášení, stejné jako u DIFR)

Obsah

  1. Okrajové úlohy pro diferenciální rovnice
    1. Typy běžných okrajových podmínek
    2. Převod mezi tvary rovnic
  2. Shrnutí poznatků o počátečních úlohách
  3. Metoda střelby
    1. Metoda střelby pro okrajovou podmínku nelineárního typu
    2. Metoda střelby pro soustavu lineárních rovnic
    3. Potíže metody střelby
    4. Metoda střelby na více cílů
  4. Metoda sítí
    1. Diferenční náhrady nejběžnějších typů derivací
      1. Náhrady y(x)
      2. Náhrada y(x)
      3. Náhrada y(4)(x)
    2. Chyba aproximace diferenciálního operátoru
    3. Metoda energetických nerovností
    4. Metoda sítí pro další okrajové podmínky
    5. Metoda sítí pro eliptické parciální diferenciální rovnice
    6. Metoda sítí pro evoluční úlohy
      1. Explicitní schéma
      2. Implicitní schéma
      3. Crautovo-Nicolsonové schéma
      4. Metoda přímek
  5. Numerické řešení úloh s advekcí
  6. Zákony zachování

Okrajové úlohy pro diferenciální rovnice

Okrajová úloha pro obyčejnou diferenciální rovnici s nelineární pravou stranou
y=f(x,y,y),x(a,b) y(a)=γ1 y(b)=γ2
Okrajová úloha pro lineární obyčejnou diferenciální rovnici druhého řádu v samoadjungovaném tvaru
(p(x)y)+q(x)y=f(x),x(a,b) α1p(a)y(a)β1y(a)=γ1 α2p(b)y(b)+β2y(b)=γ2 p,p,q,f𝒞(a,b),p(x)p0>0,q(x)0 αi,βi,γi,αi,βi0,αi+βi>0
Okrajová úloha pro soustavu obyčejných diferenciálních rovnic prvního řádu s nelineární okrajovou podmínkou
y=f(x,y),x(a,b) r(y(a),y(b))=0 f:1+nn,y:a,bn,r:n+nn

Typy běžných okrajových podmínek

Budeme uvažovat rovnici v samoadjungovaném tvaru.

Podmínky jsou zde uvedené pro oba okraje, ale můžou být i na každém různá.

Dirichletova okrajová podmínka
α1=α2=0,β1=β2=1y(a)=γ1,y(b)=γ2
Neumannova okrajová podmínka
α1=α2=1,β1=β2=0p(a)y(a)=γ1,p(b)y(b)=γ2 Předepisuje „tok“ veličiny skrz hranici
Newtonova/Robinova okrajová podmínka
(α10β10)(α20β20)
Poznámka. Proč je u samoadjungované úlohy β1 a +β2? Protože u každého okraje chceme, aby „tok“ směřoval ven.

Převod mezi tvary rovnic

Každá obyčejná diferenciální rovnice vyššího řádu se dá převést na soustavu prvního řádu. Viz DIFR.

y=f(x,y,y) z1=z2,z2=f(x,z1,z2)

Každá lineární obyčejná diferenciální rovnice druhého řádu jde převést do samoadjungovaného tvaru.

Shrnutí poznatků o počátečních úlohách

Jelikož ve skutečnosti budeme řešit okrajové úlohy, proměnnou budeme značit x, nikoliv t.

Základní tvar počáteční úlohy:

y=f(x,y),y(x0)=y0 f:Dfn,Df1+n oblast,[x0,y0]Df,y:n,f𝒞(Df),yf𝒞(Df)

Na DIFR jsme si dokázali:

Věta (o existenci a jednoznačnosti). Za daných předpokladů existují δ+,φ:(x0δ,x0+δ)n takové, že φ je na (x0δ,x0+δ) jediné řešení rovnice. Navíc opakovaným použitím tvrzení lze řešení rozšířit až na neprodloužitelný rozsah (m1(x0,y0),m2(x0,y0)), pro nějž platí alespoň jedna z podmínek (zvlášť pro obě hranice, uvádíme jen pro pravou):
Věta (o spojité závislosti a diferencovatelnosti podle počátečních podmínek). Nechť [x^0,y^0]Df a r1,r2(m1(x^0,y^0),m2(x^0,y^0)). Pak řešení počáteční úlohy pro proměnlivé [x0,y0], které označíme φ(x;x0,y0), spojitě závisí na hodnotách x0,y0 v bodě [x^0,y^0] a je zde spojitě diferencovatelná podle složek y0 pro xr1,r2.
Poznámka. Existující derivace (y0)kφ(x;x^,y^) splňují tzv. úlohu ve variacích. Tu odvodíme tak, že dosadíme φ do počáteční úlohy: xφ(x;x0,y0)=f(x,φ(x;x0,y0)),φ(x0;x0,y0)=y0 a zderivujeme po složkách podle y0: (y0)kxφi(x;x0,y0)=l=1nylfi(x,φ(x;x0,y0))(y0)kφl(x;x0,y0),(y0)kφi(x0;x0,y0)=δi,k Když se na tuto úlohu podíváme pod vlivem dostatečného množství halucinogenů, uvidíme, že se v ní skrývá matice, takže je to soustava lineárních diferenciálních rovnic prvního řádu: (tohle je můj zápis, ne Benešův; písmenem 𝛁 značím matici parciálních derivací) 𝛁y0xφ(x;x0,y0)=𝛁yf(x,φ(x;x0,y0))𝛁y0φ(x;x0,y0)
Poznámka (numerické řešení počáteční úlohy). Zdiskretizujeme si časovou proměnnou: xkx0+kh,h+,k{0,,NF} Aproximace funkčních hodnot můžeme získat Eulerovou metodou: yk+1yk+hf(xk,yk) Ta je jednoduchá, ale má malou přesnost; přesto se často dá využít. Pro přesnější výsledek můžeme využít například Runge-Kuttovu metodu čtvrtého řádu: K1f(xk,yk) K2f(xk+h2,yk+h2K1) K3f(xk+h2,yk+h2K2) K4f(xk+h,yk+hK3) yk+1yk+h6(K1+2K2+2K3+K4) Teoretické odvození této metody je na cvičení. Pro naše potřeby je naprosto postačující. Pozor, ve WikiSkriptech jsou ty vzorce prý napsané špatně! A Kutt je německé jméno, tedy čte se [kut], nikoliv [kʌt]!

Metoda střelby

Jako jednoduchou typovou úlohu vezmeme jednu rovnici druhého řádu s Dirichletovými okrajovými podmínkami:

y=f(x,y,y),x(a,b),y(a)=γ1,y(b)=γ2

Myšlenka je taková, že si zvolíme hodnotu derivace na jednom okraji a budeme úlohu řešit jako počáteční. Jakmile se dostaneme na konec neboli na druhý okraj, nejspíš zjistíme, že jsme se dostali jinam, než jsme chtěli. Tak zvolíme jinou počáteční derivaci a zkusíme znovu.

Formálněji: Budeme opakovaně řešit počáteční úlohu (pomocí Eulerovy nebo Runge-Kuttovy metody)

y=f(x,y,y),y(a)=γ1,y(a)=α

Tím dostaneme nějaké řešení y(x;α) a chceme najít α takové, aby y(b;α)=γ2. To můžeme hledat například pomocí metody půlení intervalu nebo Newtonovy metody.

Půlení intervalu tedy bude fungovat tak, že najdeme α1,α2 tak, aby y(b;α1)<γ2 a y(b;α2)>γ2. Nastavíme α1α1,α2α2,αα1+α22. Je-li y(b;α)<γ2, do další iterace vezmeme α1α, jinak α2α. Končíme, jakmile vzdálenost bude menší než nějaká tolerance. Většinou se používá relativní tolerance 106.

Ale pomocí Newtonovy metody to často konverguje rychleji. Rovnici y(b;α)=γ2 můžeme zapsat jako F(α)=0, kde F(α)y(b;α)γ2. Potom stačí iterovat podle vzorečku αk+1αk(F(αk))1F(αk). Akorát si musíme napočítat derivaci:

F(α)=α(y(b;α)γ2)=αy(b;α)

Tuto derivaci určíme řešením úlohy ve variacích.

Nebo pokud se nám nechce hledat derivaci tímhle způsobem, můžeme ji zkusit aproximovat podle definice, ovšem nic nám nezaručuje, že to bude dobrá aproximace:

F(αk)F(αk)F(αk1)αkαk1

Newtonova metoda poskytuje posloupnost (αk) konvergující k řešení, ale |F(αk)| nemusí konvergovat monotónně. Pokud nám to vadí, můžeme použít modifikaci, jejíž myšlenka je v tom, že se budeme pohybovat o menší kus, abychom nepřestřelili:

αk+1αkλk(F(αk))1F(αk),λk(0,1

Samozřejmě je nutné správně zvolit λk. Označme

Δαk(F(αk))1F(αk)(o kolik se posouvaˊme prˇi normaˊlnıˊ Newtonoveˇ metodeˇ) Φ(α)F(α)22=j=1nFj(α)2(jakaˊsi chyba aproximace) φ(λ)Φ(αk+λΔαk)(chyba, kdyzˇ se posuneme o λ-naˊsobek normaˊlnıˊho kroku)

Spočteme si

φ(λ)=2j=1nFj(αk+λΔαk)l=1nαlFj(αk+λΔαk)(Δαk)l=2F(αk+λΔαk)T(F(αk+λΔαk)Δαk) φ(0)=2F(αk)T(F(αk)Δαk)=2F(αk)T(F(αk)(F(αk))1F(αk))=2Φ(αk)<0

Jelikož φ𝒞1, jistě najdeme λ0+ takové, že φ(λ)<0 pro λ0,λ0).

Algoritmus bude vypadat tak, že nejprve zvolíme λk=1. Pokud Φ(αk+λkΔαk)<Φ(αk), spočteme si αk+1αk+λkΔαk a budeme normálně pokračovat. Pokud ne, pokusíme se najít vhodné λ – například budeme opakovaně půlit, až bude nerovnost platit (což z teorie plyne, že nastane). Každopádné skončíme, až bude Φ(αk)<ε2, kde ε je zadaná tolerance.

Metoda střelby pro okrajovou podmínku nelineárního typu

Typová úloha:

y=f(x,y),r(y(a),y(b))=0,f:1+nn,r:n+nn,n2

Parametry funkce r budeme značit ξ,η.

Budeme řešit podobnou počáteční úlohu, ale s tím, že α je tentokrát vektor:

y=f(x,y),y(a)=α

Chceme najít správné α pomocí okrajové podmínky. Budeme tedy řešit rovnici

r(α,y(b;α))=0

Tu budeme řešit pomocí Newtonovy metody, kde vezmeme F(α)r(α,y(b;α)).

F(αk)i,j=αjFi(αk)=ξjri(αk,y(b;αk))+l=1nηlri(αk,y(b;αk))αjyl(b;αk)

Ke spočtení tohoto potřebujeme řešit soustavu ve variacích:

xαjyi(x;α)=l=1nylfi(x,y(x;α))αjyl(x;α),αjyi(a;α)=δi,j

Metoda střelby pro soustavu lineárních rovnic

y=𝐀(x)y+b(x),𝐔y(a)+𝐕y(b)=c 𝐀:a,bn×n,𝒞0 b:a,bn,𝒞0 (b jako beneš není schopný značit různé věci různými písmeny) cn,𝐔,𝐕n×n,h(𝐔)+h(𝐕)=n

Opakovaně řešíme počáteční úlohu

y=𝐀(x)y+b(x),y(a)=α

Využijeme toho, že kdyby bylo jen y=𝐀(x)y, dokážeme soustavu řešit analyticky pomocí matice fundamentálního systému:

Φ(x)[v11(x)vn1(x)v1n(x)vnn(x)]

Kdž najdeme partikulární řešení y0(x) rovnice y=𝐀(x)y+b(x), můžeme vyjádřit řešení alfové úlohy:

y(x;α)=Φ(x)α+y0(x)

Teď budeme hledat správné α:

𝐔α+𝐕(Φ(b)α+y0(b))=c (𝐔+𝐕Φ(b))α=c𝐕y0(b)

To je prostě lineární soustava, jejíž řešitelnost je daná povahou matice 𝐔+𝐕Φ(b).

Potíže metody střelby

Zjevná nevýhoda je v tom, že malé rozdíly na začátku mohou způsobit velké rozdíly na konci. Ukážeme si to na konkrétní úloze.

Metoda střelby na více cílů

To, co nám u metody střelby způsobilo potíže, byl příliš dlouhý interval. Tak co kdybychom si ho nějakým způsobem rozsekali?

Vezměme si jako typovou úlohu opět rovnici s nelineární vazbou:

y=f(x,y),r(y(a),y(b))=0,x(a,b)

Rozdělíme interval a,b na m částí, které nemusí být stejně dlouhé. Budeme opakovaně řešit počáteční úlohu na intervalech xk1,xk,km^ s řešením y(x;αk). Úlohy budou vypadat takto:

y=f(x,y),y(xk1)=αk,x(xk1,xk)

Zároveň je musíme nějak provázat mezi sebou. K tomu si přidáme podmínky:

y(xk;αk+1)=αk,km1^ r(α1,y(xm;αm1))=0

Vzniklou soustavu budeme řešit – jak jinak – Newtonovou metodou. Máme funkci

F(α)=[y(x1;α0)α1y(x2;α1)α2y(xm1;αm2)αm1r(α1,y(xm;αm1))]

Newtonova iterace bude mít tvar

α(l+1)=α(l)(F(α(l)))1F(α(l))

Hodnotu F(α(l)) určíme řešením jednotlivých úloh (třeba Runge-Kuttovou metodou). S derivací už to bude horší:

F(α)=((αk)jFi(α))imn^,km^,jn^=(𝐆1𝐈𝐆2𝐈𝐆3𝐆m1𝐈𝐀𝐁) (𝐆k)i,j(αk)jyi(xk;αk),𝐀i,jξjri(α1,y(xm;αm)),𝐁i,js=1nηsri(α1,y(xm;αm))(αm)jys(xm;αm)

Teď se pořádně nadechneme a odvodíme si úlohu ve variacích:

xy(x;αk)=f(x,y(x;αk)),y(xk1;αk)=αk,x(xk1,xk) x(αk)jyi(x;αk)=s=1nyjfi(x,y(x;αk))(αk)jyj(x;αk),(αk)jyi(xk1;αk)=δi,j Tyto úlohy můžeme bez záruky zkusit nahradit definicí derivace: (αk)j(xk,αk)yi(xk;αk)y(xk;αk((αk)j(αk1)j)ej)(αk)j(αk1)j

Metoda sítí

Alternativní názvy: metoda konečných diferencí, metoda konečných rozdílů

Metoda spočívá v tom, že aproximujeme derivace diferencemi v konečně mnoha bodech a dostaneme tím algebraicky řešitelnou soustavu rovnic.

Jako typovou úlohu si vezmeme naši oblíbenou samoadjungovanou rovnici:

(p(x)y)+q(x)y=f(x),y(a)=γ1,y(b)=γ2,x(a,b) p,p,q,f𝒞(a,b),q(x)0,p(x)c0>0,xa,b

Nejprve diskretizujeme množinu a,b tím, že na ni rozmístíme vnější a vnitřní síť uzlů (pro jednoduchost je rozmístíme rovnoměrně):

ωh{a+jh|j=0,,m} ωh{a+jh|j=1,,m1}

m je počet dílů, h je velikost oka sítě. Tyto dvě sítě se liší v tom, jestli obsahují hraniční uzly:

γhωhωh={a,a+mh}

Diferenciální výrazy diskretizujeme pomocí Taylora (taky by to šlo pomocí Lagrange, ale Taylor je jednodušší na odvození a zapamatování). Nechť f^𝒞m(0,1), potom

f^(1)=k=1m1f^(k)(0)k!+m01sm1f^(m)(1s)m!ds

(S tímto tvarem zbytku jsme se v MAN2 nesetkali, ale údajně se dá snadno odvodit.)

Pro naše účely si vezmeme f^(t)y(x+th),t0,1. Spočteme si

f^(k)(t)=y(k)(x+th)hk

Použitím vzorečku máme

y(x+h)=k=1m1y(k)(x)hkk!+m01sm1y(m)(x+(1s)h)hmm!dsR(m)(x,h)

Všimněme si, že výraz R(m)(x,h)hm je omezený.

Definice (Landaův symbol 𝒪). Pokud funkce g na okolí nuly H0 splňuje (K+)(α0+)(xH0)(|g(x)xα|K) potom říkáme, že g se na H0 chová jako 𝒪(xα) a píšeme g(x)=𝒪(xα).
Definice (Landaův symbol ). Pokud funkce g na okolí nuly H0 pro nějaké α0+ splňuje limx0g(x)xα=0 potom říkáme, že g se na H0 chová jako (xα) a píšeme g(x)=(xα).
Poznámka. R(m)(x,h)=𝒪(hm)

Diferenční náhrady nejběžnějších typů derivací

Náhrady y(x)

Pro m=2 máme

y(x+h)=y(x)+y(x)h+R(2)(x,h) y(x)=y(x+h)y(x)h+𝒪(h)

Provedeme-li stejný postup s náhradou h za h, dostaneme

y(x)=y(x)y(xh)h+𝒪(h)

Pro m=3 dostaneme

y(x±h)=y(x)±y(x)h+y(x)h22+R(3)(x,±h)

Odečteme-li tyto dvě rovnosti (pro + a ) od sebe, dostaneme

y(x+h)y(xh)=2y(x)h+R(3)(x,h)R(3)(x,h) y(x)=y(x+h)y(xh)2h+𝒪(h2)

Shrneme si všechny náhrady první derivace do tabulky:

NázevNáhradaChyba
dopředná diferenceyx(x)y(x+h)y(x)h𝒪(h)
zpětná diferenceyx(x)y(x)y(xh)h𝒪(h)
centrální diferenceyx˚(x)y(x+h)y(xh)2h𝒪(h2)

Náhrada y(x)

Pro m=4 máme

y(x±h)=y(x)±y(x)h+y(x)h22±y(x)h36+R(4)(x,±h)

Sečtením obou rovností dostáváme

y(x+h)+y(xh)=2y(x)+y(x)h2+R(4)(x,h)+R(4)(x,h) y(x)=y(x+h)2y(x)+y(xh)h2+𝒪(h2)

Zavedeme tedy centrální druhou diferenci:

yxx(x)y(x+h)2y(x)+y(xh)h2

Toto označení sice vypadá divně, ale dává smysl, protože můžeme snadno ověřit, že (yx)x(x)=yxx(x).

Náhrada y(4)(x)

Podobným způsobem odvodíme centrální čtvrtou diferenci:

y(4)(x)=yxxxx(x)+𝒪(h2) yxxxx(x)y(x+2h)4y(x+h)+6y(x)4y(xh)+y(x2h)h4

V našem příkladu použijeme náhradu (p(x)y)(pyx)x(x) (ale to není jediná možnost). Speciálně pro p konstantní máme (pyx)x(x)=pyxx(x). Dokážeme si, že to dobře funguje i pro nekonstantní.

Věta. Nechť p,y jsou dostatečně regulární, konkrétně p𝒞3,y𝒞4, potom (py)(x)=(pyx)x(x)+𝒪(h)

Nyní si můžeme sestavit algebraickou rovnici pro aproximaci řešení v uzlech sítě.

Definice. Síťová funkce je zobrazení u:ωh. Značíme u(a+jh)uj. Potom (u0,,um) je vektor síťové funkce. Množinu všech síťových funkcí s rozestupem h budeme značit h.

Diferenciální rovnici omezíme na uzly sítě ωh:

(py)(a+jh)+q(a+jh)y(a+jh)=f(a+jh),j=1,,m1

Provedeme-li náhradu konečnou diferencí a označíme si síťové funkce, dostaneme

((pyx)x)j+𝒪(hα)+qjyj=fj

Se členem 𝒪(hα) toho moc neuděláme, protože vůbec netušíme, co v něm je. Můžeme se spoléhat akorát na to, že když zvolíme dostatečně malé h, tak bude taky dostatečně malý. Tudíž se na něj vykašleme. Ale tím pádem už nemáme přesné řešení, což zdůrazníme tím, že funkci f přejmenujeme na u. Rovnici poté můžeme vyjádřit ve vektorovém tvaru:

(pux)x+qu=f,u0=γ1,um=γ2

Pokud si do toho dosadíme naše krásné vyjádření (pux)x, dostaneme soustavičku

u0=γ1p1h2u0+p1+p2h2u1p2h2u2+q1u1=f1p2h2u0+p2+p3h2u2p3h2u3+q2u2=f2pjh2u0+pj+pj+jh2ujpj+jh2uj+j+qjuj=fjpm1h2u0+pm1+pmh2um1pmh2um+qm1um1=fm1um=γ2

Vidíme, že vznikla soustava lineárních rovnic s tridiagonální maticí. Budeme ji řešit maticovou faktorizací. Kompletně si všechno přeznačíme, abychom měli dost písmenek:

u0=ϰ1u1+μ1 Ajuj1Cjuj+Bjuj+1=Fj,j=1,,m1 um=ϰ2um1+μ2

přičemž pro tuto konkrétní úlohu máme

ϰ1,2=0,μ1,2=γ1,2 Aj=pjh2,Cj=pj+pj+1h2qj,Bj=pj+1h2,Fj=fj,j=1,,m1

Teď to vypadá, že jame si tam ϰ1,2 zaváděli zbytečně, ale u jiné okrajové podmínky by se mohly objevit.

Řešení funguje tak, že zvolíme α1ϰ1,β1μ1 a budeme rekurentně počítat

αj+1BjCjαjAj,βj+1βjAj+FjCjαjAj,j=1,,m1

Potom si zpětně napočteme

umμ2+ϰ2βm1αmϰ2 uj1αjuj+βj,j=m,,1

Tím jsme našli řešení. Teď vyvstává otázka, jak velké chyby jsme se dopustili. Chceme porovnat skutečné řešení y s řešením v podobě síťové funkce u, které jsme našli. Samozřejmě potíž je v tom, že y je definovaná na a,b, zatímco u jen na ωh. Zjevné řešení je prostě zúžit y na ωh. Druhá možnost je nějakým způsobem rozšířit u na a,b.

Definice. Operátor restrikce je zobrazení 𝒫h:𝒞(a,b)h,𝒫hyy|ωh Tedy tento operátor vezme spojitou funkci a vytvoří z ní síťovou funkci, která odpovídá jejím hodnotám v bodech sítě.   𝑦 𝒫ₕ 𝑦
Definice. Operátor po částech konstantního rozšíření je zobrazení Sh:hL2((a,b)),Shu(x)uj,x(a+jhh2,a+jh+h2) Tedy tento operátor vezme síťovou funkci a vytvoří z ní po částech konstantní funkci tak, že kolem každého bodu udělá rovnou plošku. 𝑆ₕ 𝑢 𝑢
Definice. Operátor po částech lineárního rozšíření je zobrazení Qh:h𝒞(a,b),Qhu(x)uj1+ujuj1h(xa(j1)h),xa+(j1)h,a+jh Tedy tento operátor vezme síťovou funkci a vytvoří z ní po částech lineární spojitou funkci tak, že body pospojuje do lomené čáry. 𝑄ₕ 𝑢   𝑢

My budeme pro jednoduchost porovnávat jen pomocí operátoru restrikce. K tomu potřebujeme způsob, jak měřit síťové funkce.

Definice. Nechť pro každé h(0,1 je h norma na h. Tyto normy jsou konzistentní, pokud existuje norma 0 na 𝒞(a,b) taková, že pro všechna y𝒞(a,b) je limh0+𝒫hyh=y0

Zapíšeme obecně přesné řešení:

Ly=f,x(a,b),ly|x=a=γ1,ly|x=b=γ2

a řešení diferenční úlohy:

Lhu=f,xωh,lhu|0=γ1,lhu|m=γ2

Okrajové podmínky například pro x=a můžou mít tvar:

Dirichletova
ly|x=a=y(a),lhu|0=u0
Neumannova
ly|x=a=p(a)y(a),lhu|0=p0ux,0
Newtonova
ly|x=a=α1p(a)y(a)β1y(a),lhu|0=α1p0ux,0β1u0

Chyba aproximace diferenciálního operátoru

Definice (skalární součin síťových funkcí). Pro u,vh si zavedeme extrémně prokleté značení (u,v)hj=1m1hujvj,uh(u,u)h (u,v]j=1mhujvj,u(u,u] [u,v)j=0m1hujvj,u[u,u) [u,v](u,v)h+h2(u0v0+umvm),u[u,u] To, že u toho prvního je index h a u ostatních ne, naneštěstí není překlep.
Věta (bu bun seki-bun). Pro u,vh platí (ux,v)h=umvmu1v0(u,vx] (ux,v)h=um1vmu0v0[u,vx)
Věta (první Greenova formule). Nechť p,u,vh. Potom ((pux)x,v)h=(pux,vx]+pm(ux)mvmp1(ux)1v0
Věta (druhá Greenova formule). Nechť p,u,vh. Potom ((pux)x,v)h(u,(pvx)x)h=pm((ux)mvmum(vx)m)p1((ux)1v0u0(vx)1)
Poznámka. Budeme používat normy u0,hmaxj=0,,m|uj| a uh,u definované výše.
Lemma (první Sobolevova nerovnost). Definujme h*{u:ωh|u0=um=0} Potom pro všechna uh* platí u0,hba2ux
Lemma (druhá Sobolevova nerovnost). Definujme h*{u:ωh|u0=um=0} Potom pro všechna uh* platí uhba2ux
Poznámka. První Sobolevova nerovnost platí jen v dimenzi 1, ale ta druhá platí v každé dimenzi (což si dokážeme později).
Lemma (třetí Sobolevova nerovnost). Definujme h*{u:ωh|u0=um=0} Potom pro všechna uh* platí h24ux2uh2(ba)28ux2

Metoda energetických nerovností

Metoda energetických nerovností je způsob, jak určit stabilitu metody.

Vezměme naši oblíbenou úlohu:

(py)+qy=f,x(a,b),y(a)=γ1,y(b)=γ2

K ní máme diferenční schéma:

(pux)x+qu=f,xωh,u0=γ1,u1γ2

Odečteme zprojektovanou diferenciální rovnici od diferenční rovnice:

(pux)x+qu+𝒫h((py))𝒫h(qy)=0,xωh,u0=y(a),um=y(b)

Použijeme chybu diferenciálního operátoru:

ψ=Lh(𝒫hy)𝒫h(Ly)=(p(𝒫hy)x)x+𝒫h((py)),ψ0=ψm=0 (pux)x+(p(𝒫hy)x)x+q(u𝒫hy)+ψ=0 (p(u𝒫hy)x)x+q(u𝒫hy)=ψ

Označíme-li zu𝒫hy, dostaneme

(pzx)x+qz=ψ,z0=zm=0

Vynásobíme obě strany rovnice zprava z v součinu (,)h:

((pzx)x,z)h+(qz,z)h=(ψ,z)h

Použijeme bu bun seki-bun:

(pzx,zx]+(qz,z)h=(ψ,z)h

Tomu se říká energetická rovnost, protože ve fyzice ty členy často mají rozměr energie.

U pravé strany aplikujeme Schwarzovu nerovnost (ψ,z)hψhzh. Na levé straně u druhého členu použijeme předpoklad q0 o původní diferenciální úloze:

(qz,z)h=j=1m1hqjzj20

U prvního členu levé strany využijeme předpoklad p>c0+ o původní diferenciální úloze:

(pzx,zx]=j=1mhpj(zx)j2c0zx2

Dosazením těchto vyjádření do energetické rovnosti a použitím třetí Sobolevovy nerovnosti dostáváme

c0zx2ψhzhba8ψhzx

Vydělíme rovnici c0zx:

zxbac08konstanta stabilityψh

Z první Sobolevovy nerovnosti potom plyne

z0,hba2zx(ba)32c032Mψh

Použitím Laxovy věty dostáváme, že schéma je stabilní.

Metoda sítí pro další okrajové podmínky

Vezměme jednoduchou okrajovou úlohu s Newtonovou (alias Robinovou) podmínkou:

y=f,x(a,b),y(a)=β1y(a)+γ1,y(b)=β2y(b)+γ2

K ní si vyrobíme diferenční schéma:

uxx=f,xωh,(ux)0=β1u0+γ1,(ux)m=β2um+γ2

Vyrobíme si z toho soustavu lineárních rovnic:

u1u0hβ1u0=γ1u22u1+u0h2=f1um2um1+um2h2=fm1umum1hβ2um=γ1

Ta má opět tridiagonální tvar, takže ji můžeme řešit metodou faktorizace. Ještě si z nejasného důvodu vynásobíme první a poslední rovnici 2h a můžeme ji zapsat v maticovém tvaru 𝐀u=φ:

𝐀(2β1h+2h22h21h22h21h21h22h21h22h22β2h+2h2),φ(2γ1hf1fm12γ2h)

Uvažujme množinu síťových funkcí h se skalárním součinem [u,v]=j=1m1hujvjh2(u0v0+umvm). Jelikož nemáme čas, jenom si bez důkazu řekneme pár vět.

Metoda sítí pro eliptické parciální diferenciální rovnice

Nechť Ω(0,L1)×(0,L2),f:Ω,g:Ω. Uvažujme typovou úlohu

1(λ(x)1y)2(λ(x)2y)+q(x)y=f(x),xΩ,y|Ω=g

s řešením y:Ω,yy(x).

Budeme předpokládat f𝒞(Ω),g𝒞(Ω),λ,q𝒞(Ω),q0,λC0+. V Benešově světě samozřejmě může být funkce spojitá na množině, na které není definovaná.

Tentokrát už budeme potřebovat dvojrozměrnou síť:

ωh{[ih1,jh2]Ω|i=0,,m1,j0,,m2},h1=L1m1,h2=L2m2

Také si potřebujeme vytvořit dvourozměrné diferenční náhrady.

i(λ(x)iy)=(λyxi)xi+𝒪(hiα)

kde α=2 pro konstantní λ a α=1 pro nekonstantní λ.

Označíme-li yi,jy(ih1,jh2), potom

((λyx1)x1)i,j=1h1(λi+1,jyi+1,jyi,jh1λi,jyi,jyi1,jh1) ((λyx2)x2)i,j=1h2(λi,j+1yi,j+1yi,jh2λi,jyi,jyi,j1h2)

Teď už můžeme sepsat diferenční schéma:

(λyx1)x1(λyx2)x2+qu=f,xωh,u|γh=g|γh

Označíme-li hu(ux1,ux2) a hW(Wx1)1+(Wx2)2, můžeme to zapsat v hezčím tvaru:

h(λhu)+qu=f,xωh,u|γh=g|γh

Teď to zapíšeme po řádcích, čímž vznikne naprosto nádherná soustava rovnic:

(λi+1,j+λi,jh12+λi,j+1+λi,jh22+qi,j)Ei,jui,jλi,jh12Ai,jui1,jλi+1,jh12Ci,jui+1,jλi,jh12Bi,jui,j1λi,j+1h12Di,jui,j+1=fi,jFi,j

Abychom tuto soustavu mohli řešit, musíme si ji přeindexovat, aby místo indexů i,j byl jen jeden. To už tady nebudeme podrobněji rozebírat; některé počítačové řešiče to umí dělat automaticky. Na řešení je dobrá super-relaxační metoda, metoda konjugovaných gradientů nebo Jacobiho metoda. Také se dá vytvořit jakási analogie metody faktorizace, ale ta je prý dost pomalá.

Teď pojďme analyzovat stabilitu.

Pomocí těchto nerovností podobně jako u jednorozměrného případu dokážeme, že schéma je stabilní.

𝒫h((λ(x)y))+h(λhu)+q(𝒫hyu)=0,𝒫hy|γh=u|γh

Použijeme chybu aproximace:

ψ=𝒫h(Ly)Lh(𝒫hy)=𝒫h((λy))+h(λh(𝒫hy)) h(λh(𝒫hy))+h(λhu)+q(𝒫hyu)=ψ,(𝒫hyu)|γh=0

Označíme-li zP^yu, úlohu přepíšeme do tvaru

h(λhz)+qz=ψ,z|γh=0

To vynásobíme z, čímž získáme energetickou rovnost:

(h(λhz),z)h+(qz,z)h=(ψ,z)h

Aplikujeme Greenovu formuli:

(λhz,hz]+(qz,z)h=(ψ,z)h

Využijeme předpokladu, že xΩ:q(x)0,λ(x)c0>0, čímž odhadneme

(qz,z)h0 (λhz,hz]=(λzx1,zx1+(λzx2,zx2=j=1m21i=1m1h1h2λi,j|(zx1)i,j|2+i=1m11j=1m2h1h2λi,j|(zx2)i,j|2c0(hz,hz]=c0hz2

Z energetické rovnosti a druhé Sobolevovy nerovnosti plyne

c0hz2(ψ,z)hψhzhc2,2ψhhz hzc2,2c0ψh

Případně můžeme nějak podobně odvodit

zhc2,2hzc2,22c0ψh

Metoda sítí pro evoluční úlohy

Vezmeme si typovou úlohu:

ty=Dx,xy+f(t,x),x(0,T)×(a,b) y|x=a=γ1,y|x=b=γ2 y|t=0=yini(x)

Diskretizujeme si časoprostor:

ωh{a+jh|j=0,,m,hbam} ωh{a+jh|j=1,,m1,hbam} γhωhωh tkkτ,k=0,,NT,τTNT

Pro ω𝒞(0,T×a,b) si zavedeme značení

ωjkω(kτ,a+jh) ω[ω0k,,ωmk] ω^[ω0k+1,,ωmk+1]

Použijeme diferenční náhradu

x,xy|jk=(yxx)jk+𝒪(h2) ty|jk={(yt)jk+𝒪(τ)=yjk+1yjkτ+𝒪(τ)(yt)jk+𝒪(τ)=yjkyjk1τ+𝒪(τ)(yt˚)jk+𝒪(τ2)=yjk+12yjk12τ+𝒪(τ2)

Explicitní schéma

Použijeme dopřednou diferenci.

u^uτ=Duxx+f,u^0=γ1,u^m=γ2,u|j0=yini(a+jh)

Chyba aproximace je 𝒪(h2+τ).

Jelikož můžeme přímo napočítat u^=u+τDuxx+τf, toto schéma se snadno implementuje. Zapíšeme si ho bodově:

ujk+1=ujk+τDuj+1k2ujk+uj1kh2+τfjk u0k+1=γ1,umk+1=γ1 uj0=yini(a+jh)

Označíme si matičku, abychom to mohli jednoduše zapsat:

𝐀[12τDh2τdh20τdh20] uk+1=𝐀uk+τfk=𝐀(𝐀uk1+τfk1)+τfk=𝐀2uk1+τ𝐀fk1+τfk=𝐀3uk2+τ𝐀2fk2+τ𝐀fk1+τfk

Aby byla metoda stabilní, potřebujeme, aby vlastní čísla matice ležela v intervalu (1,1). Z našich úvah o úloze vlastních čísel plyne, že 𝐀 má takováto vlastní čísla:

λl14τDh2sin(πl2m)2

Chceme tedy, aby platilo

1<104τDh2sin(πl2m)2<1 4τDh2sin(πl2m)2<2 4τDh2<2

To je prý dost striktní požadavek, takže s takovouhle metodou to jde pomalu.

Implicitní schéma

Tentokrát použijeme zpětnou diferenci.

u^uτ=Du^xx+f^

Chyba aproximace je opět 𝒪(h2+τ). Ale tentokrát je u^ vyjáďřeno jen implicitně, takže pro jeho zjistění budeme muset řešit soustavu rovnic:

u^τDu^xx=u+τf^

Bodový zápis:

ujk+1τDuj+1k+12ujk+1+uj1k+1h2=ujk+τfjk1 u0k+1=γ1,umk+1=γ1 uj0=yini(a+jh)

Přepis do maticového tvaru:

𝐁[1+2τDh2τDh20τDh20] 𝐁uk+1=uk+τfk+1 Uk+1=𝐁1(uk+τfk+1)==(B1)k+1u0+

Opět chceme, aby spektrum 𝐁 bylo v intervalu (1,1). Tenotokrát si ale bez důkazu řekneme, že tam bude vždy.

Crautovo-Nicolsonové schéma

V podstatě je to aritmetický průměr předchozích dvou schémat.

u^uτ=u^xx+uxx2+f^+f2

Chyba aproximace je 𝒪(h2+τ2), což je lepší než u předchozích dvou (jelikož v Taylorovi se něco vzájemně požere).

Bodový zápis je extrémně krásný:

ujk+1+τDτh2(uj+1k+12ujk+1+uj1k+1)=ujk+Dτ2h2(uj+1k2ujk+uj1k)+τ2(fjk+1+fjk) u0k+1=γ1,umk+1=γ1 uj0=yini(a+jh)

Dokážeme pomocí metody energetických nerovností a spousty halucinogenů, že schéma je stabilní nepodmíněně.

ty(a+jh,(k+12τ))ujk+1ujkτ=Dx,xyjk+12D2((uxx)jk+1+(uxx)jk)+fjk+1212(fjk+1fjk) ψ=𝒫hk+12(tyDx,xy)yk+1ykτ+D2((yxx)k+1+(yxx)k)fk+12+12(fk+1+fk) yjk+1yjkτujk+1ujkτD2((yxx)jk+1+(yxx)jk)+D2((uxx)jk+1+(uxx)jk)=ψ y0k+1=u0k+1,ymk+1=umk+1,yj0=uj0

Označíme-li jako obvykle z𝒫hyu, docela se nám to vyhezčí:

zjk+1zjkτ(zt)jk+1D2((zxx)jk+1+(zxx)jk)=ψjk,z0k+1=0,zmk+1=0,zj0=0

Vynásobíme všechno zprava τ(zt)k+1:

τ((zt)k+1,(zt)k+1)hD2((zxx)k+1+(zxx)k,τ(zt)k+1)h=(ψk,τ(zt)k+1)h

Použijeme Greenovu větu:

τ(zt)k+1h2+D2((zx)k+1+(zx)k,(zx)k+1(zx)k](zx)k+12(zx)k2=τ(ψk,(zt)k+1)h

Podle Schwarzovy a Youngovy nerovnosti máme

τ(ψk,(zt)k+1)hτψkh(zt)k+1hτ2ψkh2+τ2(zt)k+1h2

Když to poskládáme dohromady, odečtením τ2(zt)k+1h2 od obou stran dostáváme

τ2(zt)k+1h2+D2(zx)k+12D2(zx)k2τ2ψkh2

Z levé strany nerovnosti jistě můžeme bez újmy na platnosti smazat první člen, jelikož je kladný, a vše vynásobit dvěma, čímž dostaneme

D(zx)k+12D(zx)k2+τψkh2

Iterováním této nerovnosti máme

D(zx)k+12D(zx)02+j=0kτψjh2𝒪(τ2+h2)τ,h00

Z toho plyne, že metoda je stabilní.

Metoda přímek

To úplně nesouvisí s předchozími třemi schématy, ale je to jiný způsob, jak řešit tu samou úlohu.

Diskretizujeme úlohu v (a,b), tedy čas necháme spojitý. Tím vznikne systém obyčejných diferenciálních rovnic, který pak řešíme vhodným řešičem.

x,xyyxx+𝒪(h2) u˙=Duxx+f(t),u0(t)=γ1,um(t)=γ2,uj(0)=yini(a+jh)

Řešení této úlohy bude nějaká síťová funkce u, která ale závisí na čase.

Bodově zapíšeme:

u˙j(t)=Dh2(uj+1(t)2uj(t)+uj1(t))+f(t,a+jh),u0(t)=γ1,um(t)=γ2,uj(0)=yini(a+jh)

To je soustava m1 obyčejných diferenciálních rovnic, kterou můžeme řešit Eulerovou nebo Runge-Kuttovou metodou.

Numerické řešení úloh s advekcí

Máme úlohu s advekčním členem A, který fyzikálně reprezentuje nějaké unášení:

ty+cxyA=Dx,xy+f(t,x) ycDxy=0,x=a,b y|t=0=yini

Takováto úloha se dá řešit metodou konečných objemů. Interval si rozsekáme na malé objemy Vk=(bk1,bk) (nemusí být stejné). Přes každý objem budeme integrovat:

ddtVky(t,x)dx+Vk(cxyDx,xy)(t,x)dxx(cyDxy)=j(t,bk)j(t,bk1)=Vkf(t,x)dx

Označíme-li si mkbkb[k1], můžeme aproximovat

Uk(t)1mkVky(t,x)dx Fk(t)1mkVkf(t,x)dx

Z toho máme rovnici

mkU˙k+j(t,bk)j(t,bk1)=mkFk

Označme si

xkbk1+bk2 Uk,+{Uk,c0Uk+1,c<0

Potom můžeme aproximovat toky:

j(t,bk)=Uk,+cDUk+1Ukxk+1xk

Tím dostáváme semi-diskrétní schéma:

mkU˙k+cUk1,+cUk,+=D(Uk+1Ukxk+1xkUkUk1xkxk1)+mkFk j(t,b0)=j(t,bm)=0,Uk(0)=1mkVkyini(x)dx

To můžeme řešit například Runge-Kuttovou metodou.

Také se dá řešit mřížkovou Boltzmannovou metodou (tu ke zkoušce nemusíme umět).

Zákony zachování

Máme například hmotnost:

m(t)=x1x2ρ(t,x)dx m˙(t)=j(t,x1)j(t,x2)+x1x2q(t,x)dx

kde j(t,x)=ρ(t,x)v(t,x), ale stejně netuším, co ta písmena mají znamenat.

m(t2)m(t1)=t1t2(j(t,x1)j(t,x2))dt+t1t2dtx1x2q(t,x)dx(integraˊlnıˊ tvar zaˊkonu zachovaˊnıˊ)

Pokud ρ,j,q jsou diferencovatelné, můžeme z toho vyvodit:

x1x2tρ(t,x)dx=m˙(t)=x1x2q(t,x)dxx1x2xj(t,x)dx tρ(t,x)+xj(t,x)=q(t,x)(diferenciaˊlnıˊ tvar zaˊkonu zachovaˊnıˊ)

Obecně máme-li vektorovou veličinu U:0+×m a její tok F:mm, můžeme formulovat zákony zachování v diferenciálním tvaru:

tU+xF(U)=0

Integrací podle t a x dostaneme integrální tvar:

x1x2(U(t2,x)U(t1,x))dx=t1t2(F(U(t,x1))F(U(t,x2)))dt
Příklad (Eulerovy rovnice pro dynamiku nevazké stlačitelné tekutiny).
Zákon zachování hmotnosti
tρ+x(ρv)=0
Zákon zachování hybnosti
t(ρv)+x(p+ρv2)=0
Zákon zachování energie
tE+x(v(p+E))=0
U=(ρρvE),F(U)=(ρvp+ρv2v(p+E))
Příklad (lineární advekční rovnice). tρ+axρ=0,ρ|t=0=ρ0(x) U=ρ,F(U)=aρ
Příklad (Burgersova rovnice). tu+uxu=0,u|t=0=u0(x) U=u,F(U)=u22

Riemannův problém je řešení zákonů zachování se skokovou počáteční podmínkou.

tU+xF(U)=0,U|t=0={UL,x<0UR,x>0

K řešení je nutné oslabení podmínek pro diferencovatelnost U.

Slabé řešení zákonů zachování: Vynásobíme rovnici funkcí φ:0+×m,φ𝒞0 a následně ji zintegrujeme podle t a x přes celý rozsah:

0dtdxφ(t,x)(tU(t,x)+xF(U(t,x)))=0

Roznásobíme, na první část použijeme bu bun seki-bun s integrálem podle t a na druhou část použijeme bu bun seki-bun s integrálem podle x:

dx[φU]00dtdxUtφ+0dt([φF(U)]dxF(U)xφ)=0

To 𝒞0 v definici φ nejspíš znamená, že její limita v nekonečnech je 0, takže to můžeme zjednodušit na

dxφ(0,x)U(0,x)=0dtdx(Utφ+F(U)xφ)

To je takzvaná slabá rovnost.

Definice. Funkce U je slabé řešení zákonu zachování, pokud pro všechna φ𝒞0(0+×) platí slabá rovnost.
Poznámka. Pokud vezmeme za φ funkci, která vypadá skoro jako χ×x1,x2, akorát je na krajích „uhlazená“, aby byla 𝒞, slabá rovnost je integrální tvar zákonu zachování.

Teď pojďme rovnici řešit. Pro jednoduchost vezměme m=1, tedy U=u. Je-li uL>uR, jde o rázovou vlnu. Označme suL+uR2. Potom rovnice má jediné řešení:

u(t,x)={uL,x<stuR,x>st

Je-li uL<uR, jde o zřeďovací vlnu. Potom existuje nekonečně mnoho řešení, která jsou ve tvaru

u(t,x)={uL,x<uLtneˇco, naprˇıˊklad λt,xuLt,uRtuR,x>uRt

Pojďme to řešit numericky. Označme si UjkU(kτ,jh). Budeme používat konzervativní zápis schémat:

Ujk+1=UjkΔth(Fnum(Ujpk,,Uj+qk)Fnum(Ujp1k,,Uj+q1k))

kde Fnum je numerický tok, který může aproximovat skutečný tok různými způsoby:

Laxovo-Fridrichsonovo schéma
Fnum(Uj,Uj+1)=h2Δt(UjUj+1)+12(F(Uj)+F(Uj+1))
Laxovo-Wendroffovo schéma v podobě prediktor-konektor
TBD
Mac-Cormackovo schéma
TBD

Všechna tato schémata mají stejnou podmínku stability, kde ρ značí spektrální poloměr:

Δth1ρ(F(u))