32
Numerikus Matematika a gyakorlatban Dr. Vertse Tam´ as Jegyzet Szeptember 12. ovetelm´ enyek: jelenl´ et aj´anlott, saj´at TIGRIS account kell, ´ erdemjegyet a programra kapnak Bevezet´ es a VMS-be : file szerkezet, DEL, PU utasit´ asok. Bevezet´ es a FORTRAN nyelvbe FOR LINK COP.COM F.COM szeptemeber 19 JEGYZET.txt uggv´ enyk¨ ozelit´ esek, inter- ´ es extrapol´ aci´o Lagrangeinterpol´aci´o LAG.FOR Splineinterpol´aci´o @COP TRIDAG.FOR @COP TRIDAG.DAT ED TRIDAG.RES TRIDAG.FOR VSW.FOR Febru´ar15. Az ED editor haszn´alata Egyszer˝ u Fortran program bemutat´ asa: LAG.FOR LAG.COM ASS DEASS LAGRANGE.FOR Febru´ar22. A Lagrange interpol´aci´oval nem kapunk becsl´ estazinterpol´aci´ohib´aj´ ara. Ebben seg´ ıt a Nevill f´ ele algoritmus. SUBROUTINE POLINT(XA,YA,N,X,Y,DY) @COP POLINT.FOR @COP MAINPOLINT.FOR Interpol´aci´ospolinomegy¨ utthat´ oinaksz´am´ ıt´ asa Vandermonde matrix egyenletrendszer´ enekmegold´asa MAINPOLCOF.FOR POLCOF.FOR FOR MAINPOLCOF,POLCOF LIN MAINPOLCOG,POLCOF 1 undefined symbol: POLINT LIN MAINPOLCOF,POLCOF,POLINT

Numerikus Matematika a gyakorlatban - w3.atomki.huw3.atomki.hu/atomki/TheorPhys/phdnumgyak/jegyzet.pdf · Numerikus Matematika a gyakorlatban Dr. Vertse Tam´as Jegyzet Szeptember

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Numerikus Matematika a gyakorlatbanDr. Vertse Tamas

JegyzetSzeptember 12.

Kovetelmenyek: jelenlet ajanlott, sajat TIGRIS account kell, erdemjegyet a programra

kapnak

Bevezetes a VMS-be : file szerkezet, DEL, PU utasitasok.

Bevezetes a FORTRAN nyelvbeFOR LINK

COP.COM

F.COM

szeptemeber 19

JEGYZET.txt

Fuggvenykozelitesek, inter- es extrapolacioLagrange interpolacio

LAG.FOR

Spline interpolacio

@COP TRIDAG.FOR

@COP TRIDAG.DAT

ED TRIDAG.RES

TRIDAG.FOR

VSW.FOR

Februar 15.

Az ED editor hasznalata

Egyszeru Fortran program bemutatasa: LAG.FOR

LAG.COM

ASS

DEASS

LAGRANGE.FOR

Februar 22.

A Lagrange interpolacioval nem kapunk becslest az interpolacio hibajara. Ebben segıt a

Nevill fele algoritmus.

SUBROUTINE POLINT(XA,YA,N,X,Y,DY)

@COP POLINT.FOR

@COP MAINPOLINT.FOR

Interpolacios polinom egyutthatoinak szamıtasa

Vandermonde matrix egyenletrendszerenek megoldasa

MAINPOLCOF.FOR

POLCOF.FOR

FOR MAINPOLCOF,POLCOF

LIN MAINPOLCOG,POLCOF

1 undefined symbol: POLINT

LIN MAINPOLCOF,POLCOF,POLINT

R MAINPOLCOF

FORTRAN PAUSE

Hibakereses DEBUGER-rel

ED FDBG.COM

*C

$FOR/NOOP/DEB ’P1

$LIN/DEB ’P1

CNRL Z

*EX

@FDBG MAINPOLCOF,POLCOF,POLINT

R MAINPOLCOF

implicit real*8 (a-h,o-z)

beszurasa a MAINPOLINT foprogramba es a POLCOF subroutine-ba

@F JO

erredmeny:

p(x) = −6.05 + 0.44167x+ 0.7x2 − 0.09167x3

Marcius 1.

Inverzinterpolacio

@COP INVERZPOL.FOR

A legkisebb negyzetek modszereLinearis eset: normalegyenletek

1. pelda

illesztes x=0-ra centralt polinommal

φj(x) = xj

@COP NORMAL.FOR

@COP NORMAL.DAT

FOR/D LINES NORMAL

ED fd.com

*C

Polinom helyettesıtesi ertekenek kiszamıtasa Horner elrendezessel

FUNCTION HORN(N,A,X)

Visszateres a legkisebb negyzetek modszerehez

Tovabbra is linearis eset.

2. pelda

Modositsuk a NORMAL.FOR programot arra az esetre, ha a φj(x) = (x − a)j tehat a-ra

centralt polinom

read(5,*) a

do i=1,n

x(i)=x(i)-a

enddo

Megoldas:

NORMAL1.FOR

NORMAL1.DAT

3. pelda

exponencialis fuggvenyek linearkombinacioja:

φj(x) = e−λjx

a λj bomlasi allandok ertekei adottak.

@COP NORMAL2.FOR

@COP NORMAL2.DAT

@F NORMAL2

R NORMAL2

fortran stop

ED NORMAL2.RES

c(0)=5.0503

c(1)=2.9718

y(x) = 5.0503e−x + 2.9718e−0.5x

Ha a λ-kat is ismeretleneknek tekintenenk, akkor ez a problema a nemlinearis egyen-

letrendszerek megoldasat koveteli.

A normalegyenletek linearis egyenletrendszerek. Ezek megoldasat Gauss Jordan eliminacioval

(kikuszobolessel) vegeztuk. Ezt a feladatot a

SUBROUTINE GAUSSJ(A,N,NP,B,M, MP)

vegezte el. A parameterek jelentese.

Egyutthatok matrixa: A(NP,NP)

ismeretlenek szama: N¡=NP

Tobbszoros jobboldal: B(NP,MP)

A szamolas vegen ez fogja tartalmazni a megoldast.

Linearis egyenletrendszerek megoldasa

Linearis egyenletrendszerek megoldasaDirekt modszerek:

Gauss kikuszoboleses modszer: ismeretlenek fokozatos kikuszobolese, amig felso haromszogmatrix-

ot kapunk. Ezutan a kapott egyenletrendszert visszahelyettesitessel oldjuk meg.

Gauss modszer determinans kiszamitasara: foatlobeli elemek szorzata (−1)k, ahol k a

sorcserek szama a haromszogmatrixa alakitas soran.

Matrixinverzio Gauss modszerrel:

Inverzmatrix oszlopvektorai az ismeretlenek, jobboldalon az egysegvektorok.

Gauss-Jordan kikuszoboles (eliminacio). Hasonlo a Gauss modszerhez, de ennel az xk is-

meretleneket valamennyi egyenletbol kikuszoboljuk (nemcsak az adott egyenlet alattiakbol).

A k=n-1 edik leszarmaztatott egyenletrendszer matrixa diagonalis lesz, igy a foatlobeli ele-

mekkel beosztva egysegmatrixot kapunk. A jobboldal fogja az inverzmatrixot tartalmazni.

Foelem kivalasztas(pivoting)

reszleges

teljes

Linearis egyenletrendszer megoldasa Gauss-Jordan eliminacioval

@COP MAINGAUSJ.FOR

@COP GAUSJ.DAT

@COP GAUSJ.COM

Matrixinverzio Gauss-Jordan eliminacioval

@COP GAUSJINV.FOR

@COP GAUSJINV.DAT

@F GAUSJINV

R GAUSJINV

Linearis egyenletrendszer megoldasa haromszogmatrixokra bontassal A=L . U

Ax = b

A.x = L.(Ux) = L.y = b, ahol U.x = y

L.y = b elorehelyettesitessel oldhato meg, y ismereteben az U.x = y visszahelyettesitessel.

A = L.U felbontas a Crout fele algoritmussal tortenik. Tarolas az A-matrix helyen (ezert

eloszor A-t celszeru kimenteni).

@COP LU.FOR

@COP LU.DAT

@F LU

R LU

ED LU.RES

Determinans szamıtasa hasonloan tortenhet, mint a Gauss modszernel.

Matrixinvertalas LU felbontassal

A.X = E egyenletrendszerek megoldasa reven

@COP LUINVERZ.FOR

@COP LUINVERZ.DAT

@F LUINVERZ

R LUINVERZ

ED LUINVERZ.RES

Vege a direkt modszereknek

Marcius 8.

Iteracios modszerek linearis egyenletrendszerek megoldasara. Ezeket a direkt modszerrel

kapott kozelito megoldas pontosıtasara hasznaljuk.

Kozelıto megoldas:x0

Eredeti egyenlet: A.x = b

A.x0 = b0 = b+ c0 = A.x− (b− b0)

Lin. egyenletrendszer az x− x0 korrekciora:

A.(x− x0) = b− b0 = c

Mivel ennek megoldasa is numerikus, ezert ezt is csak kozelitoen kapjuk.

Iteracio a korrekciokra

@COP MPROVE.FOR

@COP MPROVE.DAT

@F MPROVE

ED MPROVE.RES

Eloszor kozelıto megoldast generalunk, ugy, hogy az LU felbontassal kapott eredmenyt

kisse elrontjuk. Ez lesz az x0 kezdo megoldasunk. Az iteraciot addig folytatjuk, amig ket

egymasutani megoldas elterese adott pontossagnal kisebb lesz.

Nemlinearis egyenletek megoldasa.

Ha f(x) folytonos es sign(f(a)) 6= sign(f(b)) akkor letezik gyok [a,b]-ben.

Intervallum felezesi eljarassal (bisection)

Ez biztos, de lassu modszer.

Pelda: f(x) = −1− x ∗ (1− x2) [a, b] = [1, 1.5] acc=1.E-7

