28.10.2014 Views

15. Metoda končnih elementov in reševanje BDE in PDE v Matlabu

15. Metoda končnih elementov in reševanje BDE in PDE v Matlabu

15. Metoda končnih elementov in reševanje BDE in PDE v Matlabu

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

11.6 <strong>Metoda</strong> končnih <strong>elementov</strong><br />

Obravnavali bomo <strong>PDE</strong> oblike<br />

(<br />

∂<br />

p(x, y) ∂u )<br />

+ ∂<br />

∂x ∂x ∂y<br />

(<br />

q(x, y) ∂u )<br />

+ r(x, y)u(x, y) = f(x, y),<br />

∂y<br />

kjer je (x, y) ∈ Ω <strong>in</strong> je Ω območje v ravn<strong>in</strong>i z robom S. Rob naj bo razdeljen na dva<br />

dela, S 1 <strong>in</strong> S 2 . Na delu S 1 imamo robni pogoj oblike u(x, y) = g(x, y), na delu S 2 pa<br />

mora rešitev zadoščati<br />

p(x, y) ∂u<br />

∂x (x, y) cos ϕ 1 + q(x, y) ∂u<br />

∂x (x, y) cos ϕ 2 + g 1 (x, y)u(x, y) = g 2 (x, y),<br />

kjer sta ϕ 1 <strong>in</strong> ϕ 2 kota zunanje normale v točki (x, y) ∈ S.<br />

S<br />

ϕ 2<br />

ϕ 1<br />

Bor Plestenjak - Numerična analiza 2005/06


M<strong>in</strong>imiziranje funkcionala<br />

Denimo, da sta p, q enkrat zvezno odvedljivi, da sta r, d zvezni na Ω <strong>in</strong> da velja<br />

p(x, y) > 0, q(x, y) > 0, r(x, y) ≤ 0 <strong>in</strong> g 1 (x, y) > 0. Potem rešitev podane <strong>PDE</strong><br />

m<strong>in</strong>izira funkcional<br />

∫∫ [ ( )<br />

1<br />

∂w 2 ( ) ∂w 2<br />

]<br />

I(w) = p(x, y) + q(x, y) − r(x, y)ω 2 dxdy<br />

2<br />

∂x<br />

∂x<br />

∫∫<br />

+<br />

Ω<br />

Ω<br />

f(x, y)wdxdy +<br />

[−g 2 (x, y)w +<br />

∫S 1 ]<br />

2<br />

2 g 1(x, y)w 2 dS<br />

po vseh funkcijah w, ki so dvakrat zvezno odvedljive <strong>in</strong> zadoščajo robnemu pogoju na S 1 .<br />

Pri metodi končnih <strong>elementov</strong> iščemo aproksimacijo za rešitev tako, da m<strong>in</strong>imiziramo<br />

funkcional I po končno dimenzionalnem razredu funkcij, podobno kot Rayleigh-Ritzova<br />

metoda za robne probleme.<br />

Bor Plestenjak - Numerična analiza 2005/06


Triangulacija<br />

Prvi korak v metodi končnih <strong>elementov</strong> je razdelitev območja na končno število manjših<br />

odsekov oz. <strong>elementov</strong> pravilnih oblik. Tu se uporabljajo bodisi trikotniki ali pa pravokotniki.<br />

y<br />

S<br />

x<br />

Denimo, da smo razdelili območje s trikotnimi elementi v regularno mrežo, kar pomeni, da<br />

se dva trikotnika lahko dotikata le v eni točki, vzdolž celotne stranice ali pa nikjer.<br />

Bor Plestenjak - Numerična analiza 2005/06


Aproksimacija<br />

Razred funkcij s katerimi aproksimiramo rešitev, je množica odsekoma pol<strong>in</strong>omskih funkcij<br />

omejene stopnje v x <strong>in</strong> y. Pol<strong>in</strong>omi iz različnih <strong>elementov</strong> morajo biti združeni tako, da bo<br />

zlepek zvezen <strong>in</strong> da bosta njegov prvi <strong>in</strong> drugi odvod <strong>in</strong>tegrabilna ali zvezna na celotnem<br />

območju. V primeru trikotnih <strong>elementov</strong> se ponavadi uporabljajo l<strong>in</strong>earni pol<strong>in</strong>omi oblike<br />

