• No results found

UVODNI STRANA.... i

N/A
N/A
Protected

Academic year: 2022

Share "UVODNI STRANA.... i"

Copied!
53
0
0

Loading.... (view fulltext now)

Full text

(1)

UVODNI STRANA....

i

(2)

ii

(3)

Prohl´ aˇ sen´ı

Byl jsem sezn´amen s t´ım, ˇze na mou bakal´aˇrskou pr´aci se plnˇe vztahuje z´akon ˇc. 121/2000 o pr´avu autorsk´em, zejm´ena § 60 (ˇskoln´ı d´ılo).

Beru na vˇedom´ı, ˇze TUL m´a pr´avo na uzavˇren´ı licenˇcn´ı smlouvy o uˇzit´ı m´e bakal´aˇrsk´e pr´ace a prohlaˇsuji, ˇze s o u h l a s ´ı m s pˇr´ıpadn´ym uˇzit´ım m´e bakal´aˇrsk´e pr´ace (prodej, zap˚ujˇcen´ı apod.).

Jsem si vˇedom toho, ˇze uˇz´ıt sv´e bakal´aˇrsk´e pr´ace ˇci poskytnout licenci k jej´ımu vyuˇzit´ı mohu jen se souhlasem TUL, kter´a m´a pr´avo ode mne poˇzadovat pˇrimˇeˇren´y pˇr´ıspˇevek na

´

uhradu n´aklad˚u, vynaloˇzen´ych univerzitou na vytvoˇren´ı d´ıla (aˇz do jejich skuteˇcn´e v´yˇse).

Bakal´aˇrskou pr´aci jsem vypracoval samostatnˇe s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım bakal´aˇrsk´e pr´ace a konzultantem.

V Liberci dne 20.5.2011

Podpis:

iii

(4)

Na tomto m´ıstˇe bych r´ad podˇekoval vedouc´ımu pr´ace doc. Ing. Daliboru Frydrychovi, Ph.D. za cenn´e rady a mnˇe vˇenovan´y ˇcas. A d´ale sv´e rodinˇe za podporu pˇri cel´em studiu.

iv

(5)

Abstrakt

Tato pr´ace se zab´yv´a objektovˇe orientovanou anal´yzou vybran´ych numerick´ych metod pro potˇreby frameworku DF2EM . Jedn´a se o metody numerick´eho integrovan´ı a ˇreˇsen´ı obyˇcejn´ych diferenci´aln´ıch rovnic. Jednotliv´e metody jsou analyzov´any z pohledu objek- tovˇe orientovan´eho pˇr´ıstupu pˇri v´yvoji softwaru. Teoretick´a ˇc´ast pr´ace se skl´ad´a z popisu princip˚u dan´e numerick´e matematiky pro kter´e byly vytvoˇreny analytick´e modely. Ana- lytick´e modely jsou zapsany v UML. V praktick´e ˇc´asti pr´ace je dle tˇechto analytick´ych model˚u implementov´ana matematick´a knihovna v programovac´ım jazyce Java.

Kl´ıˇ cov´ a slova

numerick´e metody, objektovˇe orientovan´y pˇr´ıstup, analytick´e modely, numerick´a inte- grace, ODR

Abstract

This work deals with object-oriented analysis of selected numerical methods, which are used in the framework DF2EM . There are numerical integration methods and methods of solving ordinary differential equations. These methods are analyzed from the per- spective of the object-oriented approach to programming. The theoretical part of this work consists of a description of the methods of numerical mathematics and for these methods were built the analytical models. The analytical models were written in UML.

In the practical part of this work, in accordance with these analytical models, is the mathe- matical library implemented in programming language Java.

Key words

numerical methods, object-oriented approach, analytical models, numerical integration, ODE

v

(6)

Seznam obr´azk˚u vii

Seznam tabulek viii

Seznam pouˇzit´ych zkratek a pojm˚u x

1 Uvod´ 1

2 Teorie 3

2.1 Numerick´a integrace . . . 3

2.1.1 Kvadratura . . . 3

2.1.2 Kubatura . . . 5

2.1.3 Integraˇcn´ı body - kart´ezsk´y souˇradn´y syst´em . . . 7

2.1.4 Integraˇcn´ı body - barycentrick´y souˇradn´y syst´em . . . 8

2.2 Obyˇcejn´e diferenci´aln´ı rovnice . . . 8

2.2.1 Ulohy s poˇ´ c´ateˇcn´ımi podm´ınkami . . . 9

2.2.2 Tuh´e (stiff) rovnice . . . 9

2.2.3 Jednokrokov´e metody . . . 10

2.2.4 Metody explicitn´ı vs. implicitn´ı . . . 11

2.2.5 Metody Runge-Kutta . . . 12

2.2.6 V´ıcekrokov´e metody . . . 14

2.2.7 Algoritmus prediktor-korektor . . . 16

3 Objektovˇe orientovan´y pˇr´ıstup 17 3.1 Anonymita klienta . . . 17

3.1.1 Programov´an´ı proti rozhran´ı . . . 18

3.2 Urovnˇ´ e abstrakce . . . 18

3.3 UML . . . 18

3.4 N´avrhov´e vzory . . . 19

3.4.1 N´avrhov´y vzor Factory Method . . . 19

3.4.2 N´avrhov´y vzor Strategy . . . 20

3.5 Testov´an´ı . . . 21

4 Realizace 23 4.1 Implementace integraˇcn´ı knihovny . . . 23

4.1.1 Rozbor struktury . . . 24 vi

(7)

4.1.2 Struktura inicializaˇcn´ıho XML souboru . . . 27

4.1.3 Doporuˇcen´y postup pˇri programovan´ı . . . 29

4.1.4 Testov´an´ı . . . 29

4.2 Implementace ODE ˇreˇsiˇce . . . 30

4.2.1 Rozbor struktury . . . 33

4.2.2 Regulace kroku u adaptivn´ıch metod . . . 34

4.2.3 Inicializaˇcn´ı XML soubor . . . 36

4.2.4 Manipulace s inicializaˇcn´ımi daty . . . 36

4.2.5 Doporuˇcen´y postup pˇri programovan´ı . . . 38

4.2.6 Testov´an´ı . . . 39

5 Z´avˇer 40

Literatura 42

A Obsah pˇriloˇzen´eho CD I

vii

(8)

2.1 Diskretizovan´a oblast ve dvou-dimenzion´aln´ım prostoru . . . 5

2.2 Sedm nejv´yznamnˇejˇs´ıch geometrick´ych element˚u pro numerick´e integrov´an´ı 6 2.3 Mapov´an´ı bodu z referenˇcn´ıho troj´uheln´ıku na troj´uheln´ık obecn´y . . . . 8

2.4 Reˇsen´ı Eulerovou metodou s pˇr´ıliˇs velk´ˇ ym krokem . . . 10

2.5 Princip Eulerovy metody . . . 11

2.6 Princip Adams-Bashforthovy metody . . . 14

3.1 Diagram n´avrhov´eho vzoru Factory Method . . . 19

3.2 Diagram n´avrhov´eho vzoru Strategy . . . 20

4.1 Struktura integraˇcn´ı knihovny . . . 23

4.2 Diagram tˇr´ıd bal´ıˇcku integral . . . 24

4.3 Diagram tˇr´ıd pro integral factory . . . 26

4.4 Diagram tˇr´ıd bal´ıˇcku integPoints . . . 26

4.5 Rozhran´ı IDataIntegral . . . 27

4.6 Rozhran´ı IOdeFunction . . . 30

4.7 Rozhran´ı IOde . . . 31

4.8 Rozhran´ı IOdeSolver . . . 32

4.9 Rozhran´ı IOdeImplicit . . . 32

4.10 Tˇr´ıda OdeFactory . . . 33

4.11 Struktura knihovny pro ˇreˇsen´ı ODR . . . 33

4.12 Rozhran´ı IComparator . . . 35

4.13 Rozhran´ı IRegulator . . . 35

4.14 Tˇr´ıda DataManager . . . 36

4.15 Struktura bal´ıˇcku data . . . 37

viii

(9)

Seznam tabulek

2.1 Butcher tableau pro klasickou Runge-Kuttovu metodu . . . 13 2.2 Butcher tableau pro obecnou explicitn´ı Runge-Kuttovu metodu . . . 13 2.3 Butcher tableau obecnˇe pro vnoˇren´e Runge-Kuttovy metody . . . 14 2.4 Koeficienty pro Adams-Bashforthovy metody od prvn´ıho do ˇsest´eho ˇr´adu 15 2.5 Koeficienty pro Adams-Moultonovy metody od prvn´ıho do ˇsest´eho ˇr´adu . 15 2.6 Koeficienty pro BFD metody od prvn´ıho do ˇsest´eho ˇr´adu . . . 16 A.1 Obsah pˇriloˇzen´eho CD . . . I

ix

(10)

SW - programov´e vybaven´ı (Software)

IDE - v´yvojov´e prostˇred´ı (Integrated Development Environment)

OOP - Objektovˇe orientovan´e programov´an´ı (Object-Oriented Programming)

UML - grafick´y jazyk vyuˇz´ıvan´y v softwarov´em inˇzen´yrstv´ı (Unified Modeling Language) XML - rozˇsiˇriteln´y znaˇckovac´ı jazyk (eXtensible Markup Language)

ODE - obyˇcejn´e diferenci´aln´ı rovnice (Ordinary Differential Equations) IVP - ´Ulohy s poˇc´ateˇcn´ımi podm´ınkami (Initial Value Problem)

Metodika DF2EM - metodika implementace metody koneˇcn´ych prvk˚u unit testing - testov´an´ı aplikaˇcn´ıch jednotek k´odu

framework - softwarov´a struktura, kter´a slouˇz´ı jako podpora pˇri programov´an´ı

diagram - je strukturovan´e grafick´e zn´azornˇen´ı pojm˚u, myˇslenek a vztah˚u v jazyce UML solver - objekt na ´urovni zdrojov´eho k´odu, kter´y um´ı ˇreˇsit dan´y probl´em numerick´e matematiky

x

(11)

Kapitola 1 Uvod ´