@cop rtbis.for

@f rtbis

r rtbis

1.,1.5,1.e-7

root is in the interval [ 1.00000, 1.50000]

the root is: x= 1.32472+-0.1E-06

Masik pelda:f(x, c) = e−c∗x

@cop rtbis1.for

@cop khi2.dat

@f rtbis1

r rtbis1

0.5,2.5,1.e-7

root is in the interval [ 0.50000, 2.50000]

the root is: x= 0.95099,+-0.1E-06

Hurmodszer, szelo modszer: linearis interpolacio

Erinto modszer, Newton-Raphson modszer:

xk+1 = xk − f(xk)/f′(xk)

kvadratikusan konvergal, ha jo kezdoerteket adunk. Nem mindig konvergal.

Generaljunk kezdoerteket az intervallum felezesi modszerrel

f(x, c) = e−c∗x

@cop nlinkhi2.for

@f nlinkhi2

r nlinkhi2

the root is: 0.95099+-0.1E-5

FORTRAN STOP

Nemlinearis egyenletrendszerek megoldasa

Feladat: megoldando a kovetkezo ketismeretlenes nemlinearis egyenletrendszer

F1(x1, x2) = x21 + 3x1 − x2 − 1 = 0

F2(x1, x2) = x1x2 + 3x2 + 9 = 0

β1 = −F1

β2 = −F2

α1,1 = ∂F1

∂x1 = 2x1 + 3

α1,2 = ∂F1

∂x2 = −1

α2,1 = ∂F2

∂x1 = x2

α2,2 = ∂F2

∂xx = x1 + 3

tehat a Jacobi matrix:

α1,1α1,2J(x) = α2,1α2,2

kezdoertekek: x(0)1 = −4x

(0)2 = 6

Megoldas: x1 = −4.5251023x2 = 5.9012437

A tobbparameteres legkisebb negyzetes illesztesi feladat egyenletrendszerre vezet.

Nemlinearis egyenletrendszerre nincs biztosan mukodo modszer. Ha van elfogadhato

kezdoertek sorozatunk, akkor az altalanosıtott Newton-Raphson modszerrel probalkozhatunk.

Feladat:

f(x, c(0 : 1)) = c(0) ∗ e−c(1)∗x illesztese az xi, yi alappontokra.

Ez ketismeretlenes nemlinearis egyenletrendszerre vezet.

@cop mnewt1.for

@cop mnewt1.dat

@f mnewt1

r mnewt1

FORTRAN STOP

ed mnewt1.res

*c

Marcius 22

Kozelıto (numerikus) differencialas

Differenciahanyadossal valo kozelıtes.

elore(progresszıv), hatra(retrograd) es centralis differenciak.

Tablazatosan (alappontokban) adott fuggveny derivalasa:

Interpolacios polinommal, majd a polinom derivalasa.

Spline interpolacioval pl. Ekkor a derivalt masodfoku polinomja x-nek, ezert a magasab-

brendu derivaltak szamolasa problemas.

Kozelıtes Csebishev polinomokkal:

SUBROUTINE CHEBFT(A,B,C,N,FUNC)

A FUNC(X) fuggvenyt kozelıti N-edfoku Csebisev polinommal, tehat kiszamıtja a C[1:N]

sorfejtesi egyutthatokat.

Ezutan megvizsgaljuk az egyutthatokat es esetleg levagjuk a sorfejtest.

Kozelıto fuggveny szamolasa Clenshow rekurzioval.

FUNCTION CHEBEV(A,B,C,M,X)

A derivalt polinom egyutthatoinak szamolasa.

Mi a teendo, ha a fuggveny csak tablazatosan adott?

i) interpolacio

ii) interpolacios polinom Csebisev sorfejtesi egyutthatoinak meghatarozasa.

iii) a derivalt fuggveny Csebisev sorfejtesi egyutthatoinak szamolasa.

SUBROUTINE CHDER(A,B,C,CDER,N)

a derivalt egyutthatoi a CDER tombben

@COP CHEBDIF.FOR

@COP WERNER.NUM input file

@F CHEBDIF

R CHEBDIF

ed chebdif.res

*c

derivalt fuggveny kiırasa meg egyszer a WERNER.DEN1 fileba is. Lasd kesobb.

Aprilis 12

Ha a Csebisev sorfejtesi egyutthatokat ismerjuk, akkor szamolhatjuk az integral sorfejtesi

egyutthatoit is.

@COP CHEBINT.FOR

@COP WERNER.DEN input file

R CHEBINT

ED CHEBINT.RES

*C

ED WERNER.NUM1

*C

Ez kozelıtoleg megegyezik a WERNER.NUM-mal, aminek derivaltja a werner.den1, amit

elozoleg megorıztunk.

Numerikus integralas (Kvadratura)

A Lagrange interpolacios polinom kiintegralasa Newton-Cotes formulara vezet. Egyenlokozu

beosztasok: trapez-formula, hibatag

f(x) = ex

@COP TRAGYAK.FOR

a Simpson formula, mint a trapez-formula javitoformulaja.

@COP SIMP.FOR

f(x) = sin(x)

Javıtoformula a Simpson modszerre.

Feladat: ırjunk programot az f(x) = x3 fuggveny ekvidisztans pontokban vett Simpson

kozelıtessel szamolt integraljanak es becsult hibajanak a kiszamıtasara.

megoldas: SIMPGYAK.FOR

Romberg integralas

@COP MAINROM.FOR

@COP ROMB.DAT

@F MAINROM

R MAINROM

ED ROMB.RES

*C

Gauss kvadraturak:

Veges [a, b] intervallumon a Gauss-Legendre kvadraturat hasznaljuk. n-pontos kvadraturanal

az osztaspontok az n-edfoku Legendre polinom zerushelyei. Az alappontok es a sulyok

megtalalhatok pl. Abramowitz-Stegun, Handbook of Mathematical Functions, Table 25.4

916.oldal

Pl. 10 pontos Gauss-Legendre kvadratura:

@COP QGAUS.FOR

Gauss kvadraturak mas orthogonalis polinomok segitsegevel.

Gauss Csebisev kvadratura,

Gauss Hermite,

Gauss Laguerre kvadraturak.

Hogyan szamıtsuk az alappontokat es a sulyokat Gauss-Legendre kvadraturara?

Mintaprogram:

@COP GAULEG.FOR

@COP GAULEG.DAT input file

a,b,n

@F GAULEG

R GAULEG

ED GAULEG.RES

*C

GL.FOR filebol beszerkeszthetjuk az alappontok es a sulyok pontos ertekeit a programba.

Aprilis 19

Tobbszoros integralok kiszamıtasa

Ketszeres integralok

I =

∫ ∫

T

f(x, y)dxdy,

ahol T ketdimenzios zart halmaz. Jeloljuk a = min(x,y)∈T {y} es b = max(x,y)∈T {y}. Tegyuk

fel, hogy barmely y0 ∈ [a, b]-re az y = y0 egyenes maximum ket ponban metszi T hatarat.

Ha ez nem teljesul, akkor darabolassal alakıtjuk T -t olyan T1, ..., Tk tartomanyok osszegere,

melyekre ez a feltetel mar teljesul. Jelolje az y = y0 egyenes balodali metszespontjat a ϕ(y0),

a jobboldali metszespontjat ψ(y0). Ekkor

I =

∫ b

a

F (y)dy, F (y) =

∫ ψ(y)

ϕ(y)

f(x, y)dx

Ezzel a ketszeres integral kiszamıtasat egyszeres integralok kiszamıtasara vezettuk vissza:

I =n∑

k=1

F (yk)A(n)k

F (yk) =

mk∑

i=1

f(x(k)i , yk)A

(mk)i ,

ahol az mk, k = 1, ..., n alappont a [ϕ(yk), ψ(yk)] intervallumon. Ezekkel kifejezve

I =

n∑

k=1

mk∑

i=1

f(x(k)i , yk)A

(n)k A

(mk)i .

A legegyszerubb esetben, amikor T teglalap, akkor az x beli alappontrendszer fuggetlen

yk-tol: mk = m x(k)i = xi, i = 1, ..,m

I =

n∑

k=1

m∑

i=1

f(xi, yk)A(n)k A

(m)i .

Peldakeppen a ktszeres integral kiszamıtasara, szamıtsuk ki a felgomb terfogatat numerikus

integralassal.

Vegezzunk 10 pontos Gauss-Legendre kvadraturat mindket integralra:

@COP QGAUS2D.FOR

@F QGAUS2D

R QGAUS2D

Lathato, hogy a 10 pontos Gauss kvadratura nem eleg pontos. Ha az integral erteket

pontosıtani akarjuk, akkor tobbpontos kvadraturara van szuksegunk.

16 pontos Gauss kvadraturat hasznal a QGAUS2D1.FOR

32 pontos Gauss kvadraturat hasznal a QGAUS2D2.FOR

Integralas tobb (d) dimenzioban. Monte-Carlo integralas

Tobbszoros integralas altalanosıthato d > 2 esetre is, de a szukseges ido rohamosan

no a d dimenzio novekedesevel. A hiba becslese is egyre bonyolultabb. Ezert erdemes

lesz a sztochasztikus szimulaciot hasznalo u.n. Monte-Carlo modszert hasznalni. Ebben az

osztaspontokat veletlenszeruen valasztjuk. Ha az ri szamok a [0,1] intervallumon egyenletes

eloszlasu veletlen szamok, akkor az

I =

∫ 1

0

...

∫ 1

0

F (x1, x2, ..., xn)dx1 dx2... dxn

integral kozelıtese az F (r1, r2, ..., rn) fuggvenyertekekbol kepezett osszeg. Elonye meg, hogy

egyszeruen alkalmazhato tobbdimenzios komplikalt integracios tartomanyra is. Fel kell

venni azt a legkisebb V hiperteglalapot, ami a T = W integracios tartomanyt koruloleli.