za pravokotnike pa bil<strong>in</strong>earni pol<strong>in</strong>omi<br />

φ(x, y) = a + bx + cy,<br />

φ(x, y) = a + bx + cy + dxy.<br />

Denimo, da smo razdelili območje s trikotno regularno mrežo. Potem iščemo aproksimacijo<br />

oblike<br />

m∑<br />

φ(x, y) = γ i φ i (x, y),<br />

i=1<br />

kjer so φ 1 , φ 2 , . . . , φ m l<strong>in</strong>earno neodvisni kosoma l<strong>in</strong>earni pol<strong>in</strong>omi. Nekatere izmed<br />

konstant γ 1 , . . . , γ m (denimo γ n+1 , . . . , γ m ) so že določene z robnimi pogoji, preostale<br />

parametre γ 1 , . . . , γ n pa porabimo za to, da m<strong>in</strong>imiziramo funkcional I.<br />

Bor Plestenjak - Numerična analiza 2005/06


Bazne funkcije<br />

Točke v triangulacijski mreži označimo z v 1 do v m . Za bazne funkcije vzamemo kosoma<br />

l<strong>in</strong>earne pol<strong>in</strong>ome φ 1 , . . . , φ m . Vsak φ i je zlepek l<strong>in</strong>earnih pol<strong>in</strong>omov, ki ima v točki v i<br />

vrednost 1, v vseh drugih točkah mreže pa ima vrednost 0.<br />

Če mrežo sestavljajo trikotniki T 1 , . . . , T k , potem ima φ i na vsakem T j obliko<br />

φ i (x, y) = φ ij (x, y) = a ij + b ij x + c ij y.<br />

Torej je φ i neničelen le na tistih trikotnikih T i , ki imajo v i za oglišče.<br />

1<br />

v i<br />

Bor Plestenjak - Numerična analiza 2005/06


Bazne funkcije<br />

Denimo, da je trikotnik T k sestavljen iz točk v 1 , v 2 <strong>in</strong> v 3 . Iščemo koeficiente pol<strong>in</strong>oma<br />

φ 1k (x, y) = a 1k + b 1k x + c 1k y,<br />

za katerega naj velja φ 1k (v 1 ) = 1 <strong>in</strong> φ 1k (v 2 ) = φ 1k (v 3 ) = 0. Dobimo jih iz l<strong>in</strong>earnega<br />

sistema<br />

⎡<br />

⎤ ⎡ ⎤ ⎡ ⎤<br />

1 x 1 y 1 a 1k 1<br />

⎣ 1 x 2 y 2<br />

⎦ ⎣ b 1k<br />

⎦ = ⎣ 0 ⎦ .<br />

1 x 3 y 3 c 1k 0<br />

Bor Plestenjak - Numerična analiza 2005/06


Ko v funkcional I vstavimo φ(x, y) =<br />

=<br />

Aproksimacija<br />

m∑<br />

γ i φ i (x, y), dobimo<br />

i=1<br />

I(φ) = I<br />

[<br />

∑ m<br />

]<br />

γ i φ i<br />

i=1<br />

⎛ ⎧<br />

∫∫<br />

⎝ 1 [<br />

⎨<br />

m<br />

] 2 [<br />

Ω 2 ⎩ p(x, y) ∑<br />

m<br />

] 2<br />

∂φ i<br />

γ i<br />

∂x (x, y) ∑ ∂φ i<br />

+ q(x, y) γ i<br />

∂y (x, y) i=1<br />

i=1<br />

[ m<br />

] ⎫ 2<br />

⎞<br />

∑<br />

⎬ m<br />

−r(x, y) γ i φ i (x, y)<br />

⎭ + f(x, y) ∑<br />

γ i φ i (x, y) ⎠ dydx<br />

i=1<br />

⎧<br />

∫ ⎨<br />

+<br />

S 2<br />

⎩ −g 2(x, y)<br />

i=1<br />

m∑<br />

γ i φ i (x, y) + 1 [ ⎫<br />

m 2<br />

2 g ∑<br />

⎬<br />

1(x, y) γ i φ i (x, y)]<br />

⎭ dS.<br />

i=1<br />