Aˇckoliv numerick´a matematika je zn´am´a po stalet´ı, vyuˇz´ıvala se minim´alnˇe pro jej´ı znaˇcnou v´ypoˇcetn´ı n´aroˇcnost a pracnost. Pouze zˇr´ıdka se vyuˇz´ıvala v nˇekter´ych oblas- tech vˇedy a pr˚umyslu. S n´astupem elektronick´e v´ypoˇcetn´ı techniky umoˇzˇnuj´ıc´ı miliony aritmetick´ych operac´ı za zlomek ˇcasu, se dostalo numerick´e matematice velk´eho rozkvˇetu a tak zaˇcala nov´a ´era vˇedecko-technick´ych v´ypoˇct˚u. Komplexn´ı ´ulohy, kter´e se nedaly bez zjednoduˇsen´ı analyticky vyˇreˇsit, se st´avaly ˇreˇsiteln´ymi. Numeriˇct´ı analytikov´e museli (a st´ale musej´ı) objevovat nov´e algoritmy, kter´e dostateˇcnˇe vyhovuj´ı z hlediska efektivity a pˇresnosti v´ypoˇctu. Do pracovn´ıch t´ym˚u skl´adaj´ıc´ıch se doposud z matematik˚u a fyzik˚u, zaˇcali pˇrib´yvat odborn´ıci s rozs´ahl´ymi znalostmi programov´an´ı, datov´eho modelov´an´ı, s´ıt’ov´e komunikace, atd.

Tato pr´ace je zamˇeˇrena na vyuˇzit´ı modern´ıch programovac´ıch technik pˇri budov´an´ı knihovny numerick´e matematiky. Jako kaˇzd´y obor, tak i programov´an´ı se postupnˇe vyv´ıjelo. Od nejjednoduˇsˇs´ıho pˇr´ıstupu sekvenˇcn´ıho programov´an´ı, kde jednotliv´e pˇr´ıkazy programu se vykon´avaj´ı tak, jak po sobˇe n´asleduj´ı ve zdrojov´em k´odu. Aˇz po souˇcasnost, kdy je za velice efektivn´ı styl programov´an´ı povaˇzov´an objektov´y pˇr´ıstup. Objektov´y pˇr´ıstup je bliˇzˇs´ı lidsk´emu ch´ap´ani re´aln´eho svˇeta. S postupn´ym pˇr´ıchodem nov´ych pro- gramovac´ıch jazyk˚u b´yvaly tyto knihovny pouze pˇreps´any tak, aby splˇnovaly syntaxi nov´eho jazyka. Nov´e jazyky ale nevznikaly bezd˚uvodnˇe. Vˇetˇsinou byl nov´y jazyk vy- tvoˇren jako n´astroj umoˇzˇnuj´ıc´ı nov´y styl programov´an´ı, kter´y by zvyˇsoval produktivitu pr´ace program´ator˚u.

Mnoho matematick´ych knihoven bylo vytvoˇreno pˇred 30 a v´ıce lety ve strukturovan´ych programovac´ıch jazyc´ıch (nejˇcastˇeji Fortran). Tyto knihovny jsou pouze ´uloˇziˇstˇem jed- notliv´ych metod. Ovˇsem v k´odech jednotliv´ych numerick´ych metod stejn´eho zamˇeˇren´ı se daj´ı nal´ezt urˇcit´e sekvence zdrojov´eho k´odu, kter´e maj´ı spoleˇcn´e principy. Aplikov´an´ım objektovˇe orientovan´eho pˇr´ıstupu je moˇzn´e tyto sekvence vytˇesnit do abstraktn´ıch ´urovn´ı.

Stejn´e ˇc´asti zdrojov´eho k´odu budou v knihovnˇe sd´ıleny a nebudou se jiˇz opakovat. Pozi- tivn´ım d˚usledkem bude menˇs´ı mnoˇzstv´ı k´od˚u a d˚ukladnˇejˇs´ı testov´an´ı.

Cast´ˇ ym argumentem proti tomuto pˇr´ıstupu b´yv´a ot´azka niˇzˇs´ıho v´ypoˇcetn´ıho v´ykonu objektovˇe orientovan´ych jazyk˚u. Avˇsak st´ale mnoho lid´ı se domn´ıv´a, ˇze vyˇsˇs´ıho v´ykonu dos´ahnou prostou volbou jazyka niˇzˇs´ı ´urovnˇe a jiˇz se nemus´ı zaob´ırat peˇclivou anal´yzou probl´emu a kvalitn´ı algoritmizac´ı.

Praktick´ym v´ysledkem t´eto pr´ace bude knihovna numerick´e matematiky zamˇeˇruj´ıc´ı

1

(12)

se na pokryt´ı dvou oblast´ı numerick´e matematiky. Prvn´ı oblast´ı jsou metody pro ˇreˇsen´ı obyˇcejn´ych diferenci´aln´ıch rovnic a druhou oblast´ı jsou metody numerick´e integrace. Im- plementaˇcn´ım jazykem t´eto knihovny je objektovˇe orientovan´y jazyk Java. Volba tohoto programovac´ıho jazyka vych´az´ı z budouc´ıho vyuˇzit´ı knihovny. Knihovna je zaˇclenˇena do frameworku DF2EM a je jednou z mnoha jeho ˇc´ast´ı.

Z pr´ace v kontextu rozs´ahlejˇs´ıho projektu vypl´yvaj´ı jist´e v´yhody a omezen´ı. Napˇr´ıklad bude nutn´e se podˇr´ıdit vnitˇrn´ım princip˚um frameworku DF2EM . Str´aven´y ˇcas pocho- pen´ım struktur frameworku DF2EM se ale vr´at´ı v podobˇe budouc´ı uˇsetˇren´e pr´ace. Nebot’

se vyuˇzij´ı jiˇz naprogramovan´e funkcionality frameworku.

(13)

Kapitola 2 Teorie

2.1 Numerick´ a integrace

Velk´e mnoˇzstv´ı urˇcit´ych integr´al˚u nelze vyj´adˇrit prostˇrednictv´ım element´arn´ıch funkc´ı, nebo je jejich v´ypoˇcet pˇr´ıliˇs n´aroˇcn´y. V tomto pˇr´ıpadˇe je v´yhodn´e vyuˇz´ıt nˇekter´e z nume- rick´ych metod pro pˇribliˇzn´y v´ypoˇcet integr´alu. Danou metodu je vhodn´e zvolit tak, aby se vypoˇcten´a hodnota od skuteˇcn´e liˇsila co nejm´enˇe. Jindy je nezn´am´y spojit´y pr˚ubˇeh integrandu f (x) a jeho funkˇcn´ı hodnoty jsou zn´am´e pouze v urˇcit´ych bodech z´ıskan´ych napˇr´ıklad po vzorkov´an´ı. Numerick´y v´ypoˇcet integr´alu je nˇekdy naz´yv´an kvadratura. Toto oznaˇcen´ı se povˇetˇsinou v´aˇze k jednorozmˇern´ym integr´al˚um. Pro dvou a v´ıce rozmˇern´e in- tegr´aly je vhodnˇejˇs´ı uˇz´ıt n´azev kubatura, aˇckoliv pˇredchoz´ı n´azev b´yv´a pouˇz´ıv´an i pro v´ıcerozmˇernou integraci.

2.1.1 Kvadratura

Kvadratura je souhrnn´y n´azev pro metody, kter´e si kladou za c´ıl nal´ezt pˇribliˇznou plochu pod grafem funkce f (x) mezi hodnotami a a b. Pˇredpokl´adejme, ˇze chceme spoˇc´ıtat n´asleduj´ıc´ı rovnici:

I = Z b

a

f (x)dx (2.1)

Kvadratura je jednou z technik numerick´e matematiky, pro kterou m˚uˇze b´yt vzorec pˇreps´an jako:

I = Z b

a

f (x)dx ≈

n

X

i=1

wifi (2.2)

Kde fi je funkˇcn´ı hodnota funkce f (x) v bodˇe xi a wi je v´aha pro dan´y uzel, kter´a z´avis´ı na konkr´etn´ım kvadraturn´ım pravidlu pouˇzit´em pro v´ypoˇcet. Metod numerick´e in- tegrace existuje velk´e mnoˇzstv´ı. V´ybˇer spr´avn´e metody z´avis´ı pˇredevˇs´ım na poˇzadovan´e pˇresnosti ˇreˇsen´ı a ˇcasov´e n´aroˇcnosti v´ypoˇctu. Vˇsechny kvadraturn´ı pravidla jsou odvo- zen´e z interpolace dan´eho integrandu polynomem. Z tohoto d˚uvodu dan´e metody pracuj´ı nejl´epe, pokud dan´a funkce fi m˚uˇze b´yt aproximov´ana polynomem. Uk´aˇzeme si dva typy kvadraturn´ıch vzorc˚u.

3

(14)

Prvn´ı jsou Newton-Cotesovy vzorce s ekvidistantn´ım dˇelen´ım - vˇsechny integraˇcn´ı body jsou od sebe stejnˇe vzd´aleny s krokem h. Hlavn´ı v´yhoda tˇechto metod se ukazuje aˇz pˇri implementaci na v´ypoˇcetn´ı technice. Pˇredpokl´adejme, ˇze chceme spoˇc´ıtat integr´al z polynomu druh´eho stupnˇe P2(x).

Z b a

f (x)dx ≈ Z b

a

P2(x)dx (2.3)

Mus´ıme pouˇz´ıt takov´y integraˇcn´ı vzorec, kter´y je nejm´enˇe druh´eho ˇr´adu. Pro Newton- Cotesovu kvadraturu zjist´ıme poˇcet integraˇcn´ıch bod˚u (= 3) a v´ahov´e koeficienty v tˇechto bodech. Rozm´ıstˇen´ı bod˚u bude x0 = a, x1 = a+b2 , x2 = b. Prvn´ı a posledn´ı body jsou vˇzdy z´aroveˇn hranicemi intervalu. Body x0, x1, x2 rozdˇeluj´ı dom´enu na dvˇe ˇc´asti o d´elce kroku h. Uˇzit´ım Lagrangeova interpolaˇcn´ıho polynomu z´ısk´ame polynom proch´azej´ıc´ım vˇsemi body na intervalu ha, b i. A polynom P2(x) m˚uˇzeme zapsat jako:

P2(x) = f0L0(x) + f1L1(x) + f2L2(x) (2.4) Pot´e aproximaˇcn´ı integr´al lze n´asledovnˇe pˇrepsat:

Z b a

P2(x)dx = Z b

a

(f0L0(x) + f1L1(x) + f2L2(x))dx =

= f0 Z b

a

L0(x)dx + f1 Z b

a

L1(x)dx + f2 Z b

a

L2(x)dx

Nyn´ı jiˇz m´a prav´a strana kvadraturn´ı formu jako rovnice 2.2. V´ahov´e koeficienty nez´avis´ı na funkˇcn´ıch hodnot´ach. Takov´eto tˇr´ıbodov´e integraˇcn´ı pravidlo je zn´am´e jako Simpso- nova metoda:

Z b a

f (x)dx ≈ h

6(f0+ 4f1+ f2) (2.5)