Az integralast erre a V hiperteglalapra kell elvegezni, ugy, hogy a W -n kıvuli pontokat

nem adjuk hozza az osszeghez. Ez ekvivalens egy olyan f(xi) fuggveny definialasaval, ami

azonosan zerus, hacsak xi ∈ W nem teljesul, mikoris f(xi) = F (xi) all fenn. Az I integral

Monte-Carlo kozelıtesben N esemeny generalasa mellett:

I =

V

f(x)dV = V < f > ± V√N

< f2 > − < f >2,

ahol dV = dx1...dxn, es

< f >=1

N

N∑

i=1

f(xi)

< f2 >=1

N

N∑

i=1

f(xi)2.

Mivel a hiba 1√N-nel aranyos, ajanlatos a V hiperteglalapot a leheto legkisebbre venni, mert

f zerus ertekei novelik a hibatagot, u.i. a W -n kıvuli pontoknak nincs informacio tartalma,

ezert az esemenyek hatasos Neff szama N-nel kisebb, es a hiba 1√Neff

-vel aranyos.

Veletlenszamok generalasi modszerei szamıtogeppel:

A szamıtogep nem kepes igazi veletlen szamokat generalni, csak ehhez kozelıto u.n. pseudo

veletlenszamokat. Igen fontos, hogy ezek eloszlasa a leheto legjobban kozelıtse az egyenletes

eloszlast.

Neumann Janos fele kozbenso-negyzet modszer: r-jegyu szam kozepso r/2 jegye

D.H. Lehmer szorzat-maradek modszer: Adva van egy a szorzo es egy m oszto (egeszek),

valamint egy ugyancsak egesz r0 kezdoertek. A tovabbi elemeket az ri = a × ri−1(mod m)

rekurzioval allıtjuk elo. Modosıtott formaja, ha van meg egy b konstans is, es a rekurzio

ri = (a × ri−1 + b)(mod m) alaku, ahol m = 2t t az integer szo bitjeinek szama. Szorzas 2 × t

jegyu, a hozzaadott b t jegyu, a kovetkezo veletlen szam az eredmeny kevesbe szignifikans

t jegye, amit m-mel valo osztassal alakıtunk [0,1] koze eso lebegopontos szamma.

Ahrens-Dieter modszer: ri = (a× ri−1 + b× ri−2)(mod m)

NAG Lib. SUBROUTINE G05CAF

m = 259 a = 1313 r0 = 123456789× (232 + 1)

Az eddigi modszerek kozos hatranya az, hogy korrelacio van az egymast koveto szamok

kozott.

Javıtas modja: eloszor generalunk egy szamsorozatot, majd ebbol valasztunk egy elemet

veletlenul, majd ennek a helyet feltoltjuk egy ujonnan generalt veletlen szammal. Igy

mukodik a RAN2 function.

FUNCTION RAN2(IDUM)

c

c [0,1] intervallumon egyenletes eloszlasu veletlen szamokat generalo rutin

c

PARAMETER (M=714025,IA=1366,IC=150889,RM=1.4005112E-6)

DIMENSION IR(97)

DATA IFF /0/

IF(IDUM.LT.0.OR.IFF.EQ.0)THEN

IFF=1

IDUM=MOD(IC-IDUM,M)

DO 11 J=1,97

IDUM=MOD(IA*IDUM+IC,M)

IR(J)=IDUM

11 CONTINUE

IDUM=MOD(IA*IDUM+IC,M)

IY=IDUM

ENDIF

J=1+(97*IY)/M

IF(J.GT.97.OR.J.LT.1)PAUSE

IY=IR(J)

RAN2=IY*RM

IDUM=MOD(IA*IDUM+IC,M)

IR(J)=IDUM

RETURN

END

A Monte-Carlo integralas sokdimenzios integralok kiszamıtasara gazdasagos.

Pelda Monte-Carlo integralasra: toruszdarab terfogatanak szamıtasa:

Hatarozzuk meg egy 4 egyseg kulso es 2 egyseg belso sugaru torusz es egy x ≥ 1, y ≥ −3

feltetelekkel adott doboz kozos reszet kepezo targy sulypontjat es tomeget. A torusz

belsejebe eso pontra teljesul, hogy

z2 + (√

x2 + y2 − 3)2 ≤ 1.

Tegyuk fel, hogy a targy ρ surusege allando. A feladat megoldasahoz a kovetkezo in-

tegralokat kell a test belsejere kiszamıtani:

M =

W

ρdV, Mx =

W

xρdV, My =

W

yρdV, Mz =

W

zρdV,

ahol dV = dx dy dz.

A sulypont koordinatai a fenti integralokkal:

xs =Mx

M, ys =

My

M, zs =

Mz

M.

A testet magabafoglalo V -vel jelolt teglatest:

x ∈ [1, 4], y ∈ [−3, 4], z ∈ [−1, 1], V = 3× 7× 2 = 42.

@COP MONTC.FOR

@F MONTC

R MONTC

adja meg az esemenyek szamat

100000

n= 100000

a test tomege= 22.1579 hiba= 0.0663

a sulypont x,y,z koordinatai:

x= 2.4076 hiba= 0.0079

y= 0.1629 hiba= 0.0080

z= 0.0002 hiba= 0.0022

FORTRAN STOP

Szimmetria okokbol a sulypont z koordinataja 0, s lathato, hogy a kozelıto ertek a

hibahataron belul ezt teljesıti.

Hazi feladatkent hatarozzuk meg Monte-Carlo modszerrel az egysegnyi sugaru felgomb

terfogatat.

@cop halfsphmc

@f halfsphmc

r halfsphmc

adja meg az esemenyek szamat

100000

n= 100000

a test tomege= 2.0982 hiba= 0.0063

a sulypont x,y,z koordinatai:

x= 0.0020 hiba= 0.0019

y= -0.0010 hiba= 0.0019

z= 0.3753 hiba= 0.0016

felgomb terfogata= 2.09440

FORTRAN STOP

egzakt erteekek: 2π3 = 2.09440, valamint xs = ys = 0. Lathato, hogy a kozelıto ertekek a

hibahatarokon belul egyeznek az egzakt ertekekkel.

Differencialegyenletek numerikus megoldasaDifferencialegyenletek osztalyozasa:

- kozonseges differencialegyenletek (egyvaltozos fuggvenyekre: y(x)),