M<strong>in</strong>imum bo dosežen, ko bodo vsi parcialni odvodi I(φ) po γ 1 , . . . , γ n enaki 0.<br />

i=1<br />

Bor Plestenjak - Numerična analiza 2005/06


L<strong>in</strong>earni sistem<br />

Iz enačb ∂I<br />

∂γ k<br />

(φ) = 0 za k = 1, . . . , n dobimo l<strong>in</strong>earni sistem<br />

kjer je<br />

za elemente A = [α ij ] <strong>in</strong> b = [β i ] pa velja<br />

α ij =<br />

∫∫<br />

Ω<br />

Ac = b,<br />

c = [γ 1 · · · γ n ] T ,<br />

[<br />

p(x, y) ∂φ i<br />

∂x (x, y)∂φ j<br />

∂x (x, y) + q(x, y)∂φ i<br />

∂y (x, y)∂φ j<br />

∂y<br />

(x, y)<br />

] ∫<br />

−r(x, y)φ i (x, y)φ j (x, y) dxdy + g 1 (x, y)φ i (x, y)φ j (x, y)dS<br />

S 2<br />

za i, j = 1, . . . , n <strong>in</strong><br />

∫∫<br />

β i = −<br />

Ω<br />

f(x, y)φ i (x, y)dxdy +<br />

∫<br />

S 2<br />

g 2 (x, y)φ i (x, y)dS −<br />

m∑<br />

k=n+1<br />

α ik γ k .<br />

Bor Plestenjak - Numerična analiza 2005/06


Poenostavitev<br />

Integrale je potrebno računati le po tistih trikotnikih, kjer so bazne funkcije neničelne. To<br />

pa pomeni, da so v matriki A neničelni le tisti elementi α ij za katere velja, da točki v i <strong>in</strong><br />

v j ležita v istem trikotniku T k . Če je i ≠ j, se potem npr. izračun<br />

I =<br />

∫∫<br />

Ω<br />

p(x, y) ∂φ i<br />

∂x (x, y)∂φ j<br />

(x, y)dxdy<br />

∂x<br />

spremeni v<br />

I =<br />

∫∫<br />

T k<br />

p(x, y)b ik b jk dxdy,<br />

v primeru i = j pa dobimo<br />

I =<br />

∑ ∫∫<br />

k, v i ∈T k<br />

T k<br />

p(x, y)b 2 ik dxdy.<br />

Bor Plestenjak - Numerična analiza 2005/06


11.7 Reševanje robnih problemov <strong>in</strong> <strong>PDE</strong> v <strong>Matlabu</strong><br />

V <strong>Matlabu</strong> imamo naslednja orodja za reševanje robnih problemov <strong>in</strong> parcialnih diferencialnih<br />

enačb:<br />

• za robne probleme imamo metodo bvp4c, ki uporablja kolokacijsko metodo,<br />

• za eliptične <strong>PDE</strong> imamo nekaj funkcij, ki nam olajšajo uporabo metode končnih diferenc,<br />

• za parabolično-eliptične <strong>PDE</strong> imamo metodo pdepe, ki uporablja <strong>in</strong>tegracijo po časovnih<br />

nivojih,<br />

• za splošne <strong>PDE</strong> imamo dodaten paket Partial Differential Equation Toolbox, ki uporablja<br />

metodo končnih <strong>elementov</strong> <strong>in</strong> kjer imamo med drugim grafično orodje pdetool.<br />

Bor Plestenjak - Numerična analiza 2005/06


11.7.1 Reševanje robnih problemov z bvp4c<br />

Rešujemo robne probleme, ki jih zapišemo v obliki<br />

d<br />

y(x) = f(x, y(x), p), g(y(a), y(b), p) = 0.<br />

dx<br />

Tu je y(x) vektor, f je podana funkcija x <strong>in</strong> y, ki opisuje diferencialno enačbo. Vektor p je<br />

neobvezen <strong>in</strong> opisuje neznane parametre, ki jih iščemo. Rešitev iščemo na <strong>in</strong>tervalu [a, b],<br />

s funkcijo g pa podamo robne pogoje. <strong>Metoda</strong> bvp4c potrebuje tudi začetni približek za<br />

rešitev y(x).<br />

Oblika za klic bvp4c je sol=bvp4c(@odefun,@bcfun,sol<strong>in</strong>it,options), pri čemer:<br />