Druh´ym integraˇcn´ım pravidlem jsou Gaussovy kvadraturn´ı vzorce. Pˇri konstrukci Simpsonovy metody nen´ı br´an ohled na vhodn´e rozm´ıstˇen´ı integraˇcn´ıch bod˚u. Jed- noduˇse se zaˇcalo s ekvidistantn´ım dˇelen´ım, kter´e pˇrin´aˇs´ı velk´e v´yhody pˇri v´ypoˇctech na poˇc´ıtaˇc´ıch. Urˇcit pˇresnou polohu nov´eho integraˇcn´ıho bodu je snadn´e a pˇresn´e. Ovˇsem tak´e velmi rychle roste ˇr´ad metody a s n´ım poˇcet integraˇcn´ıch bod˚u. Z pohledu poˇctu integraˇcn´ıch bod˚u tedy urˇcitˇe dobr´e nejsou. Chceme-li spoˇc´ıtat integr´al s co nejmenˇs´ım poˇctem vyˇc´ıslen´ı funkce f (x). Snaˇz´ıme se volit optim´aln´ı polohu bod˚u xi s v´ahov´ymi koe- ficienty wi. S Newton-Cotesov´ymi kvadraturn´ı vzorci dostaneme pˇresn´y v´ysledek, pokud je polynom jenˇz integrujeme ˇr´adu n, zat´ımco s Gaussov´ymi obdrˇz´ıme pˇresnou hodnotu pro polynom ˇr´adu 2n − 1. Pˇredpis Gaussovy kvadratury pro referenˇcn´ı interval h−1, 1 i:

I = Z 1

−1

f (x)dx ≈

n

X

i=1

wif (xi) (2.6)

Pˇri uˇzit´ı t´eto integrace napˇr´ıklad na poˇc´ıtaˇci se rozm´ıstˇen´ı bod˚u ani v´ahy jiˇz neodvozuj´ı, ale vyuˇz´ıv´a se tabulkov´ych hodnot pro referenˇcn´ı dom´eny.

(15)

KAPITOLA 2. TEORIE 5

Je nutn´e se jeˇstˇe zm´ınit o chybˇe pˇresnoti numerick´ych kvadraturn´ıch metod. Oznaˇcme numerickou kvadraturu integr´alu jako N a chybu integrace jako E. Pˇresn´a hodnota in- tegr´alu I je:

I = N + E (2.7)

Napˇr´ıklad pro lichobˇeˇzn´ıkovou metodu lze chybu E vyj´adˇrit jako:

E = −b − a

12 f00(η)h2 (2.8)

Kde f00(η) znaˇc´ı druhou derivaci integrovan´e funkce f v bl´ıˇze nespecifikovan´em bodˇe η intervalu

h a, b i

. Lichobˇeˇzn´ıkov´a metoda poskytuje pˇresn´y v´ysledek pro line´arn´ı funkce, kter´e maj´ı druhou derivaci nulovou.

2.1.2 Kubatura

Naproti tomu kubatura se zaob´ır´a numerickou aproximac´ı integr´al˚u, kde vystupuj´ı mi- nim´alnˇe dvˇe promˇenn´e x, y. Pˇrej´ıt z jednoho rozmˇeru do v´ıcerozmˇern´eho prostˇred´ı nen´ı v˚ubec jednoduch´e. Zat´ımco v pˇredchoz´ım pˇr´ıpadu byla integraˇcn´ı oblast vytyˇcen´a pouze dvˇema hodnotami, kter´e vymezovaly oblast v´ypoˇctu na pouhou ´useˇcku, naproti tomu rozmanitost moˇzn´ych integraˇcn´ıch oblast´ı pro d-dimenzion´aln´ı funkce m˚uˇze b´yt pˇr´ımo skliˇcuj´ıc´ı. Aby bylo v˚ubec moˇzn´e ˇreˇsit takto rozs´ahl´e probl´emy, je nutn´e tuto rozmani- tost integraˇcn´ıch oblast´ı sn´ıˇzit. Pro tento ´uˇcel se vyuˇz´ıv´a pˇr´ıstup, naz´yvan´y diskretizace modelu. Coˇz je v podstatˇe aproximace modelu koneˇcn´ym poˇctem jednoduˇsˇs´ıch prvku, respektive uzlov´ych bod˚u. A na takto diskretizovan´e oblasti prov´adˇet v´ypoˇcty pro kaˇzd´y element (povrchu, objemu) samostatnˇe.

Obr´azek 2.1: Diskretizovan´a oblast ve dvou-dimenzion´aln´ım prostoru

(16)

Napˇr´ıklad integr´al pˇres oblast Ω na obr´azku 2.1 m˚uˇze b´yt relativnˇe lehko vypoˇcten jako souˇcet hodnot vˇsech integr´al˚u pˇres jednotliv´e diskretizovan´e oblasti Ωe.

I = Z Z

f (x, y)dxdy ≈ X

i

Z Z

e

f (x, y)dxdy (2.9)

Ovˇsem takov´yto pˇr´ıstup zan´aˇs´ı do v´ypoˇctu dalˇs´ı moˇzn´e odchylky od spr´avn´eho v´ysledku. Kromˇe chyby dan´e integraˇcn´ı metodou a chyby vznikl´e zaokrouhlov´an´ım tu vznik´a nov´a chyba, kter´a uˇz m˚uˇze b´yt patrn´a z obr´azku 2.1. Rozdˇelen´ım dan´e kompliko- van´e oblasti na samostatn´e a jednoduˇsˇs´ı celky se dopouˇst´ıme dalˇs´ıho zaokrouhlov´an´ı. Je patrn´e, ˇze s t´ımto pˇr´ıstupem neobs´ahneme ´uplnˇe pˇresnˇe hranice p˚uvodn´ı oblasti. Naˇstˇest´ı v dneˇsn´ı dobˇe n´am v´ykon v´ypoˇcetn´ı techniky umoˇzˇnuje prov´est diskretizaci tak jemnou, abychom se drˇzeli ve velmi sluˇsn´ych mez´ıch pˇresnosti.

Nyn´ı si pˇredstav´ıme trochu bl´ıˇze ony jednotliv´e (geometrick´e) elementy, ze kter´ych dok´aˇzeme sloˇzit, ˇci alespoˇn se velmi pˇribl´ıˇzit k libovoln´ym tvar˚um v praxi. N´asleduj´ıc´ı pˇrehled na obr´azku 2.2 zobrazuje sedm nejˇcastˇeji pouˇz´ıvan´ych element˚u v praxi. Pˇriˇcemˇz tato pr´ace se zamˇeˇruje pouze na ´utvary oznaˇcovan´e jako n-simplex 1 (jmenovitˇe ´useˇcka, troj´uheln´ık a ˇctyˇrstˇen). ´Uvaha je n´asleduj´ıc´ı - libovoln´y geometrick´y objekt je moˇzn´e sloˇzit pr´avˇe ze simplex˚u.

Obr´azek 2.2: Sedm nejv´yznamnˇejˇs´ıch geometrick´ych element˚u pro nume- rick´e integrov´an´ı

Pro efektivn´ı pr´aci s jednoduch´ymi geometrick´ymi objektym jako jsou troj´uheln´ık a tetraedr je v´yhodnˇejˇs´ı pracovat v jin´em souˇradnicov´em syst´emu nˇeˇz v kart´ezsk´em. Oba tyto objekty b´yvaj´ı obecnˇe popisov´any pomoc´ı vrchol˚u. Coˇz vede k myˇslence jednotliv´e

1Pojmenov´an´ı simplex je odvozeno z anglick´eho

the simplest“, pˇreloˇzeno do ˇceˇstiny - nejjednoduˇs´ı.

Jako nejjednoduˇs´ı geometrick´y ´utvar v dan´e dimenzi prostoru. Napˇr´ıklad 0-simplex tvoˇr´ı bod, 1-simplex redstavuje ´useˇcku, 2-simplex troj´uheln´ık a 3-simplex ˇctyˇrstˇen.

(17)

KAPITOLA 2. TEORIE 7

integraˇcn´ı body popisovat evaluaˇcn´ımi hodnotami (ζ1, ζ2, ... ζn). Pot´e se kvadraturn´ı forma rovnice 2.2 pro integrov´an´ı pˇres oblast troj´uheln´ıku d´a pˇrepsat:

I = Z Z

e

f (x, y)dxdy ≈ A

n

X

i=1

Wif (ζ1i, ζ2i, ζ3i) (2.10)

Kde (ζ1i, ζ2i, ζ3i) jsou souˇradnice evaluaˇcn´ıho bodu i a A je obsah troj´uheln´ıku. Obdobnˇe je pˇreps´ana t´eˇz kvadraturn´ı forma pro tetraedr:

I = Z Z Z

e

f (x, y, z)dxdydz ≈ V

n

X

i=1

Wif (ζ1i, ζ2i, ζ3i, ζ4i) (2.11)

Kde V je objem elementu a (ζ1i, ζ2i, ζ3i, ζ4i) jsou barycentrick´e souˇradnice evaluaˇcn´ıho bodu i.

2.1.3 Integraˇ cn´ı body - kart´ ezsk´ y souˇ radn´ y syst´ em

V kart´ezsk´em souˇradn´em syst´emu jsou integraˇcn´ı body zad´any na referenˇcn´ı oblasti (intervalu, dom´enˇe). Abychom mohli integrovat funkci zadanou na libovoln´em inter- valu mus´ıme si body z referenˇcn´ı oblasti transformovat na poˇzadovanou obecnou oblast.

Pro tuto techniku se vˇzil term´ın pˇrejat´y z angliˇctiny - mapov´ani (mapping). Pro vˇetˇs´ı n´azornost opust´ıme teoretick´y n-rozmˇern´y prostor a techniky mapov´ani budou demon- strov´any jen na simplexu ve dvou-dimenzion´aln´ım prostoru, ˇcili na troj´uheln´ıku. Pot´e by nikomu nemˇelo dˇelat pot´ıˇze si pˇredstavit, jak by transformace vypadala napˇr´ıklad pro ˇ

ctverec, nebo tetraedr. Pouˇzit´e vztahy jsou poˇr´ad tyt´eˇz, jen se mˇen´ı rozmˇery vektor˚u a matic.

Referenˇcn´ı troj´uheln´ık Tref se nejˇcastˇeji definuje v mez´ıch {(0, 0), (1, 0), (0, 1)}.

Pˇrid´ame jeˇstˇe jedno zjednoduˇsen´ı ´ulohy. Omez´ıme poˇcet integraˇcn´ıch bod˚u v refe- renˇcn´ı oblasti pouze na jeden bod ~r se sloˇzkami (r, s). D´ale zavedeme symboly pro obecn´y troj´uheln´ık T a pro obraz bodu ~r. Tento obraz bude znaˇcen jako vektor ~x se sloˇzkami (x, y). Vztahy transformace tohoto bodu z Tref na T jsou popsan´y n´ıˇze, viz rovnice 2.12. Inverzn´ı transformace z troj´uheln´ıka obecn´eho na troj´uheln´ık referenˇcn´ı jiˇz nen´ı v t´eto pr´aci upotˇrebena, proto zde nebude ani rozeps´ana.