- parcialis differencialegyenlet(tobbvaltozos fuggvenyekre(pl. u(x, y))

Eloszor a kozonseges differencialegyenletekkel foglalkozunk. Alapfeladatok kozonseges diffe-

rencialegyenletekre:

- Kezdetiertek-problema: a differencialegyenlet megoldasa (es a derivaltjai) adott(ak)

az x0 = a kezdopontban, meghatarozando bizonyos diszkret xi pontokban az egesz

xi ∈ [a, b] intervallumon.

- Peremertek-problema: a differencialegyenlet megoldasa adott az [a, b] intervallum a

kezdo es b vegpontjaban ( masodrendu, vagy magasabbrendu differencialegyenletekre).

Pl.

Ly(x) = y′′(x) + p(x)y′(x) + q(x)y(x) = 0,

ahol az y(a) = A es az y(b) = B peremertekek adottak, az y,(a) = α azonban ismeretlen.

A peremertek-problema visszavezetheto kezdetiertek-problemara.

- Sajatertek-problema: Ismeretlen parameter van a differencialegyenletben. Sajatertek:

azon parameter ertek, aminel a peremertek-problemanak van megoldasa. Ez a

megoldas a sajatfuggveny. Pl.

Ly − λy = 0,

ahol λ ismeretlen parameter. Az y(a) = A es az y(b) = B peremertekek adottak. Ez

is visszavezetheto a kezdetiertek-problemak, vagy matrix sajatertek problemajanak

megoldasara.

Kezdetiertek problemak numerikus megoldasi modszerei

A legtobb differencialegyenletbol kifejezhetok a derivaltak, es a differencialegyenlet felırhato

u.n. standard alakba, ami a kovetkezo: y′ = f(x,y), ahol y es f N-dimenzios vektorok.

A magasabb rendu differencialegyenletek visszavezethetok a standard alakra, azaz elsorendu

differencialegyenletek rendszerere.

Pl. az

y′′ + py′ + qy = 0

masodrendu differencialegyenlet eseten vezessuk be: az y1 = y ,es az y′1 = f1 = y2 =

y′ jeloleseket. Ezek felhasznalasaval y′2 = f2 = y′′ = −py2 − qy1, azaz a masodrendu

differencialegyenlet a standard alakot veszi fel N = 2-vel , ugyanis

y′ = (y′1, y′2)T = (f1, f2)

T ,

ahol f1 = y2 es f2 = −py2 − qy1, es a T a transzponaltat jeloli.

A numerikus megoldasi modszerek osztalyozasa:

A differencialegyenletek megoldasi modszereit szokas felosztani egylepeses es tobblepeses

modszerekre.

Vegyunk egyenlo, h = (b−a)/n lepeskozu beosztasat az [a, b] intervallumnak, azaz legyen

xi = a+ ih, i = 0, 1, ...n.

- tobblepeses modszerrol akkor beszelunk, ha az yi+1 kiszamıtasahoz egynel tobb

osztaspontbeli megoldast hasznalunk fel, azaz k > 0 mellett felhasznaljuk az yi,yi−1, ...,yi−k

ertekeket.

- egylepeses a modszer, ha k=0, tehat csak az yi erteket hasznaljuk fel.

Kozonseges differencialegyenletek megoldasa egylepeses kozelıto modszerrel:

az Euler modszer.

Tekintsuk az y′ = f(x,y) differencialegyenlet-rendszer x0 pontbeli kezdetiertek-problemajat,

ahol adottak az y(x0) = y0 es y′(x0) = f(x0,y0) kezdetiertek vektorok ertekei. Szamıtsuk ki a

differencialegyenlet megoldasat az x1 = x0+h pontban. A legdurvabb kozelıtes az elsorendu

u.n. Euler modszer, amiben az [x0, x1] intervallumban a keresett megoldast egyenesekkel

kozelıtjuk. Ha N = 1, azaz csak egyetlen elsorendu differencialegyenlettel van dolgunk,

akkor

y1 = y0 + hy′(x0) = y0 + hf(x0, y0)

vagy ezt atrendezve,y1 − y0h

=∆y0h

= y′(x0) = f(x0, y0).

Vagyis a differenciahanyadost az intervallum kezdopontjabeli derivalttal helyettesıtettuk.

Ez a kozelıtes nyilvanvaloan annal rosszabb, minel inkabb elter az y(x) megoldas az

x ∈ [x0, x1] intervallumban az egyenestol, vagyis, minel nagyobb a h lepeskoz. Az Euler

modszer tehat valodi egylepeses modszer, hiszen az y1 kiszamıtasahoz csak az x0 pontbeli

mennyisegeket y0-at es f(x0, y0)-at hasznalja fel.

Ha a modszert az x0 helyett az xi kezdopontbol indıtjuk, es tobb egyenletunk van

(N > 1), akkor az Euler modszer termeszetesen

yi+1 = yi + hf(xi,yi)

alaku lesz.

Pelda az Euler modsszer hasznalatara: N = 1 y′ = f(x, y) = x2 + y2 adottak:

x0 = 0.d0, y0 = 0.d0, b = 1.d0 es h = 0.1

@COP EULER.FOR

@COP EULER.DAT

@F EULER

R EULER

FORTRAN STOP

ED EULER.RES

*C

y(x=1)=0.29254 , ha h=0.1

y(x=1)=0.34402 , ha h=0.01

y(x=1)=0.34961 , ha h=0.001

y(x=1)=0.35040 , ha h=0.0001

Ahhoz, hogy az elsorendu Euler modszernel pontosabb eredmenyt szamıthassunk,

kozbenso pontokat kell felvennunk az [xi, xi+1] intervallumban. Jeloljuk ezeket a kozbenso

pontokat xj-vel. Vegyunk t darab kozbenso pontot, jeloljuk az ezekben a pontokban vett

kozelıto megoldasokat yj-vel es az itteni kozelıto derivaltakat kj-vel:

kj = f(xj , yj).

Termeszetesen j=1,..,t. Azyi+1 − yi

h=

∆yi

h

differenciahanyadost pontosabban kozelıthetjuk a kozelıto derivaltak sulyozott osszegevel,

ha az αj sulyokat megfeleloen valasztjuk:

yi+1 − yi

h=

t∑

j=1

αjf(xj , yj) ≡ g(xi,yi, h).

A most kovetkezo Runge-Kutta tipusu modszerek ugy hatarozzak meg az αj sulyokat,

valamint az xj yj ertekeket, hogy az adott t-hez tartozo modszer H hibavektora a h-ban

p-edrendu legyen:

H(xi, h) ≡ y(xi) + hg(xi,y(xi), h)− y(xi + h) = O(hp+1)1,

ahol 1 egy olyan N-dimenzios vektor, melynek minden komponense 1.

Runge-Kutta tipusu modszerek.

Valasszunk egyenlokozu beosztast az [x0, b] intervallumon:

xi = x0 + ih,

ahol i = 0, 1, ..., n. Oldjuk meg az y′ = f(x,y) differencialegyenlet-rendszer x0 pontbeli

kezdetiertek-problemajat, ahol adottak az y(x0) = y0 es y,(x0) = f(x0,y0) ertekei. A megoldas

meghatarozasat x0-bol kiindulva, h hosszusagu lepesenkent vegezzuk. Tegyuk fel, hogy

mar megtettunk k lepest es meghataroztuk az xk pontbeli yk kozelıto megoldast. Ekkor a

soronkovetkezo feladat, ennek felhasznalasaval kiszamıtani az xk+1 = xk + h pontbeli yk+1

kozelıto megoldast. Vegyunk fel ehhez t darab

xj = xk + µjh

kozbensopontot az [xk, xk+1] intervallumban, azaz az egyelore ismeretlen µj parameterekre

kossuk ki, hogy µj ∈ [0, 1]. Vezessunk be tovabbi ismeretlen λji parametereket, melyekkel

meghatarozzuk a kozbensopontbeli (kozelıto) megoldasokat es derivaltakat

yj = yk + h

t∑

i=1

λjiki

kj = f(xj , yj) = f(xk + µjh,yk + ht

i=1

λjiki).

Ha a λji parametereket ugy valasztjuk meg, hogy i ≥ j eseten λji = 0 legyen, akkor a j-t

1-tol t-ig novelve, a

kj = f(xj ,yk + h

j−1∑

i=1

λjiki)

kifejezes mindig csak a mar kiszamıtott kj-ket fogja tartalmazni, tehat ebbol a k1,k2,...,kt

ertekeket egymasutan ki tudjuk szamıtani. A xk+1 pontbeli kozelıto megoldas ezek is-

mereteben a kovetkezokeppen szamıthato:

yk+1 = yk + h

t∑

j=1

αjkj .

Idohiany miatt itt nem foglalkozunk azzal, hogy milyen egyenletekbol lehet meghatarozni

a Runge-Kutta modszerekben szereplo parameterek ertekeit, csupan nehany fontosabb

specialis esettel foglalkozunk. A specialis eseteket a bennuk szereplo kozbenso pontok

szama: t, vagy a kozelıtes p rendje szerint csoportosıthatjuk.

Ha t = 1, akkor csak egyetlen pont van, ami az intervallum kezdopontja: x1 = xk,

λ11 = 0, ıgy µ1 = 0 es k1 = f(xk,yk) miatt, valamint α1 = 1 felhasznalasaval az Euler modszert

kapjuk vissza:

yk+1 = yk + hf(xk,yk).

Az Euler modszer elsorendu Runge-Kutta modszer (p = 1), melynek hibatagja O(h2) (tehat

h-ban masodrendu). Ez igen pontatlan modszer, ezert a gyakorlatban nem is celszeru

hasznalni.

Gyakorlatban hasznalatos modszer a negyedrendu (p = 4) Runge-Kutta modszer. Itt

t = 4 es a kozbensoponti kozelıto derivatakat a kovetkezokeppen szamıtjuk:

k1 = f(xk,yk)

k2 = f(xk +h

2,yk +

h

2k1)

k3 = f(xk +h

2,yk +

h

2k2)

k4 = f(xk + h,yk + hk3).

Ezek segıtsegevel az xk+1 pontbeli megoldas:

yk+1 = yk +h

6(k1 + 2k2 + 2k3 + k4).

A negyedrendu Runge-Kutta modszer hibatagja: O(h5) , tehat egzakt maximum negyedfoku

polinomra.

Alkalmazzuk a negyedrendu Runge-Kutta modszert az kovetkezo feladat megoldasara:

N = 1

y′ = 2 ∗√

1− y2 y(0) = sin(0.25) egzakt megoldasa a k.e.p.-nak: y = sin(2x+ 0.25)

@COP RK4.FOR

@COP RK4.DAT

@F RK4

R RK4

FORTRAN STOP

ED RK4.RES

*C

ED RK4.FOR

*C

Az f(x, y) jobboldalvektor komponenseit a SUBROUTINE DERIVS szamolja. Masik

feladatra ezt kell atırni.

Hazi feladat: oldjuk meg az y′ = x2 + y2 kezdetiertek-problema-t y(0) = 0-ra az RK4

felhasznalasaval.

a megoldas: RK41.FOR

ED RK41.res

*C

x approximate y(x)

0.000000000 0.000000000

0.100000000 0.000333335

0.200000000 0.002666875

0.300000000 0.009003498

0.400000000 0.021359447

0.500000000 0.041791288

0.600000000 0.072448125

0.700000000 0.115660305

0.800000000 0.174081004

0.900000000 0.250907869

1.000000000 0.350233742

A negyedrendu Runge-Kutta modszer alkalmazasa masodrendu differencialegyenlet-re:

y′′ = −y ∗K2, y(0) = 1 , y′(0) = 0 kezdetiertek-problema megoldasa:

Elso lepes a standard alakra hozas es az ennek megfelelo DERIVS subroutine elkeszıtese.

@COP RK24.FOR

c main program for calling rk4

c integration y”=-xk**2*y

c with y(0)=1 and y’(0)=0

c

c exact solution: y(x)=cos(xk*x)

implicit real*8 (a-h,o-z)

parameter (nmax=1000)

dimension yy(nmax),xx(nmax),f(nmax),dev(nmax),

1 y(2),yout(2),dydx(2)

common/par/xk

external derivs

open(unit=5,file=’rk24.dat’,status=’old’)

open(unit=6,file=’rk24.res’,status=’unknown’)

read(5,*) n,xmax,xk

c number of equations

nn=2

c converting second order diff. eqn into the system of first order diff.eqns

c y(1)=y(x), y(2)=y’(x)=dydx(1) y”(x)=dydx(2)=-xk**2*y(1)

c initial values: at x=0 y(1)=1 y(2)=0

c

c setting initial condition

x=0.d0

y(1)=1.d0

y(2)=0.d0

c

h=xmax/n

xx(1)=x

yy(1)=y(1)

c exact solution in x=h

f(1)=cos(xk*x)

c step by step integration from x=0 to x=xmax in step size h

do i=1,n

ip=i+1

c define k1 = f(x, y)

call derivs(x,y,dydx)

call rk4(y,dydx,nn,x,h,yout,derivs)

x=x+h

xx(ip)=x

c store approximate solution

yy(ip)=yout(1)

y(1)=yout(1)

y(2)=yout(2)

c store exact solution and deviation

f(ip)=cos(xk*x)

dev(ip)=abs((yy(ip)-f(ip))/f(ip))

enddo

write(6,100)

write(6,101)(xx(i),yy(i),f(i),dev(i),i=1,n+1)

100 format(7x,’x’,10x,’approximate y(x)’,3x,’exact y(x)’,4x,

1 ’relative error’)

101 format(1x,3f15.9,f19.16)

stop

end

subroutine derivs(x,y,dydx)

implicit real*8 (a-h,o-z)

dimension y(2),dydx(2)

common/par/xk

c y′i(x) = dydxi = fi(x, y1, y2)i = 1, 2

dydx(1)=y(2)

dydx(2)=-xk**2*y(1)

return

end

@COP RK24.DAT

TYPE RK24.DAT

10,1.8,2.d0

@F RK24

R RK24

TYPE RK24.RES

x approximate y(x) exact y(x) relative error

0.000000000 1.000000000 1.000000000 0.0000000000000000

0.180000000 0.935899840 0.935896824 0.0000032229215751

0.360000000 0.751846764 0.751805729 0.0000545821793318

0.540000000 0.471434530 0.471328364 0.0002252473826228

0.720000000 0.130606600 0.130423709 0.0014022840479742

0.900000000 -0.226951116 -0.227202095 0.0011046501167430

1.080000000 -0.555409741 -0.555699146 0.0005207944531408

1.260000000 -0.812671410 -0.812952037 0.0003451947985342

1.440000000 -0.965764864 -0.965979312 0.0002220007929906

1.620000000 -0.995071125 -0.995161903 0.0000912195880846

1.800000000 -0.896837674 -0.896758416 0.0000883827341111

A negyedrendu Runge-Kutta modszer javıto formulaja. Jelolje yh a h leoeskoz hsznalataval,

y2h pedig a 2h lepeskoz hasznalata mellett kapott kozeıto megoldast az x = xk pontban.

Kimutathato, hogy ugyanitt az

y =16

15yh −

1

16y2h

javıto formula jobb kozelıtese az y(xk) egzakt megoldasnak, mint az yh. Ezt a javıto formulat

tehat felhsznalhatjuk a h lepeskozzel kapott kozelıtes tovabbjavıtasara. Ezt azonban

ritkan alkalmazzuk. Inkabb hasznaljuk a javıtoformulabol szarmaztathato hibabecslest:

a h lepskozzel kapott yh kozelıtes hibaja eszerint δ = 115 (yh − y2h). Ennek segıtsegevel a h

integralasi lepeskozt beallithatjuk egy olyan ertekre, hogy a kozelıtes megadott pontossagu

legyen.

Automatikus lepeskoz-szabalyozas adott pontossagu kozelıteshez

Bar az automatikus lepeskoz-szabalyozast az elobbi hibabecsles segıtsegevel is elvegezhetnenk,

tekintsunk itt egy magasabbrendu kozelıtest. Otodrendu (p = 5), vagy beagyazott Runge-

Kutta formula:

Ez a kozelıtes hat kozbenso pontot hasznal (t = 6). Jeloljuk az ezekben a pontokban vett

kozelıto derivaltakat ki-vel (i = 1, ..., 6). Mivel ez a kozelıtes otodrendu, a modszer hibatagja:

O(h6), felteve, hogy megfelelokeppen (optimalisan) valasztjuk az αi sulyokat:

yk+1 = yk + h6

i=1

αiki +O(h6).

Ha az optimalis αi sulyok helyett kevesbe optimalis α∗i sulyokat hasznalunk, akkor egy

kevesbe pontos, negyedrendu kozelıtest kapunk:

y∗k+1 = yk + h

6∑

i=1

α∗iki +O(h5).

A ket kozelıtes kulonbseget kepezve hibabecslest kaphatunk yk+1-re :

∆ = yk+1 − y∗k+1 =

6∑

i=1

ki(αi − α∗i ) = O(h5).

Itt termeszetesen az αi valamint az α∗i konstansok megadott ertekek. A hibabecsles lehetove

teszi, hogy adott pontossagu kozelıtest allıtsunk elo a h integralasi lepeskoz automatikus

szabalyozasaval. Ehhez kihasznaljuk, hogy a ∆h5 jo kozelıtessel h-tol fuggetlen allandonak

tekintheto. Tegyuk fel, hogy ǫ = 10−6 pontossagu kozelıto megoldast akarunk generalni.

Ekkor, ha egy h1 lepeskozzel szamolva a kapott hiba erteke ∆1, akkor az ǫ = ∆o hibat ho =

h1| ǫ∆1

| 15 lepeskozzel szamolva erhetjuk el. Ha tehat |∆1| > ǫ, akkor a szamolast ho lepeskozzel

meg kell ismetelnunk. Ellenkezo esetben nincs szukseg a szamolas megismetlesere, mert az

nem baj, ha a kozelıtesunk pontosabb a megkıvantnal.

A modszer alkalmazasara tekintsuk a korabbi peldat: y′′ = −y ∗K2, y(0) = 1, y′(0) = 0

@COP ADAPT2.FOR

@COP ADAPT2.DAT

@f ADAPT2

R ADAPT2

FORTRAN STOP

ED ADAPT2.RES

*C

x1 x2 approximate y(x) exact y(x)

0.000000000 1.800000000 -0.896758490 -0.896758416

Lathato, hogy a kozelıto megoldas valoban ǫ = 10−8 pontossaggal egyezik az egzakt

eredmennyel.

Az ADAPT2 programban a SUBROUTINE RKQS vegzi az automatikus lepeskoz beallıtast

a kivant eps pontossag eleresehez. A komponensek pontossagat YSCAL skalazza. RKQS-

nek meg kell adni aktualis parameterkent azt az egylepeses numerikus integralasi rutin

nevet, amit hasznalni akarunk. Jelen esetben ez az RKCK t=5 R-K modszer. Az x-ben

valo elorehaladast az intervallum vegpontjaig az ODEINT subroutine szervezi.

Az egylepeses modszerekhez sorolhatjuk meg az u.n. modosıtott kozbensoponti modszert

(MMID). Ennek lenyege az, hogy a H hosszusagu egyetlen lepest h = HM hosszusagu elemi

lepesekre bontjuk, s ıgy M+1 darab kozbensopontot vezetunk be. Ennek tovabbfejlesztese a

Bulirsch-Stoer modszer, ami Richardson extrapolaciot hasznal (mint a Romberg integralas).

A h=0-ra valo extrapolalast a SUBROUTINE RZEXTR vegzi racionalis extrapolacioval.

Ennek a modszernek a mukodeset az alabbi peldaprogram mutatja.

@COP BESTADAPT.FOR adatfile a mar atmasolt ADAPT2.DAT A feladat is ugyanaz,

mint az ADAPT2.FOR-ban specifikalt feladat, tehat

y′′(x) = −k2 ∗ y(x) , y(0) = 1, y′(0) = 0 egzakt m.o.: y = cos(kx)

A standard alak ismet: y1 = y y2 = y′ = y′1 = f1 y′2 = y′′ = −k2 ∗ y1 = f2,

ezert a DERIVS ugyanaz, mint korabban.

Foprogram: I/O fileok megnyitasa, beolvasas, kezdetiertekek megadasa:

ystart(1) = 1 ystart(2) = 0

A modosıtott kozbensoponti modszer:

A megoldas adott X-ben: Y(1:N), es keresett X+H-ban, amit majd YOUT(1:N)-ben

tarolunk.

A kozbenso pontok szama: NSTEP, s ezek egyenlokozzel vannak elhelyezve: h = H/NSTEP

lepeskozzel.

A kozelıto megoldasok a kozbenso pontokban a kovetkezoek:

z0 = y(X)

z1 = z0 + h ∗ f(X, z0)

z2 = z0 + 2h ∗ f(X + h, z1)

z3 = z1 + 2h ∗ f(X + 2h, z1)

..

zm+1 = zm−1 + 2h ∗ f(X +mh, zm), m = 1, ...n− 1

Az elso es az utolso ponttol eltekintve ez a kozbensoponti vagy centralis differencia modszer

a z(x) kozelıto megoldasra.

y(m)′ =zm+1 − zm−1

2h

Az elso es az utolso pontban azonban a szimmetria megtorik es nemileg modosul a keplet,

ez indokolja a modszer nevet. A pontos megoldas X + H pontban: y(X + H). A kozelıto

megoldas pedig ugyanitt:

y(n) = 0.5 ∗ [zn + zn−1 + h ∗ f(X +H, zn)]

A modosıtott kozbensoponti modszer masodrendu modszer, hibatagja O(h3) rendu, erteke:

y(n)− y(X +H) =∑∞i=1 αi ∗ h2i, tehat csak paros hatvanyokat tartalmaz

Javıto formulaja:

y = 4/3 ∗ yn − 1/3 ∗ yn/2,

ahol yn h, yn/2 pedig 2h lepeskozzel volt szamolva.

y(X +H) = yn +O(h5)

A Bulirsch-Stoer modszer hıvja a

SUBROUTINE MMID-et

NSTEP=2,4,6,8,12,14,24 beosztasokkal, mindaddig, mıg a Richardsson extrapolacioval h=0

-ra kapott ertek hibabecslese kisebb nem lesz a megkıvant ǫ (relatıv) pontossagnal.

A Richardsson extrapolaciot a

SUBROUTINE RZEXTR vegzi polinom helyett pn(x)/qm(x) racionalis tortkifejezessel.

A

SUBROUTINE BSSTEP(Y,DYDX,NV,X,HTRY,EPS,YSCAL,HDID,HNEXT,DERIVS)-be

valo belepeskor az Y tomb tartalma az X-beli megoldas, kilepeskor pedig az X+H pontbeli

megoldas.

A megoldas propagalasat x1-bol x2-be az ODEINT vegzi. Ez gondoskodik arrol is, hogy a

h lepeskoz ne legyen hmin-nel kisebb. Optimalizalja a szukseges szamolast H novelesevel ill.

csokkentesevel.

@F BESTADAPT

R BESTADAPT

FORTRAN STOP

ED ADAPT2.RES

*C

x1 x2 approximate y(x) exact y(x)

0.000000000 1.800000000 -0.896758414 -0.896758416

Linearis tobblepeses modszerek

Az egyszeruseg kedveert tekintsuk az x0 pontbeli kezdetiertek-problemat N = 1

esetben. Ennel

y′ = f(x, y),

ahol y(x0) = y0 adott. Vegyunk h lepeses egyenlokozu beosztast: xi = x0 + ih, ahol

i = 1, 2, ..,m. Lattuk, hogy egy k-lepeses modszer k darab fuggvenyerteket hasznal fel az yn+1

kiszamıtasahoz, ezek a kovetkezok: yn,yn−1,...,yn−k+1. Tehat a k lepeses modszer altalanos

alakja:

yn+1 +

k∑

i=1

αiyn+1−i = h

k∑

i=0

βifn+1−i,

ahol az αi es βi mennyisegek megadott sulyok az i = 0, 1, ..., k ertekekre. Itt bevezettuk az

ft = f(xt, yt) jelolest. Ha nem hasznalnank ezt a tomor jelolest, akkor jobban latszana, hogy

a jobboldalon allo kifejezes is tartalmazza a meghatarozando yn+1 mennyiseget, kiveve, ha

β0 = 0. Ha β0 = 0, akkor explicit egyenletunk van az ismeretlen yn+1 meghatarozasara, s

ezt az egyenletet extrapolacios formulanak nevezzuk. Ellenkezo esetben, tehat, ha β0 6= 0,

implicit egyenletunk van es ezt interpolacios formulanak nevezzuk.

Itt sem foglalkozunk azzal, hogy hogyan lehet adott rendu kozelıteshez meghatarozni

az αi, βi szamertekeit, hanem ezeket ismerteknek tekintjuk. Az Adams fele modszerek

azok, amik rogzıtett k mellett a legmagasabbrendu kozelıteseket szolgaltatjak. Ezert a

tovabbiakban csak ezekkel foglalkozunk. Kimutathato, hogy a k-adrendu Adams modszernel

az extrapolacios formula hibatagja O(hk+1) rendu, mıg a pontosabb interpolacios formula

hibaja O(hk+2) rendu. Peldakeppen felırjuk a k = 3 esetre vonatkozo Adams formulakat.

Kimutathato, hogy k = 3-ra az extrapolacios formula:

yn+1 = yn +h

12(23fn − 16fn−1 + 5fn−2) +O(h4).

Mıg az interpolacios formula:

yn+1 = yn +h

24(9fn+1 + 19fn − 5fn−1 + fn−2) +O(h5).

Lathato, hogy az interpolacios formula alkalmazasahoz ismerni kell egy kozelıto erteket

a meghatarozando mennyisegnek. Kezenfekvo, hogy ezt az extrapolacios formula fel-

hasznalasaval szamıtsuk ki. Ezt az eljarast prediktor-korrektor modszernek hıvjak . A

prediktor-korrektor modszer a kovetkezo harom lepesbol all:

1.) Az yn+1 meghatarozasa exrapolacios formulaval (prediktor lepes, jele: P)