• funkcija odefun poda diferencialno enačbo, oblika je yodv = odefun(x,y);<br />

• funkcija bcfun poda robne pogoje (vrne ostanek, ki mora biti pri izpolnjenih pogojih 0),<br />

oblika je res = bcfun(ya,yb);<br />

• sol<strong>in</strong>it je struktura, s katero podamo začetni približek, strukturo zgradimo s pomožno<br />

funkcijo bvp<strong>in</strong>it kot sol<strong>in</strong>it = bvp<strong>in</strong>it(l<strong>in</strong>space(a,b,n),@<strong>in</strong>itf), kjer je <strong>in</strong>itf<br />

funkcija oblike y = <strong>in</strong>itf(x), s katero podamo robne pogoje;<br />

• options je neobvezen argument, kjer lahko nastavimo delovanje metode, za nastavitve<br />

uporabimo metodo bvpset.<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 1 za bvp4c<br />

Presek oblike kapljice vode na ravni podlagi je podan z rešitvijo robnega problema<br />

u ′′ (x) + (1 − u(x))(1 + u ′ (x) 2 ) 3/2 = 0, u(−1) = 0, u(1) = 0.<br />

Za uporabo bvp4c to spremenimo v sistem enačb prvega reda:<br />

y ′ 1 (x) = y 2(x),<br />

y ′ 2 (x) = (y 1(x) − 1)(1 + y 2 (x) 2 ) 3/2 ,<br />

Za začetni približek vzamemo y 1 (x) = √ 1 − x 2 <strong>in</strong> y 2 (x) = −x/(0.1 + √ 1 − x 2 ). Zapišemo<br />

function yodv = kaplja(x,y)<br />

yodv = [ y(2); (y(1)-1)*((1+y(2)^2)^(3/2)) ];<br />

function res = kapljarp(ya,yb)<br />

res = [ ya(1); yb(1) ];<br />

function y = kaplja<strong>in</strong>it(x)<br />

y = [ sqrt(1-x^2); -x/(0.1+sqrt(1+x^2)) ];<br />

res<strong>in</strong>it = bvp<strong>in</strong>it(l<strong>in</strong>space(-1,1,20), @kaplja<strong>in</strong>it);<br />

res = bvp4c(@kaplja, @kapljarp, res<strong>in</strong>it);<br />

plot(res.x, res.y(1,:))<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 2 za bvp4c<br />

Iščemo lastno vrednost λ, pri kateri ima robni problem<br />

y ′′ (x) + (λ − 10 cos(2x))y(x) = 0, y ′ (π) = 0, y ′ (0) = 0<br />

neničelno rešitev. Ker lahko vsako tako rešitev pomnožimo s poljubnim skalarjem, dodamo še tretji pogoj,<br />

npr. y(0) = 1. Podobno kot v prejšnjem primeru to spremenimo v sistem enačb prvega reda:<br />

y ′ 1 (x) = y 2(x),<br />

y ′ 2 (x) = (10 cos(2x) − λ)y 1(x).<br />

Za začetni približek vzamemo y(x) = cos(4x) <strong>in</strong> λ = <strong>15.</strong> Zapišemo<br />

function yodv = mth(x,y,lambda)<br />

yodv = [ y(2); (10*cos(2*x)- lambda)*y(1) ];<br />

function res = mthrp(ya,yb,lambda)<br />

res = [ ya(2); yb(2); ya(1)-1 ];<br />

function y = mth<strong>in</strong>it(x)<br />

y = [ cos(4*x); -4*s<strong>in</strong>(4*x) ];<br />

res<strong>in</strong>it = bvp<strong>in</strong>it(l<strong>in</strong>space(0,pi,10), @mth<strong>in</strong>it, 15);<br />

res = bvp4c(@mth, @mthrp, res<strong>in</strong>it);<br />

fpr<strong>in</strong>tf(’Lastna vrednost je %7.3f.\n’, res.parameters)<br />

plot(res.x, res.y(1,:))<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 3 za bvp4c<br />

Naslednje enačbe opisujejo pretok v dolgem navpičnem kanalu, kjer je tekoč<strong>in</strong>a vbrizgana skozi eno izmed<br />

stranic:<br />