(18)

Obr´azek 2.3: Mapov´an´ı bodu z referenˇcn´ıho troj´uheln´ıku na troj´uheln´ık obecn´y

Transformaˇcn´ı funkce bodu z referenˇcn´ıho troj´uheln´ıku na troj´uheln´ık obecn´y:

A · ~r + ~c = ~x (2.12)

 ax− cx bx− cx ay− cy by− cx



·

 r s

 +

 cx cy



= ~x (2.13)

2.1.4 Integraˇ cn´ı body - barycentrick´ y souˇ radn´ y syst´ em

V t´eto soustavˇe integraˇcn´ı body nejsou zad´any na ˇz´adn´em referenˇcn´ım ´utvaru, ale jako tzv. barycentery (stˇredy veˇsker´e

”masy“, kter´a tvoˇr´ı pˇredmˇet). Hledan´y integraˇcn´ı bod ~x je specifikov´an vektorem evaluaˇcn´ıch hodnot (ζ1, ζ2, ... ζn) a souˇradnicemi vrchol˚u geometrick´eho ´utvaru. Rovnice pro v´ypoˇcet nov´eho integraˇcn´ıho bodu:

 ax bx cx ay by cy



·

 ζ1 ζ2 ζ3

= ~x (2.14)

2.2 Obyˇ cejn´ e diferenci´ aln´ı rovnice

Pomoc´ı diferenci´aln´ıch rovnic je moˇzn´e popsat velk´e mnoˇzstv´ı dˇej˚u, na kter´e ve svˇetˇe nar´aˇz´ıme. Pravdˇepodobnˇe diferenci´aln´ı rovnice pˇredstavuj´ı jeden z nejd˚uleˇzitˇejˇs´ıch mate- matick´ych n´astroj˚u pouˇz´ıvan´ych pˇri modelov´an´ı fyzik´aln´ıch a biologick´ych proces˚u. Po- zornosti se tˇeˇs´ı i mimo okruh v´yzkumu, ˇci ˇcistˇe technick´ych obor˚u. Velk´emu uplatnˇen´ı se jim dost´av´a i ve zcela odliˇsn´ych odvˇetv´ıch jako jsou ekonomika, psychologie, ˇci l´ekaˇrstv´ı a mnoha dalˇs´ıch.

Obyˇcejn´e diferenci´aln´ı rovnice (ODR, anglicky ODE z Ordinary Differential Equati- ons) jsou rovnice s jednou nez´avislou promˇennou t, ve kter´ych se jako nezn´am´a vyskytuje

(19)

KAPITOLA 2. TEORIE 9

funkce y a libovoln´y poˇcet jejich derivac´ı (y0, y00, ..., y(n−1), yn). Podle v´yˇse ˇc´ısla n pot´e hovoˇr´ıme o tvz ˇr´adu diferenci´aln´ı rovnice.

Diferenci´aln´ı rovnice prvn´ıho ˇr´adu s nezn´amou funkc´ı y = y(t) m˚uˇze b´yt zaps´ana a ˇreˇsena jak v implicitn´ım tvaru F (t, y, y0) = 0. Tak tak´e v explicitn´ım tvaru ve vztahu k derivovan´e funkci, kter´y je pro technick´e obory v´ıce vyuˇz´ıvan´y. Proto nad´ale budeme uvaˇzovat pouze tento tvar diferenci´aln´ı rovnice v jej´ım explicitn´ım vyj´adˇren´ı:

y0 = f (t, y(t)) (2.15)

Daleko frekventovanˇejˇs´ım pˇr´ıpadem neˇz rovnice prvn´ıho ˇr´adu, b´yvaj´ı rovnice ˇr´adu druh´eho (a vyˇsˇs´ıch). Takov´e pˇr´ıpady ˇreˇs´ıme pˇreveden´ım dan´e rovnice o ˇr´adu n na n di- ferenci´aln´ıch rovnic prvn´ıho ˇr´adu:

y10 = f1(t, y1(t))

y20 = f2(t, y2(t)) (2.16)

...

yn0 = fn(t, yn(t))

Od tohoto okamˇziku budeme implicitnˇe uvaˇzovat pod z´apisem y(t) nikoliv jednu nezn´amou funkci, ale vektor nezn´am´ych funkc´ı.

2.2.1 Ulohy s poˇ ´ c´ ateˇ cn´ımi podm´ınkami

V literatuˇre tak´e m˚uˇzeme setk´avat s oznaˇcen´ım tˇechto ´uloh jako IVP. Jedn´a se o zkratku z anglick´eho n´azvu Initial Value Problem. Pˇri numerick´em ˇreˇsen´ı diferenci´aln´ı rovnice prvn´ıho ˇr´adu, hled´ame funkci, kter´a splˇnuje rovnici 2.15. Funkce, kter´a vyhovuje t´eto rovnici, je d´ana smˇerov´ym polem2.

Aby se mnoˇzstv´ı moˇzn´ych ˇreˇsen´ı omezilo, mus´ı se stanovit poˇc´ateˇcn´ı podm´ınky ˇreˇsen´e ´ulohy. To znamen´a pˇriˇradit kaˇzd´e rovnici vektoru y hodnotu v jednom bodu t0. Vyˇreˇsen´ım ´ulohy budeme rozumˇet naj´ıt takov´e ˇreˇsen´ı, kter´e vyhovuje dan´ym poˇc´ateˇcn´ım podm´ınk´am. ´Uloha s poˇc´ateˇcn´ı podm´ınkou y0 m´a n´asleduj´ıc´ı tvar:

yt0 = f (t, y(t)), t ∈ [a, b], y0 = y(t0) (2.17)

2.2.2 Tuh´ e (stiff ) rovnice

Obyˇcejnou diferenci´aln´ı rovnici prohl´as´ıme jako stiff, pokud v celkov´em pohledu je ply- nule se mˇen´ıc´ı, ale obˇcas se vyskytnou velk´e a rychl´e zmˇeny. Takˇze numerick´a metoda mus´ı m´ıt malou velikost kroku, aby tyto obˇcasn´e zmˇeny pokryla a dodala uspokojiv´ych v´ysledk˚u. Jedn´a se o z´aleˇzitost efektivnosti. Pokud by n´as nezaj´ımalo, jak dlouho bude

2Reˇˇ sen´ı diferenci´aln´ı rovnice prvn´ıho ˇadu m´a geometrick´y v´yznam. Uvedenou rovnic´ı je d´ano smˇerov´e pole, kter´e kaˇzd´emu bodu pˇriˇrazuje

smˇer“ (kr´atkou ´useˇcku - smˇernici). Vyˇreˇsit diferenci´aln´ı rovnici s poˇateˇcn´ımi podm´ınkami tedy znamen´a naj´ıt takovou kˇrivku, kter´a bude v kaˇzd´em sv´em bodˇe shodn´a se svoj´ı smˇernic´ı.

(20)

v´ypoˇcet prob´ıhat, nebylo by zapotˇreb´ı se t´ımto v˚ubec zab´yvat a rovnice by se mohly ˇreˇsit libovolnou metodou. To vˇsak v praxi nejde a mus´ıme poˇc´ıtat s krokem rozumn´e velikosti.

Je tedy nutn´e se zaob´ırat stabilitou metody. Dokonce i kdyˇz ODR je stabiln´ı, jej´ı nu- merick´e ˇreˇsen´ı m˚uˇze b´yt nestabiln´ı. Jednoduch´y pˇr´ıklad tohoto jevu je n´asleduj´ıc´ı IVP :

yt0 = −20yt, y0 = 1

yt = e−20t

Obr´azek 2.4: ˇReˇsen´ı Eulerovou metodou s pˇr´ıliˇs velk´ym krokem

Pˇresnost numerick´eho ˇreˇsen´ı diferenci´aln´ı rovnice se odv´ıj´ı hlavnˇe od velikosti kroku h.

Aby nalezen´e pˇribliˇzn´e (odhadovan´e) ˇreˇsen´ı odpov´ıdalo analytick´emu (pˇresn´emu) ˇreˇsen´ı, mus´ı dan´a metoda splˇnovat podm´ınku konvergence. Pˇresnost numerick´eho ˇreˇsen´ı roste nepˇr´ımo ´umˇernˇe s velikost´ı kroku h.

2.2.3 Jednokrokov´ e metody

Z´akladn´ım principem numerick´eho ˇreˇsen´ı ODR je diskretizace podle nez´avisl´e promˇenn´e t, ˇ

c´ımˇz si stanov´ıme tzv. uzly s´ıtˇe a pomoc´ı hodnot y0(t0), y1(t1), y2(t2), ...yn(tn) a v tˇechto uzlech se snaˇz´ıme aproximovat pˇresn´e ˇreˇsen´ı ´ulohy. Vzd´alenost mezi jednotliv´ymi uzly se naz´yv´a krok metody a je vyj´adˇrena n´asleduj´ıc´ı rovnic´ı:

hi = ti+1− ti (2.20)

Z´akladn´ı jednokrokov´e metody jako je metoda Eulerova, nebo klasick´a Runge-Kuttova metoda maj´ı rozloˇzen´ı s´ıtˇe ekvidistantn´ı (krok h je konstantn´ı). Ovˇsem neplat´ı to obecnˇe pro jednokrokov´e metody. Komplikovanˇejˇs´ı metody si velikost kroku koriguj´ı podle odchylky od poˇzadovan´e pˇresnosti. Pod pojmem obecn´a jednokrokov´a metoda se skr´yv´a takov´y algoritmus pro ˇreˇseni ODR s poˇc´ateˇcn´ımi podm´ınkami 2.17, kter´y najde

(21)

KAPITOLA 2. TEORIE 11

ˇreˇsen´ı yn+1 v bodˇe tn+1 na z´akladˇe znalosti pouze pˇredchoz´ıch stav˚u yn,tn a velikosti kroku hn. Nejjednoduˇsˇs´ım pˇredstavitelem jednokrokov´ych metod je Eulerova metoda.

Pˇredpis pro Eulerovu metodu je:

yn+1= yn+ hf (tn, yn) (2.21) Geometrick´y princip Eulerovy metody je n´asleduj´ıc´ı. Nejdˇr´ıve dosad´ıme hodnoty t0(x) a y0(y) do prav´e strany rovnice y00 = f (t0, y0) a vypoˇcteme prvn´ı derivaci, nebo-li smˇernici teˇcny. Po t´eto teˇcnˇe se pohybujeme, dokud nenajdeme pr˚useˇc´ık dan´e teˇcny s kolmic´ı v bodˇe t1(x + h). T´ımto je dokonˇcen prvn´ı krok metody a m˚uˇze zaˇc´ıt druh´y. Pokud by odchylka od analytick´eho ˇreˇsen´ı byla pˇr´ıliˇs velk´a, mus´ıme zjemnit s´ıt’, to jest zkr´atit trv´an´ı kroku h (ˇcasto b´yv´a oznaˇcov´ana velikost kroku ∆t). Tento princip je tak´e zn´azornˇen graficky na obr´azku 2.5.