2.) Az fn+1 = f(xn+1, yn+1) kiszamıtasa az elozo lepsben kapott yn+1 segıtsegevel (jele: E)

3.) Az yn+1 meghatarozasa interpolacios formulaval, az elozo lepesben meghatarozott fn+1

felhasznalasaval (korrektor lepes, jele: C).

Elvileg lehetseges az interpolacios modszer ismetelt felhasznalasaval pontosabb kozelıto

megoldast szamolni yn+1-re. Azaz a PECECEC.... iteraciot alkalmazni a korrektor lepes

implicit egyenletenek megoldasara. Ez azonban nem szokasos. A PEC lepesek elvegzese

utan tovabblepunk es az yn+2-t hatarozzuk meg. Ennek az az oka, hogy nincs sok ertelme

pontosabban meghatarozni egy amugy is csak kozelıto mennyiseget. A most kovetkezo pro-

gram a k = 1, ..4-es az Adams formulak hasznalatat mutatja az y′ = 2∗√

1− y2, y(0) = sin(0.25)

kezdetiertekproblemara. Mivel az inditashoz k kezdopontbeli fuggvenyertek szukseges, erre

felhasznaljuk , hogy ismerjuk az egzakt megoldast: y = sin(2 ∗ x+ 0.25)

@COP MULTISTEP.FOR