f ′′′ [<br />

− R (f ′ ) 2 − ff ′′] + RA = 0,<br />

h ′′ + Rfh ′ + 1 = 0,<br />

θ ′′ + P fθ ′ = 0,<br />

pri čemer je R Raynoldsovo število <strong>in</strong> P = 0.7R. Ker parameter A spada med neznanke, imamo 8 robnih<br />

pogojev:<br />

f(0) = f ′ (0) = 0, f(1) = 1, f ′ (1) = 0,<br />

h(0) = h(1) = 0,<br />

θ(0) = 0, θ(1) = 1.<br />

Problem bi radi rešili pri R = 10000, vendar nimamo nobenih dobrih začetnih približkov. Zato uporabimo<br />

metodo zveznega nadaljevanja.<br />

približek za R = 1000, tega pa za R = 10000.<br />

Najprej problem rešimo za R = 100, potem to uporabimo kot začetni<br />

Bor Plestenjak - Numerična analiza 2005/06


function demopretok<br />

Matlab implementacija za zgled 3<br />

R = 100; res<strong>in</strong>it = bvp<strong>in</strong>it(l<strong>in</strong>space(0,1,10), ones(7,1), 1);<br />

res1 = bvp4c(@pretok, @pretokbc, res<strong>in</strong>it);<br />

fpr<strong>in</strong>tf(’Parameter A pri R=100 : %7.4f\n’,res1.parameters)<br />

R = 1000; res2 = bvp4c(@pretok, @pretokbc, res1);<br />

fpr<strong>in</strong>tf(’Parameter A pri R=1000 : %7.4f\n’,res2.parameters)<br />

R = 10000; res3 = bvp4c(@pretok, @pretokbc, res2);<br />

fpr<strong>in</strong>tf(’Parameter A pri R=10000 : %7.4f\n’,res3.parameters)<br />

plot(res1.x, res1.y(2,:), res2.x, res2.y(2,:), res3.x, res3.y(2,:));<br />

end<br />

function yodv = pretok(x,y,A)<br />

P = 0.7*R;<br />

yodv = [ y(2); y(3); R*(y(2)^2 - y(1)*y(3) - A);<br />

y(5); -R*y(1)*y(5) - 1; y(7); -P*y(1)*y(7) ];<br />

end<br />

function res = pretokbc(ya,yb,A)<br />

res = [ya(1); ya(2); yb(1) - 1; yb(2); ya(4); yb(4); ya(6); yb(6) - 1];<br />

end<br />

Bor Plestenjak - Numerična analiza 2005/06


11.7.2 Reševanje <strong>PDE</strong> z pdepe<br />

Rešujemo robne probleme, ki jih lahko zapišemo v obliki<br />

c(x, t, u, u x )u t = x −m ∂<br />

∂x (xm f(x, t, u, u x )) + s(x, t, u, u x ),<br />

kjer je u funkcija spremenjivk x <strong>in</strong> t. Za m velja, da mora biti enak 0, 1 ali 2. Rešitev<br />

iščemo za a ≤ x ≤ b <strong>in</strong> t 0 ≤ t ≤ t f . Začetni pogoj je x(x, t 0 ) = u 0 (x), robna pogoja<br />

pri x = a oz. x = b v trenutku t pa sta<br />

p(x, t, u) + q(x, t)f(x, t, u, u x ) = 0.<br />

Oblika za klic je sol=pdepe(m,pdefun,icfun,bcfun,xmesh,tspan), pri čemer:<br />

• m je ekponent pri x −m , ki mora biti 0,1, ali 2;<br />

• funkcija pdefun poda diferencialno enačbo, oblika je [c,f,s] = pdefun(x,t,u,ux);<br />

• funkcija icfun poda začetni pogoj, oblika je res = icfun(x);<br />

• funkcija bcfun poda robne pogoje, oblika je [pa,qa,pb,qb] = bcfun(xa,ua,xb,ub,t),<br />

kjer so pa,qa,pb,qb po vrsti vrednosti p <strong>in</strong> q iz robnega pogoja pri x = a oz. x = b;<br />

• xmesh je podana mreža za x, velja xmesh(1)=a, . . ., xmesh(end)=b;<br />

• tmesh je podana mreža za t, velja tmesh(1)=t 0 , . . ., tmesh(end)=t f .<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 1 za pdepe<br />