Obr´azek 2.5: Princip Eulerovy metody

Pro praktick´e uˇzit´ı Eulerovu metodu neni vhodn´e pouˇz´ıvat, protoˇze jej´ı v´ypoˇcetn´ı n´aroˇcnost (z hlediska ˇcasu) pro dosaˇzen´ı srovnateln´e pˇresnosti s ostatn´ımi metodami je pˇr´ıliˇs velk´a.

2.2.4 Metody explicitn´ı vs. implicitn´ı

Pokud m´a ˇreˇsen´a rovnice tvar:

yk = f (t, y, y0, y00, · · · , yk−1) (2.22) jedn´a se o jej´ı explicitn´ı vyj´adˇren´ı. Implicitn´ı forma tyt´eˇz rovnice:

f (t, y, y0, y00, · · · , yk−1, yk) = 0 (2.23) Explicitn´ı metody vypoˇc´ıt´avaj´ı nov´y stav syst´emu pouze z hodnot souˇcasn´ych. Naproti tomu implicitn´ı metody k nalezen´ı nov´eho ˇreˇsen´ı vyuˇz´ıvaj´ı jak souˇcasn´ych tak i jednoho

(22)

stavu budouc´ıho, kter´y se pr´avˇe pokouˇsej´ı stanovit. Vypl´yv´a to z n´asleduj´ıc´ıho, zat´ımco explicitn´ı metody mus´ı ˇreˇsit rovnici:

yn+1= F (yn) (2.24)

tak pˇredpis pro implicitn´ı metody je:

G(yn+1, F (yn)) = 0 (2.25)

Implicitn´ı metody k z´ısk´an´ı yn+1 vyˇzaduj´ı zvl´aˇstn´ı v´ypoˇcet (ˇreˇsen´ı v´yˇse uveden´e rovnice) a m˚uˇze b´yt obt´ıˇznˇejˇs´ı je naimplementovat. Implicitn´ı metody jsou pouˇz´ıv´any, protoˇze mnoho ˇreˇsen´ych probl´em˚u je stiff, pro kter´e pouˇzit´ı explicitn´ı metody vyˇzaduje velmi kr´atk´y krok h, aby chyba v´ypoˇctu z˚ustala v pˇrijateln´ych mez´ıch (viz kapitola 2.2.2).

V pˇredeˇsl´e sekci byla pops´ana Eulerova metoda v jej´ım explicitn´ım vyj´adˇren´ı. A jako vˇetˇsina metod, m´a Eulerova metoda tak´e implicitn´ı vyj´adˇren´ı, tvz. zpˇetn´a (backward) Eulerova metoda.

yn+1 = yn+ hf (tn+1, yn+1) (2.26) Zde, pˇri pohledu na z´avorku funkce f , je vidˇet rozd´ıl mezi implicitn´ımi a explicitn´ımi metodami nejzˇretelnˇeji. Implicitn´ı metody do sv´eho v´ypoˇctu zahrnuj´ı i znalost v´ysledn´eho ˇreˇsen´ı, jenˇz se sami snaˇz´ı vypoˇc´ıtat. Z toho vypl´yv´a jejich ´uloha pˇri v´ypoˇctech. Zpˇresˇnuj´ı nalezen´e ˇreˇsen´ı.

2.2.5 Metody Runge-Kutta

Patˇr´ı do rodiny jednokrokov´ych metod. Hlavn´ı rozd´ıl mezi Runge-Kuttov´ymi metodami vyˇsˇs´ıch ˇr´ad˚u a metodou Eulerovou je v mnoˇzstv´ı meziv´ypoˇct˚u neˇz se pˇrejde z uzlu t0do t1. Eulerova metoda se ˇrad´ı do rodiny Runge-Kuttov´ych metod o prvn´ım ˇr´adu. Zat´ımco Eulerovˇe metodˇe staˇc´ı vyˇc´ıslit funkci jednou, Runge-Kuttovy metody mus´ı funkci vyˇc´ıslit v´ıcekr´at v dalˇs´ıch pomocn´ych bodech mezi sousedn´ımi uzly (t0 a t1) v s´ıti. A pot´e kaˇzdou vypoˇctenou hodnotu vyn´asobit v´ahov´ymi koeficienty.

N´asleduje uk´azka nejpopul´arnˇejˇs´ı Runge-Kuttovy metody vyˇsˇs´ıho ˇr´adu tzv.

”stan- dardn´ı“ Runge-Kuttovy metody ˇctvrt´eho ˇr´adu (RK4). Je d´ana poˇc´ateˇcn´ı ´uloha v bodˇe tn s v´ychoz´ı hodnotou yn a pomoc´ı ˇctyˇr mezikrok˚u dostaneme hodnoty koefici- ent˚u k1..4. N´aslednˇe koeficienty k1..4vyn´asob´ıme pˇr´ısluˇsn´ymi vahami a dostaneme pˇribliˇzn´e ˇreˇsen´ı yn+1 v tn+1.

k1 = f (tn, yn), k2 = f (tn+ h2

2, yn+ k1

2 ), (2.27)

k3 = f (tn+ h2

2, yn+ k2 2 ), k4 = f (tn+ hn, yn+ k3).

yn+1 = yn+ hn· (k1 6 + k2

3 + k3 3 + k4

6) (2.28)

(23)

KAPITOLA 2. TEORIE 13

Metody vyˇsˇs´ıch ˇr´ad˚u neˇz ˇctvrt´eho nejsou tak ˇcasto uˇz´ıv´any pro jejich potˇrebu v´ıce v´ypoˇcetn´ıch operac´ı mezi dvˇema uzly. Naproti tomu jsou vˇsak pˇresnˇejˇs´ı a je moˇzn´e zvo- lit delˇs´ı krok neˇz pˇri uˇzit´ı metod niˇzˇs´ıch ˇr´ad˚u, coˇz m˚uˇze jejich nev´yhody kompenzovat i pˇrev´aˇzit. Obecnˇe se data potˇrebn´a pro R-K metody uv´adˇej´ı ve strukturovan´e tabulce, zn´am´e jako Butcher tableau (pojmenovan´e po matematikovi - John C. Butcher).

Tabulka 2.1: Butcher tableau pro klasickou Runge-Kuttovu metodu 0

1/2 1/2

1/2 0 1/2

1 0 0 1

1/6 1/3 1/3 1/6

Tabulka 2.2: Butcher tableau pro obecnou explicitn´ı Runge-Kuttovu me- todu

0 c2 a21 c3 a31 a32

... ... . ..

cs as1 as2 · · · as,s−1 b1 b2 · · · bs−1 bs

V´ypoˇcet hodnoty yn+1uˇzit´ım Butcher tableau vypad´a n´asledovnˇe. Prvnˇe se vypoˇc´ıtaj´ı koeficienty ki a ty se n´aslednˇe vyn´asob´ı pˇr´ısluˇsn´ymi v´ahami, zadan´ymi jako vektor b.

ki = f · (tn+ hncn, yn+ hn

i−1

X

j=1

aijkj) (2.29)

yn+1 = yn+ hn s

X

i=1

biki (2.30)

Doposud byla ˇreˇc jen o metod´ach s pevn´ym integraˇcn´ım krokem. Pˇri zmˇenˇe velikosti kroku se mus´ı pouˇz´ıt dvˇe R-K metody r˚uzn´eho ˇr´adu. ˇC´ımˇz z´ısk´ame jak´ysi odhad chyby a dle nˇeho m˚uˇzeme korigovat n´asleduj´ıc´ı pr˚ubˇeh v´ypoˇctu.

Vnoˇren´e (embedded) Runge-Kutta metody pˇredstavuj´ı efektivnˇejˇs´ı pˇr´ıstup.

Efektivnˇejˇs´ı v tom smyslu, ˇze nejsou potˇreba dvˇe samostatn´e metody. Napˇr´ıklad nen´ı nutn´e koeficienty ki poˇc´ıtat dvakr´at. Z´ısk´an´ı dvou nov´ych ˇreˇsen´ı stoj´ı m´enˇe v´ypoˇcetn´ıch sil.

(24)

Tabulka 2.3: Butcher tableau obecnˇe pro vnoˇren´e Runge-Kuttovy metody 0

c2 a21 c3 a31 a32

... ... . ..

cs as1 as2 · · · as,s−1 b1 b2 · · · bs−1 bs ˆb1 ˆb2 · · · ˆbs−1 ˆbs

Takˇze na m´ısto dvou tabulek konstant postaˇc´ı jedna tabulka s pˇridan´ym vektorem koeficient˚u ˆb, jak je moˇzn´e vidˇet v tabulce 2.3. Zpravidla se jedn´a kombinaci dvou me- tod, kter´e se liˇs´ı ˇr´adem o jeden stupeˇn. Druh´y odhad ˇreˇsen´ı ˆyn+1 se z´ısk´a z n´asleduj´ıc´ı rovnice 2.31, kde pouˇzit´e koeficienty ki jsou ty sam´e jako v rovnici 2.30.

ˆ

yn+1 = yn+ hn s

X

i=1

ˆbiki (2.31)

2.2.6 V´ıcekrokov´ e metody

V´ıcekrokov´e metody pˇri stanoven´ı nov´e hodnoty yn+1 vych´az´ı ze znalosti v´ıce pˇredchoz´ıch stav˚u yn, yn−1, yn−2, . . . yn−k. Pro z´ısk´ani tˇechto hodnot je moˇzn´e bud’to vyuˇz´ıt nˇejak´e jednokrokov´e metody, nebo dodat exaktn´ı hodnoty pˇr´ımo (napˇr. z´ıskan´e mˇeˇren´ım). Tato f´aze pˇred vlastn´ım uˇzit´ım v´ıcekrokov´e metody se oznaˇcuje jako nastartov´an´ı. A od tohoto vzeˇsla tendence naz´yvat jednokrokov´e metody jako metody startovac´ı (samostartovac´ı).

Nejˇcastˇeji se vyuˇz´ıvaj´ı metody Runge-Kutta. Typick´ym pˇredstavitelem v´ıcekrokov´ych metod jsou metody Adamsovy, viz obr´azek 2.6

Obr´azek 2.6: Princip Adams-Bashforthovy metody

(25)

KAPITOLA 2. TEORIE 15

Adamsovy metody m˚uˇzeme rozdˇelit do dvou skupin, na:

• Explicitn´ı metody, kter´e jsou naz´yv´any Adams-Bashforthovy AB).

• Implicitn´ı metody, jenˇz nesou pojmenov´an´ı Adams-Moultonovy (AM).