@COP MULTISTEP.DAT

@F MULTISTEP

R MULTISTEP

FORTRAN STOP

ED MULTISTEP.RES

*C

Feladat: Irjuk at a programot az y′′ = −y ∗ K ∗ ∗2 y(0) = 1, y′(0) = 0 masodrendu d.e.

megoldasara. egzakt megoldasa: y = cos(x ∗K)

megoldas: MULTI2.FOR adatfile: MULTI2.DAT

A kozelıto megoldas teljes hibaja.

Az eddigiekben csak egyetlen h lepes megtetelenel vizsgaltuk az elkovetett hibat a dif-

ferencialegyenlet numerikus integralasa soran . Ez a hiba alapvetoen az alkalmazott kozelıto

modszer p rendjetol, valamint a h lepeshossztol fuggott. Ezt a hibat keplethibanak nevezzuk,

es ez csak egy resze a megoldas teljes hibajanak. A kezdetiertek-problema megoldasanak

hibajat az is befolyasolja, hogy milyen hibat kovetunk el a kezdetiertek(ek) megadasanal az

x0 pontban. Ahogy tavolodunk a kezdoponttol a ketfele hiba tovaterjed es kiegeszul min-

den lepesnel az abban elvegzett aritmetikai muveletek kerekıtesi hibaival. Tehat, amikor

eljutunk a b vegpontba, az itt szamıtott megoldas hibajaban mindharom fajta hiba szer-

pet jatszik. A keplethiba annal kisebb, minel rovidebb a h lepeskoz. Ennek ellenere nem

valaszthatjuk h erteket nagyon kicsinek, mert akkor a kerekıtesi hibak fognak felnoni a

sok integracios lepes miatt, ami a b vegpont eleresehez szukseges. Altalanos javaslat, hogy

becsuljuk meg azt a minimalis pontossagot, amire a megoldas meghatarozasanal szuksegunk

van, es hasznaljuk az automatikus lepeskoz szabalyozasi lehetoseget.

Peremertek-feladatok megoldasa

A gyakorlatban leggyakrabban felmerulo peremertek-problemak linearisak, s ezeket

egyszeruen visszavezethetjuk kezdetiertek-problemak megoldasaira. Ennek modjat a kovetkezo

egyszeru peldan mutatjuk be.

Tekintsuk az L operatorral definialt

Ly(x) = y′′(x) + p(x)y′(x) + q(x)y(x) = r(x),

masodrendu, linearis, inhomogen differencialegyenletet, ami az y(a) = A es az y(b) =

B hatarfeltetelekkel peremertek-problemat hataroz meg. A peremertek-problema y(x)

megoldasat az alabbi ket kezdetiertek-problema megoldasanak linearkombinaciojakent allıtjuk

elo:

1 Az u(x) fuggveny jelolje az Lu = 0 homogen differencialegyenletmegoldasat u(a) = 0

es u′(a) = 1 kezdetiertekek mellett. Ez tehat egy kezdetiertek-problema, melynek

megoldasara szamos modszert ismertunk meg az elozoekben.

2 A z(x) fuggveny jelolje az Lz = r inhomogen differencialegyenlet megoldasat z(a) = A

es z′(a) = 0 kezdetiertekek mellett. Ez egy masik kezdetiertek-problema.

Konnyu belatni, hogy az

y(x) = c1u(x) + c2z(x)

linearkombinacio c1 = B−z(b)u(b) es c2 = 1 ertekek mellett a peremertek-problema megoldasat

szolgaltatja.

Nemlinearis differencialegyenlettel kapcsolatos peremertek-problema eseteben probal-

kozhatunk az u.n. beloveses modszerrel (shooting method). Noha ennek a modszernek a

konvergenciajara altalaban nincs garancia, ha azonban konvergal, akkor altalaban gyorsabb

a konkurens modszereknel. A beloveses moszer nevet arrol a technikarol kapta, amit regen

a tuzerek hasznaltak, amikor agyuval akartak egy tavoli celpontot eltalalni. Az agyu

vızszinteshez mert szogenak valtoztatasaval lottek be a celt, azaz kerestek olyan α1 es α2

szogeket, hogy az egyik szognel a lovedek a celpont elott, a masiknal a celpont mogott

csapodott be. Masodrendu differencialegyenletre vonatkozo peremertek-problema eseten

ennek az felel meg, hogy az a kezdopontban az y′(a) mennyisegre talalunk olyan α1 es α2

ertekeket, hogy az ezekkel indıtott kezdetiertek-problemak megoldasai x = b-ben kozrefogjak

a b pontbeli y(b) = B peremfeltetelt. Ekkor a peremertek-problema megoldasahoz tartozo

igazi y′(a) ertekre fennall, hogy

y′(a) ∈ [α1, α2]

Az igazi y′(a) ertek meghatarozasa ezutan a nemlinearis egyenletek megoldasara vonatkozo

modszerek (intervallum felezes, hurmodszer, stb) valamelyikevel tortenhet.

Veges differenciak modszere

Oldjuk meg az elozoekben vizsgalt peremertek feladatot a veges differenciak modszerevel!

Ekkor tehat az

y′′(x) + p(x)y′(x) + q(x)y(x) = r(x),

differencialegyenletet, kell megoldanunk az y(a) = A es az y(b) = B hatarfeltetelek mellett.

Ehhez vegyuk fel az [a, b] intervallumnak a h = b−an+1 (egyenlo) lepeskozu beosztasat, melyre