Rešujemo parabolični problem u t = u xx na območju x ∈ [0, 1], t ≥ 0, robna pogoja sta<br />

u(0, t) = 0, u(1, t) = 1, začetni pogoj pa u(x, 0) = 2x/(1 + x 2 ).<br />

To lahko prevedemo na obliko<br />

c(x, t, u, u x )u t = x −m ∂<br />

∂x (xm f(x, t, u, u x )) + s(x, t, u, u x ),<br />

če vzamemo m = 0, c(x, t, u, u x ) = 1, f(x, t, u, u x ) = u x <strong>in</strong> s(x, t, u, u x ) = 0.<br />

Tudi robne pogoje lahko podamo v obliki<br />

p(x, t, u) + q(x, t)f(x, t, u, u x ) = 0,<br />

če vzamemo p a (x, t, u) = u, q a (x, t) = 0, p b (x, t, u) = u − 1, q b (x, t) = 0.<br />

Bor Plestenjak - Numerična analiza 2005/06


Matlab implementacija za zgled 1<br />

function [c,f,s] = wavepde(x,t,u,ux)<br />

c = 1;<br />

f = ux;<br />

s = 0;<br />

function [pa,qa,pb,qb] = wavebc(xl,ul,xr,ur,t)<br />

pa = ul;<br />

qa = 0;<br />

pb = ur-1;<br />

qb = 0;<br />

function y = wave<strong>in</strong>i(x)<br />

y = 2*x/(1+x^2);<br />

m = 0;<br />

x = l<strong>in</strong>space(0,1,20);<br />

t = l<strong>in</strong>space(0,2,10);<br />

u = pdepe(m,@wavepde,@wave<strong>in</strong>i,@wavebc,x,t);<br />

surf(x,t,u);<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 2 za pdepe<br />

Rešujemo sistem dveh enačb<br />

na območju x ∈ [0, 1], t ∈ [0, 0.2], robni pogoji so<br />

u t = 1 2 u xx + 1<br />

1 + v 2, v t = 1 2 v xx + 1<br />

1 + u 2<br />

u x (0, t) = u x (1, t) = v x (0, t) = v x (1, t) = 0,<br />

začetna pogoja pa<br />

u(x, 0) = 1 + 1 2 cos(2πx),<br />

v(x, 0) = 1 − 1 2 cos(2πx).<br />

To zapišemo v obliki c(x, t, u, u x )u t = x −m ∂<br />

∂x (xm f(x, t, u, u x )) + s(x, t, u, u x ) z<br />

m = 0, c(x, t, u, u x ) =<br />

[ ] 1<br />

, f(x, t, u, u<br />

1 x ) = 1 2 u x, s(x, t, u, u x ) =<br />

[ 1/(1 + u<br />

2<br />

]<br />

2 )<br />

1/(1 + u 2 1 ) .<br />

Robne pogoje podamo v obliki p(x, t, u) + q(x, t)f(x, t, u, u x ) = 0 z<br />

[ ] 0<br />

p a (x, t, u) = p b (x, t, u) = , q<br />

0 a (x, t, u) = q b (x, t, u) =<br />

[ ] 1<br />

.<br />

1<br />

Bor Plestenjak - Numerična analiza 2005/06


Matlab implementacija za zgled 2<br />

function [c,f,s] = sisde(x,t,u,ux)<br />

c = [ 1; 1 ];<br />

f = ux/2;<br />

s = [ 1/(1+u(2)^2); 1/(1+u(1)^2) ];<br />

function [pa,qa,pb,qb] = sisbc(xl,ul,xr,ur,t)<br />

pa = [0; 0];<br />

qa = [1; 1];<br />

pb = [0; 0];<br />

qb = [1; 1];<br />

function y = sis<strong>in</strong>i(x)<br />

y = [ 1+0.5*cos(2*pi*x); 1-0.5*cos(2*pi*x)];<br />

m = 0;<br />

x = l<strong>in</strong>space(0,1,20);<br />

t = l<strong>in</strong>space(0,0.2,10);<br />

u = pdepe(m,@sispde,@sis<strong>in</strong>i,@sisbc,x,t);<br />

u1 = u(:,:,1); u2 = u(:,:,2);<br />