Prvn´ı ˇr´ad Adams-Bashforthov´ych a Adams-Moultonov´ych metod jsou obdobn´e s ex- plicitn´ı a implicitn´ı formou Eulerovy metody. Adams-Bashforthovu metodu z´ısk´ame in- terpolac´ı funkce f skrz pˇredchoz´ıch k bod˚u, jmenovitˇe tn, tn−1, ..tn−k. Pˇr´ıklad Adams- Bashforthovy metody ˇctvrt´eho ˇr´adu:

yn+1 = yn+ h

24(55f (yn, tn) − 59f (yn−1, tn−1) + 37f (yn−2, tn−2) − 9f (yn−3, tn−3) (2.32)

Tabulka 2.4: Koeficienty pro Adams-Bashforthovy metody od prvn´ıho do ˇsest´eho ˇr´adu

p k j → 1 2 3 4 5 6 Cp+1

1 1 βj 1 12

2 2 2βj 3 −1 125

3 3 12βj 23 −16 5 38

4 4 24βj 55 −59 37 −9 251720

5 5 720βj 1901 −2774 2616 −1274 251 28895

6 6 1440βj 4277 −7923 9982 −7298 2877 −475 1908760480

Postup vedouc´ı ke k-krokov´e Adams-Moultonovˇe metodˇe je odvozen podobnˇe jako u explicitn´ıch metod. Rozd´ıl tu je ten, ˇze interpolaˇcn´ı polynom je stupnˇe ≤ k a interpoluje funkci f v uzlu tn+1. Uk´azka Adams-Moultonovy metody ˇctvrt´eho ˇr´adu:

yn+1= yn+ h

24(9f (yn+1, tn+1) + 19f (yn, tn) − 5f (yn−1, tn−1) + f (yn−2, tn−2) (2.33)

Tabulka 2.5: Koeficienty pro Adams-Moultonovy metody od prvn´ıho do ˇsest´eho ˇr´adu

p k j → 1 2 3 4 5 6 Cp+1

1 1 βj 1 −12

2 1 2βj 1 1 −121

3 2 12βj 5 8 −1 −241

4 3 24βj 9 19 −5 1 −72019

5 4 720βj 251 646 −264 106 −19 −1603

6 5 1440βj 475 1427 −798 482 −173 27 −60480863

(26)

BDF (backward difference formula) metody jsou velmi popul´arn´ı pro tuh´e syst´emy (stiff). Charakteristick´ym rysem tˇechto metod je, ˇze vyhodnocen´ı funkce probˇehne pouze jednou na prav´em konci aktu´aln´ıho kroku, f (tn+1, yn+1). BDF metody jsou pouze implicitn´ıho tvaru. Mohou b´yt zaps´any ve formˇe, kde a0 = 1:

k

X

i=1

aiyn−i= h β0f (tn+1, yn+1) (2.34)

Tabulka 2.6: Koeficienty pro BFD metody od prvn´ıho do ˇsest´eho ˇr´adu

p k β0 α0 α1 α2 α3 α4 α5 α6

1 1 1 1 −1

2 2 23 1 −34 13

3 3 116 1 −1811 119112 4 4 1225 1 −4825 36251625 253

5 5 13760 1 −300137 300137200137 1377513712 6 6 14760 1 −360147 450147400147 22514714772 14710

2.2.7 Algoritmus prediktor-korektor

Algoritmus je tvoˇren dvojic´ı metod, kde prvn´ı metoda je explicitn´ı (prediktor) a druh´a metoda implicitn´ı (korektor). Velmi ˇcasto je tento pˇr´ıstup aplikov´an na Adamsovy me- tody. Nebot’ tento typ metod, jak ve sv´e implicitn´ı tak v explicitn´ı formˇe, m´a vˇzdy shodn´y poˇcet krok˚u pˇri stejn´e ´urovni ˇr´adu metody.

Prediktor jak uˇz n´azev napov´ıd´a, predikuje novou hodnotu v ˇcase tn+1. N´aslednˇe ko- rektor tuto hodnotu pˇreb´ır´a a provede zpˇresnˇen´ı predikovan´e hodnoty. Samozˇrejmˇe je zde nutn´e nejprve prediktor, jako v pˇredeˇsl´ych pˇr´ıpadech v´ıcekrokov´ych metod, vhodnˇe

”na- startovat“. Pro zachov´an´ı pˇresnosti je vhodn´e volit stejn´y ˇr´ad metody jak pro prediktor, korektor, tak i startovac´ı metodu.

Algoritmus v´ypoˇctu jednoho kroku m´a n´asledn´y pr˚ubˇeh. Na poˇc´atku v´ypoˇctu jsou zn´am´e hodnoty yn, yn−1, ..., yn−k a fn, fn−1, ..., fn−k, kter´e vstupuj´ı do iterace ˇcit´aj´ıc´ı tyto ˇ

ctyˇri kroky:

• Prediktorem odhadneme yn+10 .

• Vypoˇcteme fn+10 = f (xn+1, y0n+1).

• Korektor pomoc´ı fn+10 vypoˇcte yn+1.

• Nakonec se z´ısk´a zpˇresnˇen´y odhad nov´eho stavu fn+1= f (xn+1, yn+1).

(27)

Kapitola 3

Objektovˇ e orientovan´ y pˇ r´ıstup

Jedn´a se o co nejobecnˇejˇs´ı pˇr´ıstup k v´yvoji aplikac´ı, kter´y zahrnuje

”best practices“

t´emˇeˇr pro kaˇzdou ˇcinnost pˇri tvorbˇe SW, bez ohledu na to, jestli je ˇreˇc o anal´yze zad´an´ı, vlastn´ım programov´an´ı, nebo testov´an´ı. Pˇristoupit k objektovˇe orientovan´emu v´yvoji SW je vhodn´e zvl´aˇstˇe pokud se daj´ı pˇredpokl´ad´at budouc´ı zmˇeny v syst´emu. Softwarov´y syst´em by tedy mˇel b´yt snadno rozˇsiˇriteln´y a udrˇzovateln´y. V´yznam anal´yzy projektu se dost´av´a do popˇred´ı pˇred samotnou implementaci.

Z´akladn´ı myˇslenkou objektovˇe orientovan´eho pˇr´ıstupu v programov´an´ı je, ˇze funkce a ´udaje koluj´ıc´ı v syst´emu se staly metodami a vlastnostmi (atributy) jednotliv´ych ob- jekt˚u. Tedy funkce i data se jiˇz nenach´azej´ı

”volnˇe“ v programu jako v pˇr´ıpadˇe struk- tur´aln´ıho programov´an´ı, ale jsou v´az´any na objekty. Objektov´y pˇr´ıstup si klade za c´ıl simulovat chov´an´ı re´aln´eho svˇeta, v´ıce se pˇrizp˚usobit myˇslen´ı ˇclovˇeka. V re´aln´em svˇetˇe doch´az´ı neust´ale k interakc´ım mezi objekty. Tyto interakce mezi objekty z pohledu OOP ch´apeme jako komunikaci pˇres protokoly zpr´av.

Je d˚uleˇzit´e si uvˇedomit, ˇze pokud je pro tvorbu SW pouˇzit objektov´y programovac´ı jazyk, nemus´ı b´yt objektov´y i n´avrh aplikace. V tomto tzv. objektovˇe struktur´aln´ım pˇr´ıstupu k programov´an´ı aplikac´ı nejsou v´yˇse zm´ınˇen´e pˇredpoklady splnˇeny a z pohledu designu se jedn´a st´ale o struktur´aln´ı pˇr´ıstup. Je velmi d˚uleˇzit´e se nauˇcit pˇri programov´an´ı i objektovˇe myslet. Ovˇsem o ˇz´adn´em z pˇr´ıstup˚u k programov´an´ı nelze jasnˇe ˇr´ıci, zda je horˇs´ı nebo lepˇs´ı. Opravdu vˇzdy z´aleˇz´ı na konkr´etn´ım projektu.

Objektovˇe orientovan´y pˇr´ıstup k v´yvoji softwaru je v dneˇsn´ı dobˇe postaven na ˇctyˇrech z´akladn´ıch pil´ıˇr´ıch, kter´e budou v dalˇs´ıch podkapitol´ach v´ıce pˇribl´ıˇzeny. Techniky zahr- nut´e v objektovˇe orientovan´em pˇr´ıstupu jsou: anonymita klienta, ´urovnˇe abstrakce, UML a n´avrhov´e vzory.

3.1 Anonymita klienta

Klient vid´ı nab´ızen´e sluˇzby, ale nikdy nevid´ı vlastn´ı implementaci. Jinak ˇreˇceno, ob- jekty navenek zpˇr´ıstupˇnuj´ı pouze sv´e rozhran´ı, pomoc´ı kter´eho se s objektem pracuje.

Program´ator si pˇri pr´aci mus´ı b´yt vˇedom, ˇze pˇristupuj´ıc´ım klientem k jeho d´ılu m˚uˇze b´yt opravdu kdokoliv (= anonymn´ı klient). Z tohoto d˚uvodu je kladen velk´y d˚uraz na uzavˇrenou a konzistentn´ı implementaci. Zaj´ımav´e informace ohlednˇe tohoto t´ematu je moˇzn´e nal´ezt v ˇcl´anku Je tˇreba db´at na anonymitu klienta nebo ne? [8].

17

(28)

3.1.1 Programov´ an´ı proti rozhran´ı

Urˇcitˇe se nejedn´a o ˇz´adnou horkou novinku. Opravdu zkuˇsen´ı program´atoˇri toto vyuˇz´ıvali d´avno v dob´ach, kdy ani Java neexistovala. Rozletu se t´eto technice dostalo aˇz s jazyky vyˇsˇs´ı ´urovnˇe jako jsou napˇr´ıklad Java nebo C#.

uk´azka r o z d´ıl u p r o g r a m o v ´a n´ı p r o t i r o z h r a n´ı : I n t e r f a c e F u n c t i o n f c e = new F u n c t i o n ( ) ; a p r o t i i m p l e m e n t a c i :

F u n c t i o n f c e = new F u n c t i o n ( ) ;

Pokud v budoucnu bude potˇreba zmˇenit implementaˇcn´ı tˇr´ıdu, tak nov´a tˇr´ıda bude muset umˇet minim´alnˇe obslouˇzit stejn´e metody jako star´a. Zbytek programu (okol´ı tˇr´ıdy) bude moci z˚ustat nezmˇenˇen. Kdybychom programovali proti implementaci, tato tˇr´ıda by se objevovala i na lev´e stranˇe pˇriˇrazen´ı. Pˇri takov´eto zmˇenˇe by nemusela b´yt zaruˇcena soudruˇznost programu a t´ım cel´y projekt ohroˇzen.

Doporuˇcen´ı pro zv´yˇsen´ı pˇrehlednosti a to uv´adˇet n´azvy rozhran´ı p´ısmenem I (jako Interface) a n´azvy pro abstraktn´ı tˇr´ıdy slovem AbstractClass.

3.2 Urovnˇ ´ e abstrakce

Urovnˇ´ e abstrakce jednoduˇse znamen´a, ˇze na vyv´yjen´y software se m˚uˇzeme d´ıvat z r˚uzn´ych

´

urovn´ı nadhledu, kde kaˇzd´a takov´a ´uroveˇn zviditelˇnuje rozd´ıln´e mnoˇzstv´ı detail˚u, kter´e mus´ı v´ysledn´y SW obsahovat. Rozezn´avaj´ı se (minim´alnˇe) tˇri ´urovnˇe abstrakce:

• Nejvyˇsˇs´ı ´uroveˇn - analytick´e modelov´an´ı (nebo ve zkratce anal´yza).

• Design (neboli n´avrh).

• Nejniˇzˇs´ı ´uroveˇn - k´odov´an´ı, implementace a nasazen´ı.

Pˇri tvorbˇe aplikac´ı je vhodn´e zaˇc´ınat od ´urovnˇe nejvyˇsˇs´ı (t.j. analytick´eho modelov´an´ı) a postupnˇe, jak z´ısk´av´ame pˇredstavu o implementaci, sestupovat aˇz k vlastn´ı tvorbˇe SW (t.j. ´urovni nejniˇzˇs´ı). Peˇcliv´e rozvrˇzen´ı projektu m˚uˇze ´uˇsetˇrit spoustu ´usil´ı. Na kaˇzd´e ta- kov´eto ´urovni abstrakce se pohybuj´ı lid´e s rozd´ıln´ymi ´ukoly. Aby komunikace mezi tˇemito lidmi byla maxim´alnˇe efektivn´ı, byl vytvoˇren nov´y jazyk prostupuj´ıc´ı vˇsemi ´urovnˇemi.

Jedn´a se o jazyk UML.

3.3 UML

UML (Unified Modeling Language) je unifikovan´y modelovac´ı jazyk pro anal´yzu, specifi- kaci, vizualizaci a dokumentaci softwarov´ych projekt˚u. V souˇcasnosti se jedn´a o nezbyt- nou souˇc´ast pˇri objektovˇe orientovan´em v´yvoji. Pˇresto neobsahuje zp˚usob, jak se m´a pouˇz´ıvat. Ani neobsahuje ˇz´adnou metodiku spr´avn´eho n´avrhu softwarov´ych syst´emy.

Pr´ace s UML pom´ah´a zainteresovan´ym t´ym˚um hledat ˇreˇsen´ı ´ukolu, komunikovat o nˇem a hledat nov´e, sch˚udnˇejˇs´ı cesty dalˇs´ıho v´yvoje. K tomu se vyuˇz´ıv´a hlavnˇe grafick´eho vyj´adˇren´ı myˇslenek pro jejich n´azornost. V´ysledkem pr´ace v jazyce UML jsou modely

(29)

KAPITOLA 3. OBJEKTOV ˇE ORIENTOVAN ´Y P ˇR´ISTUP 19

aplikace s odliˇsn´ymi ´urovnˇemi detail˚u. Takov´y model se skl´ad´a z r˚uzn´ych diagram˚u, kter´e pˇredstavuj´ı konkr´etn´ı pohledy na navrhovanou aplikaci. Diagramy se ˇclen´ı do dvou skupin a to na diagramy struktury a diagramy chov´an´ı. V t´eto pr´aci jsou obˇe knihovny popisov´any v´yhradnˇe diagramy tˇr´ıd, kter´e spadaj´ı do prvn´ı skupiny diagram˚u struktury.

Diagramy tˇr´ıd zobrazuj´ı statick´e struktury syst´emu prostˇrednictv´ım tˇr´ıd a vztah˚u mezi nimi.

3.4 N´ avrhov´ e vzory

N´avrhov´e vzory (ang. Design Patterns) pˇredstavuj´ı obecn´e ˇreˇsen´ı probl´em˚u, s kter´ymi se opakovanˇe pot´ykaj´ı v´yvoj´aˇri pˇri n´avrhu softwaru. Jedn´a o kombinaci slovn´ıho popisu a diagram˚u, jak vyˇreˇsit konkr´etn´ı probl´em, kter´y lze pouˇz´ıt v mnoha r˚uzn´ych situac´ıch.

Pouˇzit´ı tˇechto vzor˚u tak´e zlepˇsuje zpˇetnou ˇcitelnost k´odu pro program´atory a design´ery, kteˇr´ı jsou s dan´ym vzorem obezn´ameni. Pevn´e z´aklady n´avrhov´ych vzor˚u byly poloˇzeny na zaˇc´atku devades´at´ych let publikov´an´ım knihy: Design Patterns: Elements of Reusable Object-Oriented Software [2] skupinou, kter´a je zn´am´a jako Gang of Four (GoF).

3.4.1 N´ avrhov´ y vzor Factory Method

Vytv´aˇret nov´e instance tˇr´ıd lze obecnˇe statick´ym zp˚usobem pomoc´ı kl´ıˇcov´ych slov (v ja- zyce Java takov´e slovo je new). Tuto statiˇcnost se snaˇz´ı odstranit n´avrhov´y vzor Fac- tory Method [2]. ´Uˇcelem je vytvoˇrit

”tov´arnu“ na generov´an´ı instanc´ı tˇr´ıd, kter´e maj´ı spoleˇcn´eho pˇredka. Pot´e v pr˚ubˇehu programu bude tato tov´arn´ı tˇr´ıda vytv´aˇret instance nˇekter´e z tˇechto tˇr´ıd. ˇCast´ym jevem je kombinov´ani vzoru Factory a Singleton.

Obr´azek 3.1: Diagram n´avrhov´eho vzoru Factory Method

(30)

Kde v metodˇe factoryMethod() je nutn´e rozhodnout o principu v´ybˇeru a vytvoˇren´ı instance konkr´etn´ı tˇr´ıdy. Principem v´ybˇeru je myˇslen algoritmus, podle kter´eho se urˇc´ı, z jak´e tˇr´ıdy bude vytv´aˇrena instance. Vlastn´ı vytvoˇren´ı se pot´e provede pomoc´ı kl´ıˇcov´eho slova new. A zde m˚uˇze program´ator vyuˇz´ıvaj´ıc´ı programovac´ı jazyk Java j´ıt d´ale, vzhle- dem k javovsk´e architektuˇre. Pouˇzit´ım metody Class.forName() (java.lang.Class [6]) jdou vytv´aˇret instance pˇr´ımo ze souboru tˇr´ıdy uloˇzen´e na disku. A dokud se k dan´e tˇr´ıdˇe nepˇristoup´ı, nemus´ı tento soubor ani existovat.

try {

C l a s s c l a z z = C l a s s . forName ( c l a s s P a t h ) ;

C o n s t r u c t o r c o n s = c l a z z . g e t C o n s t r u c t o r ( double . c l a s s ) ; I I n t e g r a l i n t e g r a l = ( I I n t e g r a l ) c o n s . n e w I n s t a n c e ( d a t a ) ; return i n t e g r a l ;

} catch . . .

Kde promˇenn´a classPath obsahuje absolutn´ı adresu souboru tˇr´ıdy uloˇzen´eho na disku.

3.4.2 N´ avrhov´ y vzor Strategy

N´avrhov´y vzor Strategy oddˇeluje algoritmus od klienta, zapouzdˇren´ım do samostatn´e tˇr´ıdy. Jednoduˇse ˇreˇceno, objekt a jeho chov´an´ı jsou odtrˇzeny. Pokud existuje v´ıce r˚uzn´ych algoritm˚u, kter´e m´a objekt vykon´avat, je

”ˇcistˇejˇs´ı“ kaˇzd´y algoritmus implementovat do zvl´aˇstn´ı tˇr´ıdy a nikoliv do tˇela metody tohoto objektu. Odpadne potˇreba mnoha (sta- tick´ych) podm´ınˇen´ych pˇr´ıkaz˚u, zv´yˇs´ı se moˇznost jejich opˇetovn´eho vyuˇzit´ı a tedy i celkov´a dynamiˇcnost syst´emu.

Obr´azek 3.2: Diagram n´avrhov´eho vzoru Strategy

(31)

KAPITOLA 3. OBJEKTOV ˇE ORIENTOVAN ´Y P ˇR´ISTUP 21

ConcreteStrategy v t´eto pr´aci nejˇcastˇeji pˇredstavuje instanci tˇr´ıdy uchov´avaj´ıc´ı naˇcten´a data z inicializaˇcn´ıho xml souboru. Pro kaˇzdou jednotlivou numerickou metodu se vytv´aˇr´ı nov´a instance obaluj´ıc´ı tyto data. A zde je vyuˇzita tˇr´ıda Manager, implemen- tov´ana jako Singleton1. ´Uˇcelem t´eto tˇr´ıdy je jednak samozˇrejmˇe vybrat vhodnou strategii dle pˇr´ıchoz´ıch parametr˚u od klienta. Druh´ym d˚uvodem, d˚uleˇzitˇejˇs´ım, je uchov´avat si ve vnitˇrn´ı pamˇeti reference na jiˇz pouˇzit´e strategie (instance

”datov´ych tˇr´ıd“), u kter´ych se d´a pˇredpokl´adat, ˇze budou opˇet potˇreba. Vnitˇrn´ı logika vyhodnocov´ani, kter´a reference se uchov´a, a kter´a nech´a zaniknout, je z´avisl´a od konkr´etn´ıho Managera.

Pˇr´ınos tˇr´ıdy Manager nad vzorem Strategy spoˇc´ıv´a hlavnˇe v odlehˇcen´ı syst´emu od naˇc´ıt´an´ı st´ale stejn´ych zdroj˚u z disku. Sice v z´apˇet´ı tato v´yhoda z ˇc´asti vykoupena vyˇsˇs´ımi n´aroky na operaˇcn´ı pamˇet’. Pˇresto vˇsak klady pˇrevaˇzuj´ı z´apory a tento pˇr´ıstup se zd´a b´yt rozumn´y.

3.5 Testov´ an´ı

C´ılem kaˇzd´eho program´atora je vytvoˇrit korektnˇe funguj´ıc´ı software. Ovˇsem s rostouc´ı sloˇzitost´ı aplikac´ı roste t´eˇz n´aroˇcnost na ovˇeˇrov´an´ı funkˇcnosti programu. Proto zhruba od konce devades´at´ych let se zaˇcaly formulovat nov´e metodiky v´yvoje softwaru a d˚ukladn´e testov´an´ı se st´avalo nezbytnou souˇc´ast´ı v´yvoje.

Do popˇred´ı pozornosti se zejm´ena dostala technika zvan´a unit testing (testov´an´ı jed- notek programu). Princip t´eto metody je vz´ıt ˇc´ast testovan´eho softwaru - jednotku, co nejl´epe jej izolovat od zbytku k´odu a urˇcit, zda se chov´a pˇresnˇe tak, jak oˇcek´av´ame. Jed- notku obvikle tvoˇr´ı samostatn´e tˇr´ıdy, nebo skupina tˇr´ıd. D˚uleˇzit´e je, ˇze takov´a jednotka poskytuje jako celek omezenou funkcionalitu. Dle princip˚u OOP se snaˇz´ıme

”rozb´ıt“ jed- notliv´e tˇr´ıdy na co nej co nejmenˇs´ı ˇc´asti. ˇC´ım je tˇr´ıda menˇs´ı, t´ım lepe se nech´a testovat.

Testov´an´ı je pak snadn´e. Spust´ı se vytvoˇren´a sada test˚u a pokud vˇsechny testy dopad- nou dobˇre, je tˇr´ıda v poˇr´adku (pokud jsou testy spr´avnˇe napsan´e). V tomto duchu se tak´e hovoˇr´ı o automatick´em testov´an´ı. Tento pˇr´ıstup k testov´an´ı softwaru se zaˇcal prosazo- vat jako souˇc´ast metodiky v´yvoje softwaru, kter´a se naz´yv´a extr´emn´ı programov´an´ı [9].

Tak´e je moˇzn´e testy vytvoˇrit jeˇstˇe dˇr´ıve, neˇz samotnou testovanou tˇr´ıdu - test-driven programming (programov´an´ı ˇr´ızen´e testy).

Mezi uˇzivateli jazyka Java se obzvl´aˇst’ velk´e oblibˇe tˇeˇs´ı testovac´ı framework JUnit [10]

s pˇr´ımou podporou r˚uzn´ych IDE vˇcetnˇe Netbeans. Jde o open source projekt vydan´y pod Common Public Licence. Testov´an´ı pomoc´ı JUnit je zaloˇzeno na jednoduch´em principu.

Urˇc´ı se testovac´ı tˇr´ıda a otestuj´ı se vˇsechny jej´ı metody. Testov´an´ı

”tˇela“ testovan´e metody se prov´ad´ı na z´akladˇe porovn´av´an´ı z´ıskan´ych hodnot s hodnotami oˇcek´avan´ymi. Efektivn´ı porovn´an´ı umoˇznuj´ı metody frameworku z bal´ıˇcku org.junit.Assert. Uk´azka vybran´ych metod:

• assertEquals() - metoda slouˇz´ı k porovn´an´ı dvou hodnot a testuje, zda jsou stejn´e.

Mohou se porovn´avat ˇretˇezce a ˇc´ıseln´e hodnoty vˇsech typ˚u. Test skonˇc´ı ´uspˇeˇsnˇe, pokud jsou hodnoty stejn´e. JUnit od ˇctvrt´e verze umoˇzˇnuje zad´avat tˇret´ı parametr - toleranci pro testov´an´ı hodnot v plovouc´ı desetin´e ˇc´arce (double).

1avrhov´y vzor publikovan´y v knize od GoF [2]. C´ılem vzoru je zajistit existenci pouze jedn´e instance dan´e tˇr´ıdy a poskytnout k n´ı glob´aln´ı pˇr´ıstupov´y bod.

(32)

• fail() - vyvolav´a selh´an´ı testu.

JUnit verze 4 jiˇz podporuje anotace 2, kter´e se urˇcitˇe vyplat´ı pouˇz´ıvat. Framework JUnit disponuje nˇekolika jiˇz nadefinovan´ymi anotacemi. Napˇr´ıklad pro pˇr´ıpravu testovan´e tˇr´ıdy - @BeforeClass, nebo ´uklid po otestov´an´ı dan´e metody - @AfterClass. Uk´azka JUnit testovac´ı tˇr´ıdy k provˇeˇren´ı tˇr´ıdy AbstractIntegral:

public c l a s s A b s t r a c t I n t e g r a l T e s t { /∗ ∗

∗ T e s t o f g e t S i z e method , o f c l a s s A b s t r a c t I n t e g r a l .

∗/

@Test

public void t e s t G e t S i z e ( ) { . . .

} /∗ ∗

∗ T e s t o f v a l u e method , o f c l a s s A b s t r a c t I n t e g r a l .

∗/

@Test

public void t e s t V a l u e ( ) { . . .

} }

Pˇri d˚ukladn´em testov´an´ı je tendence otestovat nejen samostatnou funkˇcnost pro- gramu, ale i naj´ıt takov´e pˇr´ıpady, kdy program mus´ı prokazatelnˇe vyk´azat chybu. Je d˚uleˇzit´e takov´e pˇr´ıpady i vyhled´avat. Uk´azka takov´eho pˇr´ıstupu:

/∗ ∗

∗ T e s t o f g e t S i z e method , o f c l a s s A b s t r a c t I n t e g r a l .

∗/

@Test

public void t e s t G e t S i z e ( ) { try {

i n s t a n c e . g e t S i z e ( param ) ; f a i l ( ) ;

} catch ( E x c e p t i o n e ) { . . .

} }

V uk´azce se testuje, zda metoda getSize() na pˇr´ıchoz´ı parametr param vyhod´ı v´yjimku Exception. Pokud v´yjimka nastane, je test v poˇr´adku. V opaˇcn´em pˇr´ıpadˇe bude vol´ana metoda fail() indikuj´ıc´ı selh´an´ı testu.

2Anotace je zvl´stn´ı druh modifik´atoru. Anotace implementuj´ı rozhran´ı java.lang.annotation.Annotation. Anotace sest´avaj´ı ze zavin´ce ( @ ) n´asledovan´eho typem ano- tace a seznamem prvk˚u-hodnot v z´avorce.

(33)

Kapitola 4 Realizace

4.1 Implementace integraˇ cn´ı knihovny

Tato knihovna disponuje metodami numerick´eho integrov´an´ı pˇres dom´eny - ´useˇcka, troj´uheln´ık a ˇctyˇrstˇen. A to jak v kart´ezsk´ych souˇradnic´ıch tak i v souˇradnic´ıch ba- rycentrick´ych. Na obr´azku 4.1 m˚uˇzete vidˇet zevrubnou strukturu integraˇcn´ı knihovny.

Rozbor struktury knihovny je proveden od nejvyˇsˇs´ıho patra hierarchie bal´ıˇcku integral, kter´emu je vˇenov´an ponˇekud detailnˇejˇs´ı pohled. Aˇz po tˇr´ıdy nejniˇzˇs´ı ´urovnˇe, kter´e ob- star´avaj´ı naˇc´ıt´an´ı inicializaˇcn´ıch dat ze XML souboru. Pokud v t´eto kapitole bude pouˇzit pojem data, v´yhradnˇe bude ch´ap´an ve smyslu inicializaˇcn´ıch ´udaj˚u, jako jsou napˇr´ıklad koeficienty dan´e numerick´e metody.

Obr´azek 4.1: Struktura integraˇcn´ı knihovny

23

(34)

4.1.1 Rozbor struktury

J´adro knihovny je zobrazeno na obr´azku 4.2. Kaˇzd´y vytvoˇren´y integr´al mus´ı implemento- vat rozhran´ı IIntegral. Prvn´ı metoda tohoto rozhran´ı getSize() vrac´ı odpovˇed’ na rozmˇer sv´e dom´eny, at’ jiˇz to je d´elka nebo objem. Druhou metodou rozhran´ı je value() vracej´ıc´ı hodnotu integr´alu pod grafem funkce. Jak je vidˇet z pˇredpisu t´eto metody, dokud nen´ı zavol´ana, tˇr´ıda o ˇz´adn´e funkci nem˚uˇze nic vˇedˇet. Z toho je patrn´e, ˇze jeden vytvoˇren´y integr´al m˚uˇzeme pouˇz´ıt pro vyˇc´ıslen´ı libovoln´eho mnoˇzstv´ı funkc´ı. Samozˇrejmˇe ale st´ale na stejn´e dom´enˇe.

Obr´azek 4.2: Diagram tˇr´ıd bal´ıˇcku integral

Centr´aln´ı tˇr´ıdou pro integr´aly je AbstractIntegral. Obsahuje univerz´aln´ı algorit- mus pro obslouˇzen´ı metody value( IFunction fce ). Univerz´alnosti je dosaˇzeno pomoc´ı mapovac´ıch funkc´ı z bal´ıˇcku integPoints, podrobnˇeji viz diagram tˇr´ıd na obr´azku 4.4.

Dalˇs´ı funkcionalitu, kterou mus´ı tato tˇr´ıda obs´ahnout, je vypoˇcten´ı velikosti dom´eny. Zde se nepovedlo naj´ıt ˇz´adn´e sjednocuj´ıc´ı pravidlo. Takˇze jedin´ym ˇreˇsen´ım je rozˇs´ıˇren´ı tˇr´ıdy AbstractIntegral o nov´e a to dle tvar˚u jednotliv´ych dom´en. Jmenovitˇe se jedn´a o Line, Triangle a Tetrahedron. Jak jiˇz bylo ˇreˇceno v teoretick´e ˇc´asti, omezujeme se jen na

´

utvary zvan´e n-simplex.

U tˇechto rozˇsiˇruj´ıc´ıch tˇr´ıd je jen poˇzadavek na implementaci vlastn´ıho algoritmu pro

References

Related documents

Special Olympics Schoolday i Köping fick ca 150 elever prova på fotboll, bordtennis, floorhockey, innebandy med hjälp av lokala föreningar. Snöskolöpning i Rättvik var

Vid sidan av stöd till våra egna föreningar har vi utgjort en resurs för övriga idrotter i Västmanland.. Vår roll har ofta varit att utgöra rådgivare till deras konsulenter

Na obr´ azku 4.35 je zobrazeno porovn´ an´ı akustick´ eho tlaku nad nosn´ıkem uni- morf (bez elektrod i s elektrodami vych´ az´ı nad nosn´ıkem velice podobn´ y akustick´ y

• Ökat fokus på pressevent för lansering av MQs kollektioner. • Fördjupat samarbete med

Har bebyggelsen inte färdigställts så att slutbesked meddelas inom fyra (4) år enligt ovan ska Bolaget utge vite till Kommunen med 20 procent av den årliga

tingningsavgift, intresseavgift, visningsavgift, bokningsavgift eller andra avgifter oavsett lydelse som eventuellt erläggs för att en person skall få stå på kö för köp av valp.

Du får som chef verktyg och modeller för att hitta ditt eget visionära ledarskap för ökad lönsamhet och större effektivitet.. Enligt en undersökning från Harvard Business

• Kreativt klimat – inte döma varandra, utan samarbeta för att nå resultat. • Visa respekt