xi = a + ih valamennyi i = 0, 1, ..., n + 1 ertekre. Alkalmazzuk az yi = y(xi) jelolest, amivel

y0 = A es yn+1 = B fenn kell alljon. Az xk osztaspontokban a megoldas elso, illetve masodik

derivaltjait a kovetkezo veges differencia hanyadosokkal kozelıthetjuk:

y′(xk) =yk+1 − yk−1

2h+O(h),

valamint

y′′(xk) =yk+1 − 2yk + yk−1

h2+O(h2).

Jeloljuk az osztaspontokban a megfelelo fuggvenyertekeket: pk = p(xk), qk = q(xk) es

rk = r(xk)-val! Ezeket a differencialegyenletbe helyettesıtve a kovetkezo linearis egyenle-

trendszert kaphatjuk az ismeretlen y1, y2, ..., yn mennyisegekre:

yk+1(2 + hpk) + yk(2h2qk − 4) + yk−1(2− hpk) = 2h2rk

valamennyi k = 1, ..., n ertekre. Ennek a linearis egyenletrendszernek a megoldasa szolgaltatja

a peremertek-problema megoldasat. Megjegyezzuk, hogy ennek a linearis egyenletrend-

szernek a matrixa u.n. haromatlos matrix, melynel csak a foatloban es az alatta, illetve

felette elhelyezkedo mellekatlokban levo elemek kulonboznek nullatol. A modszert az alabbi

peldaprogrammal mutatjuk be.

Feladat: oldjuk meg az y′′ − y ∗ (1 + x2) = 1 diff. e. y(0) = 1 es y(1) = 0 ertekekkel adott

premertekfeladatat a veges differenciak modszerevel:

@COP PEREMERT.FOR

@COP PEREMERT.DAT

@f PEREMERT

R PEREMERT

FORTRAN STOP

A megoldas::

ED PEREMERT.RES

*C

1.0000 1.0746 1.1701 1.2877 1.4294

1.5976 1.7958 2.0285 2.3013 2.6219

3.0000

Sajatertek-problemak megoldasa veges differenciak modszerevel.

Tekintsuk az

y′′(x) + p(x)y′(x) + (q(x)− λ)y(x) = 0,

masodrendu differencialegyenletnek az y(a) = 0 es az y(b) = 0 hatarfeltetelekkel definialt

sajatertek-feladatat! Nyilvanvalo, hogy a differencialegyenlet megoldasa fugg az ismeretlen

λ parameter erteketol, tehat y = y(x, λ). A λ erteket ugy kell meghatarozni, hogy a

peremertek-problema kieleguljon. Jeloljuk λ parameternek ezeket az ertekeit, tehat a

sajatertekeket λn-nel. A λ = λn sajatertekek mellett kapott y(x, λn) megoldasok a problema

sajatfuggvenyei. Vegyuk az elozoekben hasznalt egyenlokozu beosztast es alkalmazzuk

a derivaltakra a veges differenciahanyadosokkal valo kozelıtest! Irjuk be ezt a differ-

encialegyenletbe , ekkor a kovetkezo linearis egyenletrendszert kapjuk:

yk+1(1

h2+pk2h

) + yk[(qk −2

h2)− λ] + yk−1(

1

h2− pk

2h) = 0

k = 1, ..., n-re. Ez ismet egy haromatlos matrixu, homogen, linearis egyenletrendszer az

y1, y2, ..., yn ismeretlenekre. A λ-tol fuggo tagot az egyenlet jobboldalara rendezve

Ay = λy

alaku egyenletrendszert kapunk, ami nem mas, mint az A matrix sajatertek-problemaja.

Ezzel a differencialegyenlet sajatertek-problemajat matrix sajatertek-problemajanak megolda-

sara vezettuk vissza, amire standard numerikus modszerek allnak rendelkezesre. Meg kell je-

gyezni, hogy a matrix sajatertek-problemajanak a megoldasa a differencialegyenlet sajatertek-

problemaja megoldasanak csupan kozelıtese, aminek pontossaga fugg peldaul a h beosztas

nagysagatol. (Hiszen a derivaltakat a h lepeskozhoz tartozo veges differenciak hanyadosaival

kozelıtettuk.) Bizonyos hatarig pontosıthatjuk a differencialegyenlet sajatertek-problema meg-

oldasat a h csokkentesevel, ennek ara azonban az, hogy egyre nagyobb meretu A matrix

sajatertek-problemajat kell megoldanunk. Bizonyos hataron tul azonban a modszer pon-

tossaga nem javıthato, mert a kerekıtesi hibak halmozodasa a kozelıtes romlasat okozza.

Sajatertek-problemak megoldasa iteracioval.

Egy masik modszer az elozo sajatertek-problemamegoldasara az, hogy valasztunk egy

a < xm < b illesztesi pontot, es megoldjuk a kovetkezo ket kezdetiertek-problemat:

1.) Kiszamıtunk egy baloldali megoldast az [a, xm] intervallumon, az yl(a, λ) = 0 es

y′l(a, λ) = 1 kezdeti feltetelekkel, majd

2.) kiszamıtunk egy jobboldali megoldast az [xm, b] intervallumon, az yr(b, λ) = 0 es

y′r(b, λ) = 1 kezdeti feltetelekkel.

Ezutan kepezzuk az u.n. logaritmikus derivaltak kulonbseget:

f(λ) =y′l(xm, λ)

yl(xm, λ)− y′r(xm, λ)

yr(xm, λ).

Az f(λ) nemlinearis fuggveny, es a λn sajatertekek f(λn) = 0 egyenlet gyokei. Ugyanis

ezek mellett mindket megoldas az y(x, λn) sajatfuggvennyel aranyos, ıgy logaritmikus

derivaltjaik egyenloek. Tegyuk fel, hogy tudunk olyan λ(0) erteket adni, mely kozelebe esik

valamelyik λn sajaterteknek. Ekkor a λ(0) kezdoertekkel elindıtott Newton iteracio altalaban

a λn sajatertekhez fog konvergalni. Termeszetesen az f(λ) = 0 egyenlet gyokeit mas, a

nemlinearis egyenlet megoldasara vonatkozo numerikus modszerrel is megkereshetjuk. A

sajatertek meghatarozasa utan a sajatfuggvenyt ugy kaphatjuk meg, hogy a jobboldali

megoldast az xm illesztesi pontban csatlakoztatjuk a baloldali megoldashoz, majd ha

szukseges, akkor az ıgy kapott folytonos fuggvenyt 1-re normaljuk.

Matrixok sajatertekproblemaja

Matrixokrol altalaban:

transzponalas, negyzetes matrixok:

egyseg, diagonalis, tridiagonalis, kontinuans matrixok

felso haromszog es Hessenberg matrixok

also ” ” ”

Szimmetrikus, onadjungalt, ortogonalis, uniter, normalis matrixok

Valos elemu matrixokra

Hermitikus=szimmetrikus

ortogonalis=uniter=normalis

Matrixok sajatertek feladatanak numerikus megoldasa

jobbodali es baloldali sajatvektorok

Szimmetrikus A matrix eseten baloldali sajatvektor a jobboldali transzponaltja

Csak jobboldali (oszlop) sajatvektorokkal foglalkozunk.

Ax = y trafo a sajatvektorok iranyat valtozatlanul hagyja.

Ax = λx(A− λE)x = 0Det(A− λE) = 0φ(λ) = 0

Karakterisztikus polinom (n-edfoku). maximum n db. kulonbozo gyoke lehet a karakter-

isztikus egyenletnek.

Ha A diagonalis vagy U , vagy L, akkor determinansa lenyegeben a foatlobeli elemeinek

szorzata, tehat a sajatertekek a foatlobeli elemek. Sajatfuggvenyek, ha a sajatertekek

kulonbozoek (nem degeneralt eset), akkor az ei egysegvektorok.

Ha T regularis (Det(T ) 6= 0), akkor B = T × A × T−1 hasonlosagi trafo valtozatlanul hagyja

A sajatertekeit. Ha xi A sajatvektora, akkor B-nek ugyanahhoz a sajatertekhez tartozo

sajatvektora: T × xi Tehat, ha sikerul az A matrixot hasonlosagi trafoval diagonalizalni,

akkor megkapjuk a sajatertekeket a foatloban, es a sajatvektor is rekonstrualhato a

hasonlosagi trafobol. A hasonlosagi trafo oszlopvektorai a sajatvektorok.

Valos, szimmetrikus matrixra a sajatvektorok valosak es ortogonalisak, ıgy a hasonlosagi

trafo is ortogonalis trafo.

A = ZT .A.Z

Valos, nem szimmetrikus matrixok is diagonalizalhatok a sajatvektorokbol osszeallo matrixal,

de a sajatvektorok altalaban komplexek. Valos hasonlosagi trafoval kvazi-diagonalissa

tehetok (2 × 2-es al-matrixoktol eltekintve). A numerikus megoldasnal az A matrixot

P1, P2, ... hasonlosagi trafok sorozataval a diagonalis alak fele lokdossuk. Ha ez sikeres,

akkor XR = P1.P2.P3... a sajatvektorokbol alkotott matrix lesz.

Numerikus modszerek fajtai:

I./ Kikuszobolesi modszerek: (Jacobi, Gauss, Householder) egylepesben kinullaznak egy,

vagy tobb elemet, es ezeket a lepeseket iteraljuk.

II./ Faktorizacios modszerek: kozos, hogy A = FL.FR szorzatra bontjuk, s FR.F=F−1L .A.FL

hasonlosagi trafot kapunk. Ide tartozik a QR es a QL modszer.

I modszerrel jo kezdeti allapotot allıtunk elo, majd folytatjuk a

II modszerrel, ami ekkor gyorsabban konvergal.

Householder modszer (szimmetrikus matrixokra) n− 2 db ortogonalis trafoval tridiagonalis

alakra hoz.

Ezt valosıtja meg a

SUBROUTINE TRED2(A,N,NP,D,E) rutin