sublot(221); surf(x,t,u1);<br />

sublot(222); surf(x,t,u2);<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 3 za pdepe<br />

Rešujemo Fischerjevo enačbo<br />

na območju x ∈ R, t ≥ 0, robni pogoji so<br />

u t = u xx + u(1 − u)<br />

lim u(x, t) = 1, lim<br />

x→−∞<br />

u(x, t) = 0.<br />

x→∞<br />

Mi vzamemo x ∈ [−50, 50] <strong>in</strong> na robu u x (±50, t) = 0.<br />

Za začetni pogoj vzamemo<br />

u(x, 0) =<br />

{ 14<br />

cos 2 ( πx<br />

10<br />

), |x| ≤ 5,<br />

0, |x| > 5.<br />

To zapišemo v obliki c(x, t, u, u x )u t = x −m ∂<br />

∂x (xm f(x, t, u, u x )) + s(x, t, u, u x ) z<br />

m = 0, c(x, t, u, u x ) = 1, f(x, t, u, u x ) = u x , s(x, t, u, u x ) = u(1 − u).<br />

Robne pogoje podamo v obliki p(x, t, u) + q(x, t)f(x, t, u, u x ) = 0 z<br />

p a (x, t, u) = p b (x, t, u) = 0, q a (x, t, u) = q b (x, t, u) = 1.<br />

Bor Plestenjak - Numerična analiza 2005/06


Matlab implementacija za zgled 3<br />

function [c,f,s] = fisherde(x,t,u,ux)<br />

c = 1;<br />

f = ux;<br />

s = u*(1-u);<br />

function [pa,qa,pb,qb] = fischerbc(xl,ul,xr,ur,t)<br />

pa = 0;<br />

qa = 1;<br />

pb = 0;<br />

qb = 1;<br />

function y = fischer<strong>in</strong>i(x)<br />

y = 0.25*(cos(0.1*pi*x).^2).*(abs(x)


11.7.3 Uporabni ukazi za eliptične <strong>PDE</strong> <strong>in</strong> metodo končnih diferenc<br />

Nekaj uporabnih ukazov:<br />

• del2(U) izračuna diskretni Laplaceov operator na matriki U,<br />

• delsg(G) vrne matriko diskretnega Laplaceovega operatorja za območje, podano z<br />

<strong>in</strong>deksi <strong>elementov</strong> G,<br />

• numgrid(obl,n) vrne matriko <strong>in</strong>deksov točk v mreži. Število točk je n, možnosti za<br />

obliko območja so med drugim: ’S’: cel kvadrat, ’L’: oblika črke L, 3/4 celotnega<br />

kvadrata; ’C’ - podobno kot prej, le da ima v 4-tem kvadrantu četrt kroga; ’D’ -<br />

enotski krog; ’A’ - kolobar; ’H’ - kardioida, . . ..<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 1 za eliptične <strong>PDE</strong> <strong>in</strong> metodo končnih diferenc<br />

Rešujemo Poissonovo <strong>PDE</strong> ∆u = 2 na območju oblike črke L: D = [−1, 1] × [−1, 1] brez 3. kvadranta,<br />

z robnimi pogoji u(x, y) = 0 na ∂D.<br />

Rešitev bomo predstavili z matriko 41 × 81, v kateri bodo točke z razmikom h = 1/40.<br />

% 1. Sestavimo mrežo, G je matrika <strong>in</strong>deksov točk iz mreže<br />

m = 40; h = 1/m; G = numgrid(’L’,2*m+1);<br />

% 2. Izračunamo matriko A diskretnega Laplaceovega operatorja<br />

A = -delsq(G); N = sum(A(:)>0)<br />

% 3. Sestavimo vektor desne strani, ki ima vse elemente enake 2<br />

b = 2*ones(N)*h^2;<br />

% 4. Rešimo sistem <strong>in</strong> iz vektorja napolnimo elemente mreže<br />

u=A\b; U = A; U(G>0) = full(u(G(G>0)));<br />

% 5. Rešitev lahko narišemo<br />

mesh(U)<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 2 za eliptične <strong>PDE</strong> <strong>in</strong> metodo končnih diferenc<br />

Rešujemo Laplaceovo <strong>PDE</strong> ∆u = 0 na območju oblike črke L: D = [−1, 1] × [−1, 1] brez 3. kvadranta,<br />

kjer ima u na robu zgoraj <strong>in</strong> desno vrednosti 10, sicer pa 0.<br />

Rešitev bomo predstavili z matriko 101 × 101, v kateri bodo točke z razmikom h = 1/50.<br />

% 1. Sestavimo mrežo, G je matrika <strong>in</strong>deksov točk iz mreže<br />

m = 50; h = 1/m; G = numgrid(’L’,2*m+1);<br />

% 2. Izračunamo matriko A diskretnega Laplaceovega operatorja<br />

A = -delsq(G); N = sum(A(:)>0)<br />

% 3. Sestavimo vektor desne strani. Ustrezna <strong>in</strong>dekse preberemo iz matrike G<br />

b = zeros(N,1);<br />

b(G(2,2:end-1)) = 10;<br />

b(G(2:end-1,end-1)) = b(G(2:end-1,end-1)) + 10;<br />

% 4. Rešimo sistem <strong>in</strong> iz vektorja napolnimo elemente mreže<br />

u=A\b; U = G; U(G>0) = full(u(G(G>0)));<br />

% 5. Rešitev lahko narišemo<br />

mesh(U)<br />

Bor Plestenjak - Numerična analiza 2005/06


Zgled 3 za eliptične <strong>PDE</strong> <strong>in</strong> metodo končnih diferenc<br />

Za membrano oblike črke L: D = [−1, 1] × [−1, 1] brez 3. kvadranta, kjer so vrednosti na robu fiksne <strong>in</strong><br />

enake 0, iščemo prve tri lastne frekvence <strong>in</strong> lastne funkcije. Približke dobimo iz lastnih vrednosti <strong>in</strong> lastnih<br />

vektorjev diskretnega Laplaceovega operatorja. Problem, ki ga rešujemo, je ∆u = λu, u| ∂D = 0.<br />

m = 150; h = 1/m;<br />

A = delsq(numgrid(’L’,2*m+1))/h^2;<br />

lambda = eigs(A,5,0)<br />

Dobimo [9.64225 <strong>15.</strong>19669 19.73849 29.51944 31.91689].<br />

Prave vrednosti so [9.63972 <strong>15.</strong>19725 19.73921 29.52148 31.91264].<br />

Kljub temu, da delamo z matriko velikosti 66901 × 66901, so približki točni le na dve decimalki. Ker je<br />

matrika razpršena, lahko s posebnimi algoritmi za razpršene metode vseeno hitro izračunamo lastne pare.<br />

Bor Plestenjak - Numerična analiza 2005/06


11.7.4 Paket <strong>PDE</strong> Toolbox<br />

S pomočjo dodatnega paketa <strong>PDE</strong> Toolbox lahko z metodo končnih <strong>elementov</strong> rešujemo<br />

<strong>PDE</strong> različnih tipov na spošnih območjih. Območja lahko celo grafično skonstruiramo.<br />

Orodje poženemo z ukazom pdetool.<br />

Delo z orodjem pdetool lahko razdelimo v naslednje korake:<br />

1. Določitev območja Ω. Območje sestavimo z unijo ali komplementi območij pravokotne,<br />

eliptične ali poligonske oblike.<br />

2. Določitev robnih pogojev. Za vsak kos roba lahko določimo, ali imamo tam Dirichletov<br />

ali Neumannov robni pogoj <strong>in</strong> določimo vrednosti parametrov.<br />

3. Določimo tip <strong>PDE</strong>. Izbiramo lahko med eliptičnimi, paraboličnimi, hiperboličnimi <strong>PDE</strong><br />

<strong>in</strong> med iskanjem lastnih vrednosti za eliptični operator (frekvence nihanja membrane z<br />

izbrano obliko).<br />

4. Trianguliramo območje, pri čemer lahko izberemo kvaliteto triangulacije.<br />

5. Rešimo problem <strong>in</strong> grafično predstavimo rešitev.<br />

Prednost metode končnih <strong>elementov</strong> pred metodo končnih diferenc je v tem, da jo je lažje<br />

uporabljati za območja nepravilnih oblik saj ni potrebno preračunavati robnih pogojev.<br />

Bor Plestenjak - Numerična analiza 2005/06

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!