A diagonalizalni kivant matrixot az A N ×N-es tombbe helyezzuk,

N <= NP

Az eredmeny: foatlobeli elemek a D(NP) valos vektorba, D(1),...,D(N) lesznek eltarolva, a

foatlo alatti elemek E(2),...,E(N)-ben, E(1)=0 mindig. Az A tomb felulırodik.

A kapott tridiagonalis matrix sajatertekeinek ( es esetleg sajat vektorainak) a meghatarozasa:

felırjuk a φ(λ) karakterisztikus polinomot, majd a φ(x) = 0 egyenlet gyokeit intervallum-

felezessel, vagy NR modszerrel meghatarozzuk. A hozzajuk tartozo sajatvektorokat in-

verziteracioval hatarozhatjuk meg.

Ha nincs szukseg valamennyi sajatertekre es vektorra, akkor hatekonyabb egy faktorizacios

eljaras alkalmazasa.

A QR es a QL algoritmus

Barmely valos A matrix felırhato

A = Q.R alakba, ahol Q ortogonalis matrix, R pedig felso haromszog matrix. Irjuk most oket

fordıtott sorrendben, azaz szamıtsuk ki az A′ = R.Q matrixot. Mivel Q ortogonalis, ezert

Q−1 = QT , s ıgy QT .A = Q−1.Q.R = R, tehat A′ = QT .A.Q A-nak ortogonalis transzformaltja.

Bizonyıthato, hogy a QR trafo megorzi az A matrix szimmetriajat, tehat tridiagonalitasat

es Hessenberg alakjat (ha volt neki). Hasonlokeppen kimutathato, hogy barmely A matrix

felırhato A = Q.L alakba is, ahol L also haromszogmatrix es Q ortogonalis matrix. A

tovabbiakban a QL algoritmussal foglalkozunk, ami ortogonalis trafok alabbi sorozata: az

s-edik lepesben:

As = Qs.Ls a trafo:

As+1 = Ls.Qs = QTs .As.Qs

Ha s vegtelenhez tart, akkor As also haromszogmatrixhoz tart, ha A sajatertekei nem

degeneraltak. Ellenkezo esetben, ha λip > 1 multiplicitasu, akkor As egy p-edrendu matrixtol

(melynek sajatertekei a λi) eltekintve tart also haromszogmatrixhoz.

Muveletıgeny: O(n3) iteracionkent altalanos matrixra, Hesenberg alakra O(n2), tridiagonalis

matrixra O(n) iteracionkent. Alabb a kerekıtesi hiba szempontjabol elonyosebb u.n. implicit

eltolasos QL algoritmust alkalmazo szubrutint adjuk:

SUBROUTINE TQLI(D,E,N,NP,Z)

Bemeno parameterek: D(NP),E(NP) , ami a tridiagonalis matrix diagonalis es foatlo alatti

elemeit tartalmazo vektorok. N×N -es eredeti A matrix eseten D(1),..,D(N) es E(2),...,E(N)

van feltoltve. Ez az eredmenye a TRED2 szubrutinnak. Z egy NP ×NP meretu valos tomb,

amit egysegmatrix-szal kell feltolteni, ha a sajatvektorokat is meg akarjuk hatarozni. Mivel

TRED2 az A matrixot ıgy tolti fel, celszeru ezt megadni TQLI-ben Z-nek.

@COP SYMSAJ.FOR ld. Szidarovszki 7.9 288 oldal

@COP SYMSAJ.DAT mivel A szimmetrikus, ezert eleg az also haromszoget megadni, tehat

@F SYMSAJ 1 1 0.5

R SYMSAJ A= 1 1 0.25

FORTRAN STOP 0.5 0.25 2

eseten 1,1,1,0.5,0.25,2 -t

ED SYMSAJ.DAT

3,1

1.d0,1.d0,1.d0,0.5d0,0.25d0,2.d0,

ED SYMSAJ.RES

eigenvalue= -0.0166472836

eigenvector:

0.72 -0.69 -0.09

eigenvalue= 1.4801214232

eigenvector:

-0.44 -0.56 0.70

eigenvalue= 2.5365258604

eigenvector:

0.53 0.46 0.71

Nemszimmetrikus valos matrixok sajatertekeinek meghatarozasa 3 lepesben: 1./

eloszor celszeru kiegyensulyozni az A matrixot, hogy sorainak es oszlopainak normaja

kozelıtoleg azonos legyen, 2./ ezutan Hessenberg alakra hozzuk (felso Hessenberg alak: also

mellekatlo alatt valamennyi elem zerus) 3./ vegul alkalmazzuk a QR algoritmust a valos

Hessenberg matrixra.

bovebben: 1./ Hasonlosagi transzformacioval vegezzuk a SUBROUTINE BALANC(A,N,NP)

segıtsegevel. Parameterek: A(NP,NP) valos tomb, bemenetkor az egyensulyozando, kimenetkor

a kiegyensulyozott A matrixot tartalmazza. N az A matrix aktualis merete, NP az

A maximalis merete. 2./ A Hessenberg alakra hozast vagy foelemkivalasztasos Gauss

modszerrel vagy Householder redukciokkal erhetjuk el. Mivel a Gauss eliminacio nem ha-

sonlosagi trafoja az A matrixnak, ezert azt kicsit modosıtani kell. Az r-edik lepes elott az

eredeti A = A1 matrix Ar matrixa valtozott, es ez egy felso Hessenberg matrix az elso r − 1

soraban es oszlopaban. Az r-edik lepes a kovetkezo muveleteket tartalmazza: a./ megker-

essuk az r-edik oszlopnak a foatlo alatti maximalis abszoluterteku elemet. Ha ez zerus, akkor

atugorjuk a tovabbi ket lepest. Egyebkent jeloljuk ezen elem sorat r′-vel. b./ Felcsereljuk

az r′-edik sort az r + 1-edikkel. (Ez a foelemkivalasztas). Azert, hogy hasonlosagi trafo

legyen az r′ oszlopot is felcsereljuk az r + 1-edikkel. c./ i = r + 2, r + 3, ..., N-re kiszamıtjuk

az ni,r+1 = ai,r/ar+1,r szorzofaktort es ezzel megszorozva az r+1-edik sort, azt kivonjuk az i-

edik sorbol. Azert, hogy hasonlosagi trafo legyen az i-edik oszlop ni,r+1 szereset hozzaadjuk

az r + 1-edik oszlophoz. Az alabbi rutin ezeket a lepeseket tartalmazza es mivel csak a

sajatertekeket hatarozza meg, nem koveti nyomon a hasonlosagi trafok sorrendjet. SUB-

ROUTINE ELMHES(A,N,NP) parameterek: mint korabban, az A tomb bemenetkor a mar

feltehetoleg kiegyensulyozott nem szimmetrikus valos matrixot, kimenetkor pedig annak

felso Hessenberg alakjat tartalmazza, tehat az A(i, j) matrix i > j + 1 elemei gyakorlatilag

0-nak tekinthetok. A legkisebb lebegopontos szam nagysagrendjebe eso veletlen szamok.

3./ A QR algoritmust az elozoekben kapott felso Hessenberg alaku valos A matrixra a SUB-

ROUTINE HQR(A,N,NP,WR,WI) rutine-nal vegezhetjuk. Itt az elso harom parameter

ugyanaz, mint korabban, a WR(1),...,WR(N) valos vektor elemei kimeneten a komplex

sajatertekek valos reszet, a WI(1),..,WI(N) elemek pedig a sajatertekek kepzetes reszeit

tartalmazzak. Az ıgy kapott sajatertekek pontossaga tovabb novelheto, es a sajatvektorok

is meghatarozhatok inverz iteracioval.

Pelda: Hatarozzuk meg a kovetkezo

1.5 0.1 4.5 − 1.5

−22.5 3.5 12.5 − 2.5

−2.5 0.3 4.5 − 2.5

−2.5 0.1 4.5 2.5

nemszimmetrikus valos matrix sajatertekeit. Ezt a feladatot a fent vazolt modszerrel oldjuk

meg.

@COP NONSY.FOR

@COP NONSY.DAT

@F NONSY

R NONSY

FORTRAN STOP

ED NONSY.RES

*C

sajatertek: 3.0000 +i* -4.0000

sajatertek: 3.0000 +i* 4.0000

sajatertek: 2.0000 +i* 0.0000

sajatertek: 4.0000 +i* 0.0000

Lathato, hogy az utolso ket sajatertek valos, mıg az elso ketto komplex es konjugaltjai

egymasnak.

A sajatertekek finomıtasa es a sajatvektorok kiszamıtasa inverz iteracioval totrtenhet.

A megoldando sajatertekproblema: (A− λ.E).x = 0

Az inverz iteracio k-adik lepeseben a kovetkezo egyenletet kell megoldanunk:

(A− τk.E).y = bk Itt a τk a k-adik lepesbeli kozelıtese az egyik sajaterteknek, bk pedig egyre

csokkeno elemekkel rendelkezo maradekvektor (ez tart zerushoz, ha a pontos mego Miutan

az inhomogen linearis egyenletrendszert az y vektor komponenseire megoldottuk, a k + 1-

edik kozelıteset az x sajatvektornak 1-re normalassal kapjuk: y/|y|. A sajatertek kozelıteset

pedig τk+1 = τk+1/(bk.y) szolgaltatja. Lenyeges, hogy a kiindulo sajatertekunk eleg jo legyen,

maskulonben a modszer tul lassan, vagy egyaltalan nem konvergal.

Irodalom

Szidarovszky Ferenc, Bevezetes a numerikus modszerekbe, Kozgazdasagi es Jogi Konyvkiado,

Budapest, 1974

William H. Press, Saul A. Teukolsky, William T. Vettering, Brian P Flannery, Numerical

Recipes in FORTRAN, University Press, Cambridge, 1992. ldast kozelıtjuk), melynek

elemei szinten ismertek.