Tady bude oficiální zadání práce.

Rozměr: px
Začít zobrazení ze stránky:

Download "Tady bude oficiální zadání práce."

Transkript

1 Tady bude oficiální zadání práce.

2 2

3 České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Generátor řídkých matic Tomáš Bílek Vedoucí práce: Ing. Ivan Šimeček, Ph.D. Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Výpočetní technika červen 2009

4 iv

5 Poděkování: Děkuji panu Ing. Ivanu Šimečkovi, Ph.D., mj. vedoucímu mé bakalářské práce, za výborné vedení a cenné rady při tvorbě generátoru řídkých matic, nejenom v oblasti návrhu, ale i v části implementační. v

6 vi

7 Prohlášení: Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady, které uvádím v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne vii

8 viii

9 Abstract: Tomáš Bílek, The generator of sparse matrix. This work contains analysis and implementation of the generator of sparse matrix with simple graphics interface. The generator will generate random and band sparse matrix. The output of this work will be this document and application. Even this document will be attached with a CD of source codes, runnable application in environment JRE v. 6 and others materials, which will be published. Abstrakt: Tomáš Bílek, Generátor řídkých matic. Tato práce se zaměřuje na analýzu a implementaci generátoru řídkých matic s jednoduchým grafickým rozhraním. Generátor bude zaměřen na generování náhodných a pásových řídkých matic. Výsledkem práce bude tento dokument a program. Zároveň k tomuto dokumentu bude přiložené CD se zdrojovými kódy, spustitelnou aplikací v prostředí JRE v. 6 a dalšími materiály, které zde budou uvedené. ix

10 x

11 Obsah 1 Úvod Popis problému Definice matice Druhy matic Řádková matice Sloupcová matice Čtvercová matice Diagonální matice Jednotková matice Symetrická matice Horní trojúhelníková matice Dolní trojúhelníková matice Pásová matice Řídká matice Reprezentace řídkých matic v paměti (souboru) Compressed Row Storage (CRS) Compressed Column Storage (CCS) Compressed Diagonal Storage Old Yale sparse matrix formát New Yale sparse matrix formát Analýza a návrh implementace Analýza prostředí Průběh činnosti programu Komponenty systému xi

12 3.3.1 Komponenta Matrix Generator Komponenta Matix Saver Komponenta GUI Komponenta Main Controller Popis implementace Struktura systému Komponenta Matix Generator Komponenta Matrix Saver Komponenta Main Controller Komponenta GUI Ukázka výstupu generátoru řídkých matic Závěr Seznam použité literatury Příloha A: Obsah přiloženého DVD Příloha B: Uživatelský manuál xii

13 Seznam obrázků Obrázek 1 Obecný zápis matice... 2 Obrázek 2 Konkrétní zápis... 2 Obrázek 3 Příklad diagonální matice... 3 Obrázek 4 Příklad horní trojúhelníkové matice... 4 Obrázek 5 Příklad pásové (band) matice... 5 Obrázek 6 Příklad řídké matice č Obrázek 7 Příklad řídké matice č Obrázek 8 Zjednodušené schéma uložení řídké matice... 7 Obrázek 9 Compressed Row Storage... 9 Obrázek 10 Compressed Column Storage Obrázek 11 Compressed Diagonal Storage Obrázek 12 Příklad Old Yale sparse matrix formátu Obrázek 13 New Yale sparse matrix formát Obrázek 14 Diagram aktivit Obrázek 15 Diagram komponent Obrázek 16 Vývojový diagram pro vygenerování množství nenulových prvků na řádek Obrázek 17 Vývojový diagram generování indexů sloupců a hodnot Obrázek 18 Vývojový diagram průběhu generování pásové matice Obrázek 19 Grafické uživatelské rozhraní, karta pro náhodné matice Obrázek 20 Grafické uživatelské rozhraní, karta pro pásové matice Obrázek 21 Ukázka okna Nápověda Obrázek 22 Ukázka okna O Programu xiii

14 xiv

15 Seznam tabulek Tabulka 1 Symetrická náhodná matice Tabulka 2 Ukázka hlavičky výstupního souboru ve formátu MM coordinate xv

16 xvi

17 1 Úvod 1.1 Popis problému Vlastnit nějaký prostý, rychlý a přehledný generátor řídkých matic by chtěl, při nejmenším, téměř každý vývojář algoritmů, které jsou učené nejenom pro provádění matematických operací nad těmito maticemi. Přitom by nemělo jít pouze o řídké matice s plně náhodným rozmístěním nenulových prvků, ale i o matice, jejichž rozmístění nenulových prvků by bylo podmíněno pomocí předem předdefinovaných kritérií, ze kterých by si uživatel zvolil. Takto vygenerované matice by se ukládaly do uživatelem určeného souboru. Ovšem, existují i jiné programy, které umějí generovat řídké matice, např. MatLab, ale to už vyžaduje mít tento program nainstalovaný a umět s ním pracovat. Hlavním cílem práce bude tedy vytvořit program, který bude mít výše vyjmenované vlastnosti. Mimo těchto vlastností by měl být multiplatformní, s jednoduchým a dostatečně přehledným uživatelským rozhraním. Protože možností generování řídkých matic je nespočetně mnoho, měla by být výsledná implementace otevřená pro rozšíření o další metody generování bez větších komplikací. Vstupy programu se budou z velké části odvíjet od toho, jaký typ generování matice použijeme. Obecně lze říct, že vstupem budou omezující kritéria pro vygenerování matice. Výstup programu bude soubor, obsahující zápis matice v předem zvoleném formátu. Abychom mohli takový program vytvořit, je vhodné, se nejprve seznámit s maticemi jako takovými a řídkými maticemi. 1

18 1.2 Definice matice Pojem matice se v matematice používá pro označení obdélníkové tabulky čísel nebo nějakých matematických objektů prvky matice (též elementy matice). Obecně matice obsahuje m řádků a n sloupců. Pak hovoříme o matici typu m n. Ve většině případů se matice využívají pro obecné rotace vektorů, transformace vektorů od jedné báze k jiné bázi, k řešení soustav lineárních rovnic anebo také k vyjádření operátorů v kvantové mechanice. Jednotlivé prvky matice označujeme indexy, které udávají řádek a sloupec, v nichž se prvek nachází. Prvek v i-tém řádku a v j-tém sloupci matice A se obvykle označuje a ij. Např. a 23 označuje prvek, který se nachází na druhém řádku ve třetím sloupci. Existuje i označení a 2 3, které se používá pokud potřebujeme rozlišovat kovariantní a kontravariantní indexy, ale tím se v této práci hlouběji zabývat nebudeme. Obrázek 1 Obecný zápis matice Obrázek 2 Konkrétní zápis 2

19 1.3 Druhy matic Pro vyřešení zadání je zapotřebí se blíže seznámit s jednotlivými druhy matic. Druhů matic je mnoho, ale my se zaměříme na ty, které mají něco společného s pravidelným či logickým uspořádáním prvků v matici. Logickým či pravidelným uspořádáním budeme mít na mysli např. umístění všech nenulových prvků v jednom řádku matice a zbytek prvků v matici s nulovými hodnotami nebo umístění nenulových prvků kolem hlavní diagonály, apod Řádková matice Je matice typu 1 n, která je tvořena jedním řádkem Sloupcová matice Je matice typu m 1, která je tvořena jedním sloupcem Čtvercová matice Platí-li n=m, nebo-li počet řádků matice je shodný s počtem sloupců matice, pak tuto matici označujeme jako čtvercovou matici n-tého řádu (stupně). Matici, u které platí n m, označujeme jako matici obdélníkovou Diagonální matice Je matice, která obsahuje nenulové prvky pouze na hlavní diagonále, tzn. a ij = 0 pro i j a a ij 0. Diagonální matici označujeme písmenem D. Obrázek 3 Příklad diagonální matice 3

20 1.3.5 Jednotková matice Je speciální případ diagonální matice, která na své hlavní diagonále obsahuje samé jedničky. Tuto matici označujeme písmenem E Symetrická matice Matici A považujeme za symetrickou, pokud transponovaná matice A T je shodná s původní maticí A, tzn. A T = A Horní trojúhelníková matice Je matice, jejíž všechny prvky pod hlavní diagonálou nabývají nulových hodnot. Obrázek 4 Příklad horní trojúhelníkové matice Dolní trojúhelníková matice Je matice, která má všechny prvky nad hlavní diagonálou nulové. 4

21 1.3.9 Pásová matice Je matice, která rozšiřuje diagonální matici a to tím způsobem, že podél hlavní diagonály jsou vedeny další diagonály, které jsou složené pouze z nenulových prvků. Obrázek 5 Příklad pásové matice Řídká matice V matematickém odvětví se označení řídká matice používá pro matice, jejichž počet nenulových prvků je menší než 10%. Uvedených 10% je třeba brát s rezervou, protože někdy se uvádí, že tato hodnota má být 5%. Z toho vyplývá, že neexistuje ostrá hranice, od které je možné danou matici označit za řídkou. Toto označení se také odvíjí od toho, jak efektivně můžeme danou matici uložit, čímž se vlastně budeme dále zaobírat. Některé matice můžou mít 30% a něco více nenulových prvků, ale vzhledem k tomu, jak jsou uspořádány, může být označena za řídkou matici. Jako příklad se můžou uvést 2 matice, které mají shodný n nenulových prvků, ale jedna z nich má tyto prvky náhodně rozmístěné po celé své ploše a druhá má všechny prvky souvisle uloženy v několika řádcích. S tím souvisí uložení matice do paměti (souboru), kdy je určitě jednodušší určit začátek a konec bloku, který obsahuje po sobě jdoucí nenulové prvky matice, než každému jednotlivému prvku přiřadit konkrétní umístění pomocí indexu řádku a sloupce. Text a obrázky jsou převzaty ze zdroje [1] a [2]. 5

22 Obrázek 6 Příklad řídké matice č. 1 Obrázek 7 Příklad řídké matice č. 2 6

23 2 Reprezentace řídkých matic v paměti (souboru) Toto téma je obecně velice rozsáhlé, protože metod pro ukládání dat do paměti je velice mnoho. Důvod velkého množství metod pro uložení úzce souvisí s charakteristickým uspořádáním nenulových prvků v řídké matici. Z toho vyplývá, že pro každý typ řídké matice je vhodná jiná metoda pro uložení. Všeobecně se proto nedá určit, která metoda je nejvhodnější jší pro ukládání řídkých matic, protože tento výběr závisí na konkrétním typu řídké matice. Ve výsledném programu použijeme pouze formát CRS, i když pro pásovou matici by byl vhodný formát CDS. Důvod takového použití je čistě implementační, ale nic nebrání tomu, aby matice byly ukládaný do souborů v níže uvedených formátech. Obrázek 8 Zjednodušené schéma uložení řídké matice Další informace jsou uvedeny na adrese [3]. 7

24 2.1 Compressed Row Storage (CRS) Jeden z hlavních a nejjednodušších formátů pro uložení řídkých matic. Formát si předem nevytváří žádnou analýzu o struktuře řídké matice, a také neukládá žádné nadbytečné prvky matice, tedy její nulové prvky. Princip CRS formátu spočívá v uložení sekvence nenulových prvků, které se nacházejí na jednom řádku matice do souvislého paměťového prostoru. Předpokládejme, že máme nesymetrickou řídkou matici A. Matice je reprezentována prostřednictvím tří polí, první dvě pole col_ind a row_ptr, určují polohu nenulových prvků a třetí, s názvem val, obsahuje hodnoty nenulových prvků matice A uložené řádek po řádku (tzv. row-wise). Pole col_ind obsahuje indexy sloupců prvků, které jsou obsahem pole val. Z toho vyplývá, že velikosti obou polí jsou stejné (co se týká počtu položek) a platí-li val(k) = a i,j pak col_ind(k) = j, kde i je číslo řádku, j je číslo sloupce matice A a index k slouží jako index do pole col_ind. Pole row_ptr v sobě uchovává indexy na prvky v poli val, které jsou prvními nenulovými prvky matice A v řádku i. Matematicky můžeme vyjádřit následovně: jestli-že platí val(k)=a i,j, pak row_ptr(i) k < row_ptr(i + 1). Velikost pole row_ptr je rovna m + 1, kde m je počet řádků matice. Protože nejnižší index řádku a sloupce je 1, obsahuje row_ptr(0) defaultní hodnotu 1. To umožňuje snadné zjištění počtu prvků na prvním řádku matice pouhým odečtením hodnot row_ptr(1) row_ptr(0). Úspora místa, při použití formátu CRS pro uložení matice, je značná. Místo uložení n 2 prvků si vystačíme pouze s 2nnz + m + 1 jednotek pro uložení, kde nnz je počet nenulových prvků. Výše popsaný princip graficky znázorňuje Obrázek 9. 8

25 Obrázek 9 Compressed Row Storage 9

26 2.2 Compressed Column Storage (CCS) Patří do stejné skupiny jako formát CRS a jeho princip je analogický s principem CRS. Tento formát je někdy také nazýván jako Harwell-Boeingův. Formát. CCS je identický s CSR formátem, ale hodnoty nenulových prvků matice A jsou do pole val ukládány po sloupcích místo po řádcích. Jinými slovy můžeme říct, že CCS formát je CRS formát pro A T. Základem je opět rozložení matice do tří polí (val, row_ind, col_ptr), kde pole row_ind obsahuje indexy řádků,do kterých patří hodnoty z pole val. Dalším polem je col_ptr a jeho velikost je rovna počtu sloupců + 1, tedy n + 1. Protože řádky a sloupce jsou číslovány od indexu 1, obsahuje pole col_ptr na indexu 0 defaultní hodnotu 1. Opět slouží pro snadné zjištění počtu prvků v prvním sloupci matice. Ukázka formátu CCS je na obrázku Obrázek 10. Obrázek 10 Compressed Column Storage 10

27 2.3 Compressed Diagonal Storage Jestli-že matice A je tvořená pásy nenulových prvků kolem podél hlavní diagonály a samotná diagonála je také tvořená nenulovými prvky, je výhodné využít tuto vlastnost ve formátu, ve kterém matici A uložíme. Schéma pro tento formát se zakládá na uložení vedlejších diagonál matice spolu s hlavní diagonálu v souvislém datovém prostoru. Výhoda formátu je v ušetření místa pro zaznamenávání pozice pro jednotlivé prvky nebo menší bloky. Na začátku nám stačí určit, o kterou diagonálu se jedná a následně souvisle uložit prvky z konkrétní diagonály. Nevýhoda v tom, že se tato metoda dá použít pouze na velmi úzký okruh řídkých matic. Matice A=(a i,j ) je pásová, jestli-že obsahuje nezáporné konstanty p, q nazývaná jako levá a pravá halfbandwidth, pak a i,j 0 pouze když i-p j i+p. Pro takovou matici A pak stačí alokovat pole val o velikosti (1:n, - p:q). Obrázek 11 demostruje použití CDS na matici A. Matici A ukládáme v poli val s dimenzí (6, -1:1) při použití mapování val(i,j)=a i,i+j. Obrázek 11 Compressed Diagonal Storage 11

28 2.4 Old Yale sparse matrix formát Formát plně totožný s formátem CRS, který je uvedený v podkapitole 2.1. Jedná se pouze o přejmenování polí, které reprezentují řídkou matici. Pole A reprezentuje pole val. Pole JA je ekvivalentní s polem col_ind, obsahuje tedy indexy sloupců. Poslední pole IA je určeno pro ukazatele na konce řádků a jeho vlastnosti korespondují s polem row_ptr ve formátu CRS. Obrázek 12 Příklad Old Yale sparse matrix formátu 12

29 2.5 New Yale sparse matrix formát Je obdoba formátu Old Yale Sparse Matrix, která vychází z nepsaného pravidla, že prvky umístěné na hlavní diagonále jsou ve většině případů nenulové a může k nim být častěji přistupováno, než k prvkům mimo diagonálu. Proto se prvky z hlavní diagonály ukládají odděleně do jiného pole, které má velikost m. Tím jsme ušetřeni zavádění čísel sloupců těchto prvků Nový vzniklý prostor v poli JA se vyplní hodnotami z pole IA. Pole vzniklé sloučením těchto dvou polí označujeme jako IJA. Jeho velikost se rovná počtu všech nenulových prvků + 1. Rozdíl mezi Old Yale sparse matrix a New Yale sparse matrix pěkně znázorněno na obrázku Obrázek 13. Obrázek 13 New Yale sparse matrix formát a [7]. Uvedené obrázky a texty jsou převzaté z elektronických zdrojů [4], [5], [6] 13

30 14

31 3 Analýza a návrh implementace V předchozí kapitole byly představeny metody jak reprezentovat řídké matice v paměti. To bude zejména důležité při návrhu generujících algoritmů. I když v tomto případě nám postačí jednoduchý formát CRS, můžou se popsané techniky použít pro reprezentaci matic ve výstupních souborech programu. Nicméně v této kapitole se budeme zabývat analýzou programu. Nejprve určíme technologii, na které program postavíme a následně rozdělíme aplikaci do komponent. Dále si naznačíme, co bude obsahem těchto komponent a jakým způsobem bude probíhat komunikace mezi nimi. V neposlední řadě bude uvedeno rozvržení grafické části aplikace. 3.1 Analýza prostředí Než začneme navrhovat program, je vhodné určit, na jaké technologii bude postaven. V úvodu je naznačeno, že aplikace má být multiplatformní a proto bylo zvoleno, že aplikace bude postavena na technologii Java, konkrétně na verzi 1.6. Ta zajistí bezproblémový běh aplikace na operačních systémech Windows a operačních systémech založených na technologii UNIX. Konečná aplikace bude soubor typu.jar, který je spustitelný v prostředí jre (Java Runtime Environment). Jelikož má být aplikace má obsahovat grafické rozhraní, nepředpokládají se žádné vstupní parametry, kterými by se řídila činnost aplikace. Vzhledem k tomu, že samotná aplikace nebude využívat žádné systémové knihovny ani jiné softwarové prostředky kromě těch, které poskytuje prostředí jre, můžeme se pustit do další analýzy programu. 15

32 3.2 Průběh činnosti programu Hlavní činnosti programu bude vygenerování řídké matice a následně její uložení do souboru. Parametry matice se budou zadávat prostřednictvím editovatelných polí zobrazených na uživatelském rozhraní. Uživatelské rozhraní bude spouštěno zároveň s hlavním programem. Mezi vstupní parametry patří i výběr souboru, do kterého se má uložit vygenerovaná řídká matice. Předtím, než se vůbec spustí generování matice do paměti, se provede kontrola vstupních dat. Po uložení vygenerované matice z paměti do souboru zůstanou zadané vstupní parametry zobrazené v uživatelském rozhraní a uživatel bude mít možnost tyto parametry pozměnit a nechat matici znovu vygenerovat. Jak je vidět, samotný průběh zadání vstupních parametrů včetně určení výstupního souboru není nikterak složitý. To pomůže k vytvoření jednoduchého uživatelského grafického rozhraní. Průběh činnosti programu je znázorněn na obrázku Obrázek

33 Obrázek 14 Diagram aktivit 17

34 3.3 Komponenty systému Velice důležitá část návrhu, která při správné analýze umožní vytvořit přehlednou aplikaci a přispěje k jednodušší implementaci. Protože aplikace má být jednoduše rozšířitelná, bude nutné s touto skutečností počítat. Proto aplikaci rozdělíme do jednotlivých komponent. Komponenty budou poskytovat rozhraní, přes které budou schopné přijímat požadavky a komunikovat s ostatními komponentami. Protože aplikace má obsahovat grafické rozhraní, bude existovat právě jedna komponenta, která bude obstarávat grafické rozhraní a poskytovat funkce pro komunikaci s ní. Další komponenty si uvedeme v následujících odstavcích. Důležité je, že z toho rozdělení vyplývá použití softwarové architektury zvané MVC (Model View - Controller), která oddělí grafickou část od programové. Navíc pomocí MVC a výše zmíněným dělením se dosáhne k celkovému zpřehlednění systému a spolu se správnou volbou komponent umožní snadné rozšíření celého systému. Vzhledem k tomu, že MVC architektura je víceméně objektově založena, je pro tuto skutečnost jazyk Java přímo stvořený. Základ celého systému tvoří komponenta Main Controller. Její hlavní činnosti je přijímat a vyhodnocovat data, která na vstupu zadá uživatel. Tento proces předávání uživatelských vstupních dat probíhá prostřednictvím komponenty GUI. Mimo zadávání uživatelských vstupních dat komponenta umožňuje zobrazování varovných hlášení neboli výjimek, které se vyskytly v průběhu kontroly uživatelského vstupu nebo při startu běhu některých komponent. Další komponentou je Matrix Generator. Komponenta má na starost generování zmíněných řídkých matic. Jaká matice se bude generovat, určí Main Controller zavoláním příslušné metody z komponenty Matrix Generator. Výběr metody se odvíjí od zadaného vstupu. Poslední komponentou systému je Matrix Saver. Matrix Saver má za úkol uložit předanou matici, ve formátu CRS, do souboru. Oddělení komponenty Matrix Saver od komponenty Matrix Generátor s sebou nese jednu velkou výhodu, která byla v průběhu tvorby využita. Původně komponenta uměla ukládat 18

35 matici pouze ve formátu CRS, ale následně bylo rozhodnuto, že ukládání bude v MM Coordinate formátu. Proto stačilo vytvořit další třídu se stejnými metodami, která umí uložit matice v takovémto formátu. Proto rozšíření programu o další ukládací algoritmy nebude vůbec obtížné. Taktéž nebude obtížné rozšíření komponenty Matrix Generator o další třídy pro generování řídkých matic. Rozdělení aplikace do komponent tak, jak bylo popsáno výše, je zobrazeno na obrázku Obrázek 15. Z obrázku je jasně vidět, že veškeré řízení bude obstarávat komponenta Main Controller. Obrázek 15 Diagram komponent 19

36 3.3.1 Komponenta Matrix Generator Jak už bylo naznačeno, komponenta Matix Generator bude sobě sdružovat algoritmy pro generování řídkých matic. Algoritmy pro jednotlivé typy matic budou rozděleny do tříd, které prostřednictvím svých metod umožní vygenerovat konkrétní matice do paměti. Protože generátor v této verzi bude umět generovat 2 typy matic, bude komponenta Matix Generator obsahovat právě dvě třídy. První třída s názvem Simple bude určená pro generování náhodné řídké matice. Druhá se jménem Band bude sloužit pro generování pásové řídké matice. Bude-li to v budoucnu zapotřebí, může se tato komponenta rozšířit o další třídy s tím, že se vhodně doplní metody pro uložení v třídách obsažených v komponentě Matix Saver. Protože tříd pro generování může být nespočetně mnoho, tak pro dodržení základní funkčnosti budou muset implementovat základní výstupní CRS interface. Interface bude obsahovat metody pro získání obsahu polí reprezentující řídkou matici ve formátu CRS Náhodná matice (třída Simple) Pod pojmem náhodná matice se v programu skrývají tyto druhy matic: 1. Matice s jedním a více nenulových prvků na řádku umístěných tak, že jsou od sebe, ve většině případů, odděleny nulovým prvkem. 2. Matice s několika nenulovými prvky na řádku, které svým uspořádáním tvoří čárky o určité délce. Dále každá z výše uvedených matic může mít vlastnost: i. Symetrická matice ii. Dolní trojúhelníková matice iii. Horní trojúhelníková matice Dalším požadavkem na matici může být regulárnost. V tomto případě se nejedná o regulárnost matice jako takovou, že hodnost matice se musí rovnat 20

37 počtu řádků, ale o regulárnost, která zaručuje, že v každém řádku bude alespoň 1 nenulový prvek. Při prvních fázích vývoje bylo počítáno s tím, že se vytvoří algoritmy jak pro matici 1. typu, tak pro matici 2. typu. Nakonec se od toho řešení upustilo, protože hlubší analýzou bylo dospěno k závěru, že by tyto 2 typy matic by mohl řešit pouze 1 algoritmus. Následkem této skutečnosti byl zaveden pojem element matice: Element matice - definuje minimální počet nenulových prvků vedle sebe. Pro větší exaktnost si uvedeme další pojem a to je normální matice: Normální matice matice, která nemá jiná kritéria, než je šířka elementu a regulárnost. Vstupem všech náhodných matic bude: 1. Element jeho šířka (velikost) 2. Velikost matice 3. Počet nenulových prvků 4. Regulárnost Výstupem všech náhodných matic bude matice ve formátu CRS Pásová matice (třída Band) Pojmem pásová matice se rozumí matice, která v základu obsahuje po celé hlavní diagonále nenulové prvky. Širší pás vzniká přidáváním dalších subdiagonál těsně nad nebo těsně pod hlavní diagonálu. Přidávané subdiagonály opět obsahují po celé své délce nenulové prvky. Už z toho, co bylo uvedeno, vyplývá, že pro vygenerování pásové matice bude zapotřebí znát šířku pod a nad hlavní diagonálou. Dalším parametrem bude symetričnost matice. Nakonec jako každá matice musí být při generování známa velikost matice, proto posledním parametrem bude velikost matice. 21

38 Pro pásovou matici bude vstupem: 1. Velikost matice 2. Šířka pásu nad diagonálou 3. Šířka pásu pod diagonálou 4. Symetie Výstupem pásových matic bude matice ve formátu CRS Komponenta Matix Saver Komponenta Matix Saver v sobě bude sdružovat třídy pro ukládání řídkých matic do souborů ve zvoleném formátu. Původně jsem měl v plánu, že výstupem bude matice reprezentována ve formátu CRS, ale po konzultaci došlo ke změně na formát MM coordinate (Matrix Market). V tom nebyl žádný problém a tím se zároveň ukázalo, že systém je dobře navržený pro jeho další rozšíření. Jak už bylo předesláno, metody těchto tříd budou úzce propojené s metodami tříd obsažených v komponentě Matrix Generator. Důvod je takový, že je zamýšleno generovat pouze určité části matice do paměti z důvodu zefektivnění algoritmu a ušetření místa v paměti. Proto nebude moci být použitá pouze jedna metoda pro uložení všech matic zapsaný v CRS. Následek této skutečnosti je takový, že bude muset existovat více metod, které budou brát v úvahu, že předaná matice není úplná a bude jí potřeba během ukládání nějakým způsobem dopočítat nebo upravit Komponenta GUI Další z důležitých částí programu bude komponenta GUI. Komponenta bude sloužit pro zobrazení uživatelského rozhraní. Kromě hlavní okna a nápověd atd. bude obstarávat i zobrazování výjimek, které se vyskytnou buď během kontroly vstupních dat, nebo v době běhu některého z algoritmů. Hlavní okno se bude skládat z hlavního menu a záložek pro jednotlivé typy matic. V tomto případě budou záložky dvě, jedna pro náhodné matice, druhá pro 22

39 pásové matice. Oddělení je provedeno z důvodu, že se vstupní parametry obou typů matic od sebe liší. Naopak společné budou mít tlačítko pro výběr výstupního souboru a tlačítko pro vygenerování matice. Hlavní menu bude víceméně tradiční. Bude obsahovat položku pro ukončení programu a položky pro zobrazení nápovědy a informací o programu. Poslední dvě volby způsobí zobrazení nového okna a zároveň se deaktivuje hlavní okno do doby, než dojde k uzavření těchto nově vytvořených oken. Dalším úkolem komponenty GUI bude volat příslušné metody třídy z komponenty Main Controller. Opačný průběh volání metod bude v případě, když třída z komponenty Main Controller bude chtít zobrazit nějakou výjimku uživateli Komponenta Main Controller Jako můstek mezi všemi komponentami bude právě komponenta Main Controller. Bude obstarávat veškerou komunikaci mezi komponentami a to tak, že bude, ve správném pořadí, volat metody tříd obsažených v těchto komponentách. Sled volání metod bude určen na základě uživatelského vstupu. Pro předání parametrů z komponenty GUI bude mít Main Controller své vlastní veřejné metody. Metody budou zajišťovat ověření vstupů a v případě neshody provede zavolání metody z komponenty GUI. Ta zobrazí příslušné varování uživateli. 23

40 24

41 4 Popis implementace V této kapitole se budeme zabývat implementací výše zmíněných komponent. Primárně se ale zaměříme na algoritmy generující řídké matice. Implementace ostatních tříd byla rutina, a protože analýza byla relativně dobře provedena, byla jejich implementace zcela bez potíží. 4.1 Struktura systému Celý systém je rozčleněn do čtyř komponent. Nejdůležitější komponentou je Matrix Generator, která umí generovat řídké matice. Vývoj aplikace začal právě třídami z této komponenty. Spolu s ní probíhalo vytváření třídy z komponenty Matrix Saver, která jak už bylo mnohokrát zmíněno, úzce spolupracuje právě s třídami komponenty Matrix Generátor. Následně, po úspěšném otestování, byla vytvořena třída z komponenty Main Controller. Během tvorby Main Controlleru probíhala tvorba grafického rozhraní, kdy Main Controller byl souběžně doplňován o nezbytné metody pro komunikaci s GUI. A právě v tomto pořadí bude popsaná implementace uvedených komponent Komponenta Matix Generator Komponenta, která je označována za jádro celé aplikace. Část, která vykonává generování řídkých matic, obsahuje celkem 2 třídy. První třída Simple je určená pro generování náhodných matic, druhá třída Band pro generování pásových matic. Obě třídy se liší nejen prováděnou operací, ale taky konstruktory. Konstruktory se od sebe liší vstupními parametry a metodami, které poskytují. 25

42 Pro náhodnou matici je určen konstruktor z třídy Simple a jeho hlavička vypadá následovně: Simple(int šířka_elementu, int velikost_matice, int počet_nenulových_prvků, boolean regularní); a pro pásovou matici se volá konstruktor třídy Band: Band(int šířka_pásu_pod_diagonálou, int šířka_pásu_nad_diagonálou, int velikost_matice);. Třída Simple obsahuje metody: generatenormal() metoda slouží pro vygenerování normální matice. generatesymetrictriang() metoda vygeneruje symetrickou matici, konkrétně její část nad hlavní diagonálou a samotnou hlavní diagonálu. Celá symetrická matice je vytvářená při ukládání do souboru. generateuppertriangle() metoda vygeneruje horní trojúhelníkovou matici. Metoda neslouží pouze pro tento typ matice, ale i pro dolní trojúhelníkovou matici. O tom, jaký typ matice se uloží, se rozhodne použitím příslušné metody třídy z komponenty Matix Saver. Třída Band obsahuje metody: generatenormal() metoda generuje do paměti pásovou matici o zadaných parametrech. generatesymetricvalues() metoda zajistí vygenerování diagonály a pásu nad hlavní diagonálou. Symetrická pásová matice je vytvářená během ukládání do souboru. 26

43 Mimo jiné, výše zmíněné třídy implementují metody pro získání obsahu polí rows[], cols[], vals[], které reprezentují formát CRS. Metody jsou typu getr 1 a jsou následující: int[] getrows() vrací pole obsahující ukazatelé na konce řádků (dle specifikace formátu CRS). int[] getcols() vrací pole indexů sloupců (dle specifikace CRS). int[] getvals() vrací pole s nenulovými prvky z rozsahu -20 až 20, množinově <-20, 20> mimo Princip generování náhodných řídkých matic Princip, jakým se budou generovat náhodné matice, byl zvolen následovně. Původně se nabízelo několik řešení, kterými by se dalo generovat náhodné matice, např. souběžně generovat délky řádků matice a indexy sloupců, ale tady docházelo k omezení náhodnosti matice. Problém byl v tom, že i když byl znám počet nenulových prvků, které se ještě můžou vložit, aby nebyl překročen stanovený limit prvků, docházelo k tomu, že poslední generované řádky trpěly tím, že obsahovaly pouze minimální počet nenulových prvků. Proto jsem přistoupil k řešení, že se počet nenulových prvků na jednotlivé řádky vygeneruje samostatně. Po vygenerování se pak předají metodě, která už pouze bude doplňovat indexy sloupců s tím. Výhodou tohoto řešení bude, že bude předem znám počet nenulových prvků na řádek a vyvarujeme zmíněnému nedostatku. Generování počtu nenulových prvků na řádek popisu vývojový diagram na obrázku Obrázek V programovacím jazyce Java se označení getr používá zejména pro metody přistupující k privátním proměnným daného objektu a vracejí jejich obsah. Opakem jsou setry, které slouží pro nastavování privátních proměnných. 27

44 Start 1. Vypočti průměrný počet elementů na řádek 2. Vypočti rozšířený průměrný počet elementů na řádek Je matice regulární? ANO NE 3. Nastav minimální počet elementů na 0 3. Nastav minimální počet elementů na 1 4. Ke každé řádce matice vygeneruj množství nenulových prvků Nadbývá množství nenulových prvků? NE Nedostatek nenulových prvků? NE ANO ANO 5. Snížit počet nenulových prvků na požadované množství 6. Zvýšit počet nenulových prvků na požadované množství Konec Obrázek 16 Vývojový diagram pro vygenerování množství nenulových prvků na řádek 28

45 Pozn. č. 1: V textu se často zaměňuje pojem element za nenulové prvky. V principu jsou nenulové prvky přepočítané z elementů. Je zapotřebí si uvědomit, že ne vždy se podaří odebrat nebo přidat celý element, je-li matice např. trojúhelníkového typu a ve výsledku má být regulární. Tím chci naznačit, že do řádku, který má max. délku 2 se nedá vložit celý element o šířce 5 a proto dochází ke vkládání nenulových prvků neboli tzv. zkrácených elementů. Pozn. č. 2: Zkracování elementů se musí provádět u regulární horní a dolní trojúhelníkové matice. Dále bývá tato jev způsobován symetrickými maticemi a to tehdy, leží-li nějaký prvek na diagonále. Tyto prvky se tzv. nedvojí při vytváření symetrické matice, s čím je počítáno při generování prázdné matice. Má-li být matice řídká, je pravděpodobnost výskytu nenulového prvku na diagonále velice malá. Vysvětlení vývojového diagramu zobrazeného na obrázku Obrázek 16: 1. Spočte se průměrný počet elementů na řádek. 2. Spočte se rozšířený průměrný počet elementů na řádek a to tak, že se přičte polovina průměrného počtu elementů na řádek k stávající hodnotě. Tím se stanoví prozatímní maximální počet elementů na řádek. 3. Určí se minimální počet elementů na řádek. Ve všech případech, které jsem potřeboval, se hodnota pohybovala mezi čísly 0 a 1. Minimální počet elementů s hodnotou 1 se nastavuje tehdy, má-li být výsledná matice regulární, jinak Řádek po řádku se do statického pole rows[velikost matice] generuje počet prvků na řádek (jak jsou řádky reprezentované v CRS formátu je uvedené v podkapitole 2.1, ale místo ukazatelů na konce řádků zde zatím bude počet prvků na řádek). Počet prvků na řádek ve většině případů odpovídá celistvému násobku elementů. Případy, kdy tomu tak není, se vyskytují tehdy, když se do řádku nevejde celý element. Více k této problematice v poznámce č. 2. Důležité je, že taková matice je zcela náhodná. 29

46 5. V další fázi se nachází kontrola počtu prvků. První část kontroly zjišťuje, zda počet vygenerovaných prvků je nadbytečný. Je-li počet nadbytečný, dojde k odebírání elementů (nenulových prvků). To se provádí while cyklem. Ještě před jeho samotným spuštěním se provede náhodné vygenerování čísla řádku, od kterého se začnou odebírat prvky. Tento náhodný výběr řádku přispívá ke zvýšení náhodnosti matice. Elementy se začnou odebírat tak, že se stanoví maximální možný počet prvků k odebrání (bere se ohled na zachování regulárnosti matice). Z tohoto stanoveného počtu se generátorem náhodných hodnot vygeneruje počet elementů k odebrání. Minimální počet prvků, který se vždy odebere je 1, tím je zaručeno, že while cyklus nepoběží nekonečněkrát. 6. V druhé části kontroly se zjišťuje, jestli je množství nenulových prvků menší, než je přípustné. Pokud ano, je princip přidávání elementů analogický s principem odebírání elementů v bodě č. 5. Výše uvedeným postupem získáme pole rows[], které obsahuje počet nenulových prvků na řádek. Tento formát sice neodpovídá formátu CRS, ale můžeme ho snadno vytvořit. Celková cena pro vytvoření bude minimální, bude se rovnat velikosti pole rows[]. Bohužel je toto největší míra náhodnosti, kterou se podařilo dosáhnout. Obecně se náhodnost všech algoritmů jevila jako velký problém. Nicméně se tím vyřešil problém, který je nastíněn výše a to, že poslední generované řádky netrpí nedostatkem prvků. Doteď byly předchozí odstavce věnovány problematice generování velikosti řádků. Proto je čase se obeznámit s generováním indexů sloupců a nenulových prvků. Další fáze je generování indexů sloupců do pole cols[počet prvků matice]. Zde získáváme velkou výhodu, protože už známe, kolik nenulových prvků se může vložit na daný řádek a nemusí se brát ohled na zbývající řádky. 30

47 Zároveň ve fázi generování indexů sloupců probíhá generování náhodných hodnot do pole vals[počet nenulových prvků]. Je to z toho důvodu, že pole vals[] je stejně velké jako pole cols[]. To nám dovoluje vložit hodnotu indexu sloupce na pozici cols[i] a zároveň na pozici vals[i] náhodně vygenerovanou hodnotu nenulového prvku.. Tímto ušetříme program jednoho for cyklu, který by prošel celé pole vals[] a každé jeho položce by vygeneroval hodnotu nenulového prvku. V některých případech je generování indexů sloupců specifickou záležitostí. Nicméně ve většině případů je o analogickou záležitost. Průběh generování indexů sloupců do pole cols[] a hodnot do pole vals[] je znázorněn na obrázku Obrázek

48 Start I. Spočti skutečný počet nenulových prvků v matici. II. Na základě skutečného počtu nenulových prvků vytvoř pole cols[] a vals[]. III. Urči minimální a maximální index na řádku. IV. Urči počáteční index. V. Vygeneruj indexy v závislosti na šířce elementu. K těmto indexům vygeneruj náhodné Poslední řádek matice? Ne Ano Existují v matici zkrácené elementy? Ano VI. Doplň indexy a hodnoty do zkrácených elementů. Ne Konec Obrázek 17 Vývojový diagram generování indexů sloupců a hodnot 32

49 Popis vývojového diagramu na obrázku Obrázek 17. I. Spočte se celkový počet nenulových prvků v řídké matici. To se provede tak, že sečte obsah pole rows[]. Z důvodu, který je uveden v pozn. č. 2, se nemůže počet nenulových prvků, který zadal uživatel, vzít jako skutečný počet nenulových prvků. II. Na základě skutečného počtu nenulových prvků se vytvoří pole cols[] a pole vals[]. Obě tyto pole mají velikost, která se rovná skutečnému počtu nenulových prvků generované řídké matice. Ovšem toto neplatí v případě symetrické matice, kdy je generovaná pouze část matice. Velikosti polí těchto matic jsou zhruba poloviční. III. Dalším krokem je samotné generování indexů sloupců a hodnot nenulových prvků matice. Celá tato operace je soustředěna do 3 for cyklů, z nichž dva jsou vnořené do sebe tak, že všechny 3 tvoří strom hloubky 3. Hlavní cyklus, který má v sobě vnořený cyklus, zajišťuje procházení matice řádek po řádku. Vnořený cyklus se stará o generování indexů sloupců. Generování těchto indexů sloupců probíhá tak, že se určí minimální možný index na řádku a maximální možný index na řádku. Toto nastavení má především význam v případě, že generujeme symetrickou nebo jednu z trojúhelníkových matic. V tomto případě pak dochází k časté změně minimálního dovoleného indexu. IV. Po určení minimálního a maximálního indexu sloupců je vygenerován tzv. počáteční index, kterým je dán počátek vložení elementu matice. Tento počáteční index je vygenerován tak, aby vždy došlo k bezproblémovému vložení všech indexů sloupců a aby výsledné nenulové prvky byly rozmístěny po celé délce řádku matice. To je vše, co první vnořený cyklus vykonává. V. Druhý vnořený cyklus, se stará o vložení celého elementu. To provádí tak, že předaný počáteční index si vezme za svůj referenční. K tomuto indexu pak v cyklu přičítá neustále hodnotu 1 tak dlouho, dokud nedosáhne plné délky elementu. S tímto navyšováním indexů se do pole cols[] vkládají zmíněné indexy sloupců a do pole vals[] se generují hodnoty nenulových prvků, které pak budou odpovídat řádku a sloupci, které jsou určené hlavním cyklem a druhým vnořeným cyklem. 33

50 VI. K provedení bodu č. VI dochází pouze tehdy, jsou-li v matici elementy kratší než jejich požadovaná velikost. To se týká pouze řádků, které mají délku menší než je šířka elementu. Takové případy se vyskytují v pouze trojúhelníkových maticích, u kterých je požadována regulárnost (pozn. netýká se symetrické regulární ). Dojde tedy k doplnění indexů a hodnot posledním prvkům. V několika předešlých odstavcích byly popsány základní principy algoritmu pro generování náhodných řídkých matic. Uvedené principy by měli postačit k pochopení fungování generujícího algoritmu náhodných matic. Operační složit algoritmu odpovídá Θ(n). Paměťová složitost je Ο(n + velikost matice) Princip generování náhodné řídké symetrické matice Generování matice tohoto typu se v mnohém od jiných typů matic mírně liší. Především se liší v tom, jak se v systému interpretuje počet nenulových prvků matice zadaných uživatelem. Interpretuje se jako polovina této hodnoty. Proč? To vyplývá z postupu, jakým je symetrická matice generována. Důležitou vlastností je symetričnost. Co je to symetrická matice je popsáno v podkapitole Z ní lze vyčíst, že všechny prvky nad hlavní diagonálou mají svůj protějšek 2 pod hlavní diagonálou. Hlavní diagonála je pro obě části společná. Z toho vyplývá, že při generování lze ušetřit téměř polovinu paměťového prostoru, protože bude stačit vygenerovat ½ prvků. Následně se při ukládání matice do souboru zvolí metoda, která z této půl matice vytvoří plnohodnotnou symetrickou řídkou matici. Proto postačí vygenerovat část matice napravo od hlavní diagonály (včetně). Fáze generování počtu nenulových prvků na řádek probíhá téměř stejně, jak bylo uvedeno výše. Co je zde jiné, je bod č. 3. Má-li být matice regulární, potom už není požadavkem, aby v každém řádku byl alespoň 1 element nebo prvek. Při hlubším zamýšlení se dá dojít k závěru, že stačí mít alespoň jeden element každých x řádků. Číslo x se rovná délce jednoho elementu + 1. To je 2 Protějšek zde označuje prvek, který má stejnou hodnotu, zaměněný index řádku za index sloupce a index sloupce za index řádku. 34

51 dáno tím, jak se hodnoty kopírují při symetrii. V tabulce Tabulka 1 je znázorněná matice, která má šířku elementu 3. Už tento element o velikosti 3 zaručí matici o rozměrech 4x4 regulárnost. Ta se dosáhne vhodným umístěním elementu dle uvedené tabulky Tabulka 1. Z matice taky vyplývá, že největší pokrytí nenulovými prvky získáme při umístění elementu ihned napravo od hlavní diagonály Tabulka 1 Symetrická náhodná matice Operační složit algoritmu je stejná jako v předchozím případě, ale pracuje se s n/2 nenulových prvků Princip generování řídkých pásových matic Generování řídkých pásových matic je o mnoho jednodušší záležitost, než bylo generování náhodných řídkých matic. Hlavním důvodem zjednodušení je skutečnost, že zde není problematika náhodnosti. Už totiž před samotným generováním je známo, že nenulové prvky se budou vyskytovat v subdiagonálach kolem hlavní diagonály. Takové uspořádání ve výsledku vytvoří pás nenulových prvků souběžný s hlavní diagonálou. V základu je zapotřebí jeden algoritmus pro generování pásových matic, ať už symetrických nebo nesymetrických. Jeho vstupem je šířka pásu nad diagonálou a pod diagonálou. Má-li být matice symetrická, dojde k vygenerování pouze části nad hlavní diagonálou. To se zajistí pouhým nastavením šířky pasu pod diagonálou na hodnotu 0. Symetrická matice se vytvoří při zápisu matice do souboru, kdy se prvkům nad hlavní diagonálou zamění indexy sloupců a řádků. Takto zaměněné indexy se spolu s příslušnou hodnotou nenulového prvku uloží do souboru. Společně s prvky z hlavní diagonály a s prvky nad diagonálou vytvoří symetrickou matici. Vývojový diagram průběhu generování pásové matice je zobrazen na obrázku Obrázek

52 Operační složit algoritmu odpovídá Θ(n). Paměťová složitost je Ο(n). Start Je matice symetrická? Ano Ne Vygeneruj prvky pod hlavní diagonálou. Vygeneruj prvky na hlavní diagonále a prvky nad hlavní diagonálou Konec Obrázek 18 Vývojový diagram průběhu generování pásové matice 36

53 4.1.2 Komponenta Matrix Saver Komponenta Matix Saver v sobě sdružuje třídy pro ukládání řídkých matic do souborů. V této fázi vývoje obsahuje pouze třídu MMCoordianteSave, která poskytuje metody pro uložení matice ve formátu MM coordinate (Matrix Market). Jak už bylo několikrát zmíněno, nebude obtížné přidat do této komponenty další třídy, které umožní uložení matic do jiných formátů, jako např. CRS, CDS. Aby třída MMCoordinaSave mohla uložit matici do souboru, je zapotřebí jejímu konstruktoru předat potřebné objekty. Hlavička konstruktoru třídy MMCoordinateSave vypadá následovně: MMCoordinateSave(int[]rows, int[] cols, int[] vals, int matrixsize, File file). Obsahy polí rows[], cols[] a vals[] získáme velice jednoduše prostřednictvím getrů obsažených ve třídě (třídách) z komponenty Matrix Generator. Jména příslušných getrů korespondují s názvy polí, což přidává na přehlednosti kódu. Dalším parametr je matrixsize, který musí být shodný s velikosti matice, která je předávána v prvních třech parametrech konstruktoru. V podstatě by tento parametr zde nemusel být, protože velikost matice se dá určit z velikosti pole rows[]. Posledním vstupním parametrem je file. Ten určuje, kde se uloží předaná matice. O vytvoření objektu File se postará komponenta MainController. Třída MMCoordinateSave obsahuje metody, které jsou úzce propojené s metodami, které generují matice. Není proto možné použít jakoukoliv metodu na předanou matici. Takové použití vede k nesprávnému chování celého programu. Správnému použití metod pomáhá jejích rozdělení do dvou skupin a to do skupiny savesimple, která má na starost ukládání náhodných matic a do skupiny saveband, která je určena pro ukládání pásových matic. Proto v následující části bude stručně uvedena funkčnost jednotlivých metod a s jakým typem matice mohou být použité. Sled metod, generujících matice a metod pro uložení matic, má na starost Main Controller. 37

54 Obecné schéma popisu tříd: Kategorie savesimple (pro náhodnou matici) nebo saveband (pro pásovou matici). Název metody z dané třídy s krátkým popisem funkčnosti. Jméno_třídy.jméno_metody, která pochází z komponenty Matrix Generátor. Metoda, která může použít s výše uvedenou metodou. savesimple savesimplenormal() umožňuje uložit normální matici. Simple.generateNormal(). savesimplesymetric() umožňuje uložit symetrickou matici. Vzhledem k tomu, že tato metoda přijímá pouze vygenerovanou horní část matice včetně hlavní diagonály, je zapotřebí, aby při zápisu do souboru byly zapisovány i prvky z části pod hlavní diagonálou. Simple.generateSymetricTriang(). savesimpleupper() slouží pro uložení horní trojúhelníkové matice. Simple.generateUpperTriangle(). savesimpleupper() slouží pro uložení dolní trojúhelníkové matice. Protože vstupní matice je horní trojúhelníková, musí se před uložením matice přepočítat indexy sloupů. Simple. generateuppertriangle(). saveband savebandnormal() jeho funkce umožňuje uložit pásovou matici. Matice je předávaná kompletní, není zapotřebí nic přepočítávat. Band. savebandnormal(). savebandsymetric() metoda pracuje pouze s vygenerovanou horní částí matice včetně hlavní diagonály. Proto se zároveň s ukládáním do souboru provádí přeindexování části matice nad hlavní diagonálou a kopíruji se hodnoty nenulových prvků. Band. savebandsymetric(). 38

55 Použití metod ve správném spojení je zaručeno správné vygenerování do výstupního souboru. Jak vypadá reprezentace matice v souboru ve formátu MM coordinate, je ukázáno v následující podkapitole Formát MM coordinate pro uložení matice Formát MM coordinate (Matrix Market) je formát, který reprezentuje matici způsobem, že každý její nenulový prvek je určen absolutní polohou v matici. Absolutní poloha je určena indexem řádku a sloupce. Jelikož nejnižší index může být hodnota 0 nebo 1, je tato skutečnost uvedena v hlavičce. Celá struktura souboru vypadá následovně: 1. Hlavička obsahuje název programu, kterým byl tento soubor vygenerován. Dále obsahuje informace o autorovi, o verzi programu a další informace. V našem případě důvod vytvoření projektu a poděkování. Hlavička dále obsahuje: a. Popis jednotlivých symbolů ASCII tabulka, která popisuje významy použitých symbolů, např. symbol pro nadpis, symbol pro komentář atd. b. Informaci o matici - první nezakomentovaný řádek uvádí počet řádků, sloupců a množství nenulových prvků. Jednotlivé údaje na řádku jsou od sebe oddělené mezerou. c. Popis dat reprezentující řídkou matici obsahuje popis dalších nezakomentovaných řádků. Stanovuje, co která hodnota na řádku reprezentuje (řádek, sloupec, hodnota). Dále informuje, o nejnižším možném indexu sloupce a řádku. 2. Vlastní data První nezakomentovaný řádek obsahuje informaci uvedenou v odstavci b. Další řádky obsahují zápis prvků matice. Všechny výše uvedené informace postačují k tomu, aby matice mohla být zpětně zrekonstruovaná. Nepovinně je hlavička matice ještě doplněná o řádek, který informuje o možných hodnotách prvků. Ukázka hlavičky je v tabulce 39

56 ##Generátor řídkých matic # Autor: Tomáš Bílek # Verze 1.0 # Tento projekt byl vytvořen na základě zadání bakalářské práce. # Zvláštní poděkování patří panu Ing. Ivanu Šimečkovi, Ph.D. za pomoc při vytváření tohoto # projektu. #========================================================================================= # # Tento soubor reprezentuje řídkou matici o rozměrech MxN s # L nenulovými prvky v následujícím Matrix Market formátu: # # # ##Generátor řídkých matic <--- nadpis # # <--+ # # komentář -- 0 nebo více # # <--+ # M N L <--- řádky, sloupce, hodnoty # R1 C1 A(R1, C1) <--+ # R2 C2 A(R2, C2) # R2 C2 A(R1, C2) -- L řádky #... # RL CL A(RL, CL) <--+ # # # Indexy sloupců a řádků začínají na indexu 1, např. A(1, 1) je první element. # #========================================================================================= # Nenulové prvky můžou nabývat hodnot z množiny celých čísel v rozsahu <-20, 20>, mimo 0." Tabulka 2 Ukázka hlavičky výstupního souboru ve formátu MM coordinate Struktura hlavičky byla převzatá z [8] Komponenta Main Controller Main controller obsahuje pouze jednu třídu, která obstarává komunikaci mezi všemi komponentami. Obsahuje statické metody typu setr, prostřednictvím kterých přijímá parametry z grafického rozhraní. Dále zachytává všechny výjimky a jejich obsah posílá komponentě GUI, která se stará o jejich zobrazení. Základem jsou 2 statické metody, které spouštějí generování matic voláním příslušné posloupnosti metod z komponent Matrix Generator a Matrix Saver. Větvení uvnitř metod je realizováno pomocí větvícího bloku switch Komponenta GUI Je komponenta určená pro zobrazení grafického uživatelského rozhranní. Kromě zobrazení hlavního okna také obstarává zobrazování výjimek, které se vyskytnou během kontroly vstupních dat nebo v době běhu výkonné části programu. Hlavním úkolem komponenty GUI je volat příslušné metody Main Controlleru na základě uživatelových pokynů, tj. při zadávání velikosti matice, 40

57 při stisku klávesy, atd. Tato interakce vyvolá předání vstupních parametrů zadaných uživatelem do řídicí části programu, tedy do Main Controlleru. Všechny vstupy jsou ošetřeny pomocí Plain Documentů, které jsou přiřazené jednotlivým vstupním polím (tzv. JEditTextům). V Plain Documentech Metoděje přetížená metoda insertstring ve které je definované, jaké řetězce (znaky) může JTextEdit přijímat. V tomto případě se jedná o kontrolu, zda znaky vkládané uživatelem odpovídají přirozeným číslům včetně nuly. Pokud vkládaný znak nebo řetězec neodpovídají číslu, nejsou vloženy do JTextEditu. Výhoda řešení spočívá v nezatěžování Main Controlleru, který by v jiném případě musel kontrolovat správnost zadaného řetězce. Takto definovaný dokument nám zaručí, že předaný řetězec Main Controlleru bude reprezentovat přirozené číslo včetně nuly. Grafické rozhraní je postaveno na Frameworku Java Swing. Pro vytváření samotné není použit žádný grafický designer, ale je vytvořen manuálně. Designer není použit z důvodu generování velkého množství neefektivního kódu. Podle analýzy byl kladen velký důraz na přehlednost a jednoduchost celého grafického rozhraní. Důraz byl kladen na to, aby se stejné komponenty nebo podobného významu nacházely na stejných pozicích v obou záložkách. Protože k jednoduchosti patří i příjemné ovládání, je možnost celý program plně ovládat pomocí klávesových zkratek. To umožňuje použití programu i v případě, není-li u počítače dostupná myš. K jednotlivým položkám se přistupuje mocí klávesy ALT + podtržené písmeno v názvu vlastnosti. Dalším možným způsobem je se k dané položce dostat pomocí klávesy TAB. Co se týče velikosti jednotlivých oken, mají všechny stanovou fixní velikost až na okno s nápovědou. Hierarchie hlavního menu: Soubor o Konec ukončí aplikaci Nápověda o Nápověda zobrazí nápovědu programu o O Programu zobrazí okno s informacemi o programu 41

Toto zadání je podepsané děkanem a vedoucím katedry, po obhajobě).

Toto zadání je podepsané děkanem a vedoucím katedry, po obhajobě). Na tomto místě bude oficiální zadání vaší práce Toto zadání je podepsané děkanem a vedoucím katedry, musíte si ho vyzvednout na studiijním oddělení Katedry počítačů na Karlově náměstí, v jedné odevzdané

Více

8. Posloupnosti, vektory a matice

8. Posloupnosti, vektory a matice . jsou užitečné matematické nástroje. V Mathcadu je často používáme například k rychlému zápisu velkého počtu vztahů s proměnnými parametry, ke zpracování naměřených hodnot, k výpočtům lineárních soustav

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

2 Spojité modely rozhodování

2 Spojité modely rozhodování 2 Spojité modely rozhodování Jak již víme z přednášky, diskrétní model rozhodování lze zapsat ve tvaru úlohy hodnocení variant: f(a i ) max, a i A = {a 1, a 2,... a p }, kde f je kriteriální funkce a A

Více

Elektronická dokumentace - LATEX. Maticové operace

Elektronická dokumentace - LATEX. Maticové operace Elektronická dokumentace - LATEX Maticové operace 29.listopadu 2009 Luděk Bordovský (bor0022) Fakulta elektrotechniky a informatiky VŠB-TU Ostrava Uživatelská příručka 1 Obsah 1 Úvod 3 2 Ovládání 3 3 Operace

Více

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j. Kapitola 3 Počítání s maticemi Matice stejného typu můžeme sčítat a násobit reálným číslem podobně jako vektory téže dimenze. Definice 3.1 Jsou-li A (a ij ) a B (b ij ) dvě matice stejného typu m n, pak

Více

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly Matice Matice typu (m, n) je uspořádaná m-tice prvků z řádky matice.. Jednotlivé složky této m-tice nazýváme Matice se zapisují Speciální typy matic Nulová matice všechny prvky matice jsou nulové Jednotková

Více

GRAFY A GRAFOVÉ ALGORITMY

GRAFY A GRAFOVÉ ALGORITMY KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO GRAFY A GRAFOVÉ ALGORITMY ARNOŠT VEČERKA VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ

Více

Metodická příručka pro učitele. InspIS SET modul školní testování

Metodická příručka pro učitele. InspIS SET modul školní testování Metodická příručka pro učitele InspIS SET modul školní testování Tato Metodická příručka pro učitele byla zpracována v rámci projektu Národní systém inspekčního hodnocení vzdělávací soustavy v České republice

Více

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit

Více

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0 Semestrální projekt Předmět: Programování v jazyce C Zadání: Operace s maticemi Uživatelský manuál ver. 1.0 Jakub Štrouf Obor: Aplikovaná informatika Semestr: 1. Rok: 2009/2010 Obsah: 1. Úvod 1.1. Technická

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu Word 2007 Word 2007 egon Spuštění, vzhled, zobrazení dokumentu Jan Málek 30.4.2010 Word 2007 V roce 2007 přichází firma Microsoft s novou verzí kancelářského balíku MS Office 2007 a tedy i textového editoru

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Osmé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 20.11.2017,

Více

3. Matice a determinanty

3. Matice a determinanty . Matice a determinanty Teorie matic a determinantů představuje úvod do lineární algebry. Nejrozsáhlejší aplikace mají matice a determinanty při řešení systémů lineárních rovnic. Pojem determinantu zavedl

Více

ADMINISTRAČNÍ PŘIRUČKA verze 1.1.19. Strana 2 (celkem 20) Strana 3 (celkem 20) 1. Obsah 1. Obsah...3 2. Úvod...5 2.1. Požadavky na hardware...5 2.2. Požadavky na software...5 2.3. Instalace...5 2.4. Výchozí

Více

Parametrizace, harmonogram

Parametrizace, harmonogram Parametrizace, harmonogram Modul slouží pro parametrizování informačního systému a pro vytváření časového plánu akademického roku na fakultě. Fakulty si v něm zadávají a specifikují potřebné "časové značky"

Více

5. Maticová algebra, typy matic, inverzní matice, determinant.

5. Maticová algebra, typy matic, inverzní matice, determinant. 5. Maticová algebra, typy matic, inverzní matice, determinant. Matice Matice typu m,n je matice složená z n*m (m >= 1, n >= 1) reálných (komplexních) čísel uspořádaných do m řádků a n sloupců: R m,n (resp.

Více

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace Filtrace snímků ve frekvenční oblasti Rychlá fourierova transformace semestrální práce z předmětu KIV/ZVI zpracoval: Jan Bařtipán A03043 bartipan@students.zcu.cz Obsah Úvod....3 Diskrétní Fourierova transformace

Více

Uživatelský manuál. A3600 DL ( Data Download)

Uživatelský manuál. A3600 DL ( Data Download) Uživatelský manuál A3600 DL ( Data Download) Aplikace : Jednoduchý program pro přenášení dat z on line monitorovacího systému A3600 Export měřených statických dat do souboru Zobrazení grafů naměřených

Více

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE FAKULTA INFORMATIKY A STATISTIKY Hlavní specializace: Ekonometrie a operační výzkum Název diplomové práce Optimalizace trasy při revizích elektrospotřebičů Diplomant: Vedoucí

Více

Soustavy lineárních rovnic

Soustavy lineárních rovnic 7 Matice. Determinant Soustavy lineárních rovnic 7.1 Matice Definice 1. Matice typu (m, n) jesoustavam n reálných čísel uspořádaných do m řádků a n sloupců a 11, a 12, a 13,..., a 1n a 21, a 22, a 23,...,

Více

Uživatelský manuál Radekce-Online.cz

Uživatelský manuál Radekce-Online.cz Uživatelský manuál Radekce-Online.cz (revize 06/2011) V prvním kroku třeba vstoupit do administrace na adrese www.redakce-online.cz kterou naleznete na záložce Administrace / Vstup do Administrace, pro

Více

Analýza dat na PC I.

Analýza dat na PC I. Lékařská a Přírodovědecká fakulta, Masarykova univerzita Analýza dat na PC I. Základy programu STATISTICA IBA výuka 2008/2009 StatSoft, Inc., http://www.statsoft.com/, http://www.statsoft.cz Verze pro

Více

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov Implementace A* algoritmu na konkrétní problém orientace v prostoru budov Popis problému Orientaci ve známém prostředí lze převést na problém nalezení cesty z místa A do místa B. Obecně platí, že robot

Více

13. Třídící algoritmy a násobení matic

13. Třídící algoritmy a násobení matic 13. Třídící algoritmy a násobení matic Minulou přednášku jsme probírali QuickSort, jeden z historicky prvních třídících algoritmů, které překonaly kvadratickou složitost aspoň v průměrném případě. Proč

Více

Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech.

Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech. Kapitola 9 Skalární součin Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech. Definice 9.1 Je-li x = (x 1,..., x n ) T R n 1 reálný

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

KIV/PIA Semestrální práce

KIV/PIA Semestrální práce KIV/PIA Semestrální práce Diskuzní fórum Tomáš Časta(A10N0057P) casta@students.zcu.cz 1. Architektura aplikace 1.1 MVC Model-view-controller (MVC) je softwarová architektura, která rozděluje datový model

Více

Šifrování/Dešifrování s použitím hesla

Šifrování/Dešifrování s použitím hesla Fakulta elektrotechnická Katedra teoretické elektrotechniky Dokumentace k semestrální práci Šifrování/Dešifrování s použitím hesla 2012/13 Petr Zemek Vyučující: Ing. Petr Kropík, Ph.D Předmět: Základy

Více

Tabulkové processory MS Excel (OpenOffice Calc)

Tabulkové processory MS Excel (OpenOffice Calc) Maturitní téma: Tabulkové processory MS Excel (OpenOffice Calc) Charakteristika tabulkového editoru Tabulkový editor (sprematuritníadsheet) se používá všude tam, kde je třeba zpracovávat data uspořádaná

Více

TVORBA VÝROBNÍ DOKUMENTACE CV

TVORBA VÝROBNÍ DOKUMENTACE CV Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní TVORBA VÝROBNÍ DOKUMENTACE CV Návody do cvičení předmětu Výrobní dokumentace v systému CAD Dr. Ing. Jaroslav Melecký Ostrava 2011 Tyto studijní

Více

Malý systém počítačové podpory pro rozvrh obhajob a zkoušek

Malý systém počítačové podpory pro rozvrh obhajob a zkoušek MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Malý systém počítačové podpory pro rozvrh obhajob a zkoušek BAKALÁŘSKÁ PRÁCE Radek Petr Brno, 2007 Prohlášení Prohlašuji, že tato práce je mým původním autorským

Více

V praxi pracujeme s daty nominálními (nabývají pouze dvou hodnot), kategoriálními (nabývají více

V praxi pracujeme s daty nominálními (nabývají pouze dvou hodnot), kategoriálními (nabývají více 9 Vícerozměrná data a jejich zpracování 9.1 Vícerozměrná data a vícerozměrná rozdělení Při zpracování vícerozměrných dat, hledáme souvislosti mezi dvěmi, případně více náhodnými veličinami. V praxi pracujeme

Více

10. Editor databází dotazy a relace

10. Editor databází dotazy a relace 10. Editor databází dotazy a relace Dotazy Dotazy tvoří velkou samostatnou kapitolu Accessu, která je svým významem téměř stejně důležitá jako oblast návrhu a úpravy tabulek. Svým rozsahem je to ale oblast

Více

NEXIS 32 rel. 3.50. Generátor fází výstavby TDA mikro

NEXIS 32 rel. 3.50. Generátor fází výstavby TDA mikro SCIA CZ, s. r. o. Slavíčkova 1a 638 00 Brno tel. 545 193 526 545 193 535 fax 545 193 533 E-mail info.brno@scia.cz www.scia.cz Systém programů pro projektování prutových a stěnodeskových konstrukcí NEXIS

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

Uživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv. V prostředí společnosti. Pražská vodohospodářská společnost a.s.

Uživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv. V prostředí společnosti. Pražská vodohospodářská společnost a.s. Uživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv V prostředí společnosti Pražská vodohospodářská společnost a.s. Obsah 1. ÚVOD... 5 2. PROSTŘEDÍ WORKSPACE... 5 2.1 TECHNOLOGIE

Více

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy 1 Lineární algebra Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy islámského matematika Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném

Více

8 A (strana 1) Soubory a složky, procházení, orientace

8 A (strana 1) Soubory a složky, procházení, orientace 8 A (strana ) Logické členění dat v počítači: V počítači je uloženo velmi mnoho dat. Některá jsou důležitá pro běh Windows, tedy tzv. operačního systému, což je základ naší práce s počítačem. Jiná data

Více

Tento počítač. 1 Seznámení s programem. 2 Spuštění programu. Adresářové operace Popis programu Tento počítač, podstata adresářových operací.

Tento počítač. 1 Seznámení s programem. 2 Spuštění programu. Adresářové operace Popis programu Tento počítač, podstata adresářových operací. Tento počítač 1 Seznámení s programem Tento počítač je program integrovaný ve Windows, který slouží ke správě souborů a složek na discích, tedy k provádění adresářových operací. Najdeme ho v nabídce START

Více

Technologie počítačových sítí 5. cvičení

Technologie počítačových sítí 5. cvičení Technologie počítačových sítí 5. cvičení Obsah jedenáctého cvičení Active Directory Active Directory Rekonfigurace síťového rozhraní pro použití v nadřazené doméně - Vyvolání panelu Síťové připojení -

Více

1 / 11. Slovíčka. Jiří Heralt. Dokumentace

1 / 11. Slovíčka. Jiří Heralt. Dokumentace 1 / 11 Slovíčka Jiří Heralt Dokumentace Úvod Slovíčka je jednoduchá webová aplikace k učení nejen anglických slovíček. Umožňuje vytvořit si vlastní kategorie(sady) a naplnit si je vlastními daty. Z těchto

Více

DUM 01 téma: Úvod do PowerPointu

DUM 01 téma: Úvod do PowerPointu DUM 01 téma: Úvod do PowerPointu ze sady: 03 tematický okruh sady: Tvorba multimediální ze šablony: 09 počítačová grafika určeno pro: 1-4. ročník vzdělávací obor: vzdělávací oblast: číslo projektu: anotace:

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

Matice se v některých publikacích uvádějí v hranatých závorkách, v jiných v kulatých závorkách. My se budeme držet zápisu s kulatými závorkami.

Matice se v některých publikacích uvádějí v hranatých závorkách, v jiných v kulatých závorkách. My se budeme držet zápisu s kulatými závorkami. Maticové operace Definice Skalár Představme si nějakou množinu, jejíž prvky lze sčítat a násobit. Pěkným vzorem jsou čísla, která už známe od mala. Prvky takové množiny nazýváme skaláry. Matice Matice

Více

10. blok Logický návrh databáze

10. blok Logický návrh databáze 10. blok Logický návrh databáze Studijní cíl Tento blok je věnován převodu konceptuálního návrhu databáze na návrh logický. Blok se věnuje tvorbě tabulek na základě entit z konceptuálního modelu a dále

Více

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jiří Haňáček [ÚLOHA 34 ŘEZY]

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jiří Haňáček [ÚLOHA 34 ŘEZY] Aplikované úlohy Solid Edge SPŠSE a VOŠ Liberec Ing. Jiří Haňáček [ÚLOHA 34 ŘEZY] 1 CÍL KAPITOLY Účelem tohoto dokumentu je naučit uživatele zobrazovat konstrukční dílce a sestavy mj. pomocí řezů. Dokument

Více

Lingebraické kapitolky - Počítání s maticemi

Lingebraické kapitolky - Počítání s maticemi Lingebraické kapitolky - Počítání s maticemi Jaroslav Horáček KAM MFF UK 20 Rozehřívačka: Definice sčítání dvou matic a násobení matice skalárem, transpozice Řešení: (A + B ij A ij + B ij (αa ij α(a ij

Více

VYTVÁŘENÍ OBSAHU KURZŮ

VYTVÁŘENÍ OBSAHU KURZŮ VYTVÁŘENÍ OBSAHU KURZŮ Mgr. Hana Rohrová Mgr. Linda Huzlíková Ing. Martina Husáková Fakulta informatiky a managementu Univerzity Hradec Králové Projekt je spolufinancován Evropským sociálním fondem a státním

Více

Úloha č. 2: Měření voltampérových charakteristik elektrických prvků pomocí multifunkční karty

Úloha č. 2: Měření voltampérových charakteristik elektrických prvků pomocí multifunkční karty Úloha č. 2: Měření voltampérových charakteristik elektrických prvků pomocí multifunkční karty Úvod Laboratorní úloha se zabývá měřením voltampérových charakteristik vybraných elektrických prvků pomocí

Více

Dva kompletně řešené příklady

Dva kompletně řešené příklady Markl: Příloha 1: Dva kompletně řešené příklady /TEH_app1_2006/ Strana 1 Dva kompletně řešené příklady Úvod V této příloze uvedeme úplné a podrobné řešení dvou her počínaje jejich slovním neformálním popisem

Více

Matematika I Lineární závislost a nezávislost

Matematika I Lineární závislost a nezávislost Matematika I Lineární závislost a nezávislost RNDr. Renata Klufová, Ph. D. Jihoèeská univerzita v Èeských Budìjovicích EF Katedra aplikované matematiky a informatiky Co u¾ známe? vektory - základní operace

Více

Implementace numerických metod v jazyce C a Python

Implementace numerických metod v jazyce C a Python Fakulta elektrotechnická Katedra matematiky Dokumentace k semestrální práci Implementace numerických metod v jazyce C a Python 2013/14 Michal Horáček a Petr Zemek Vyučující: Mgr. Zbyněk Vastl Předmět:

Více

Gymnázium, Praha 6, Arabská 14. Loydova patnáctka. Dokumentace ročníkového projektu. Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1.

Gymnázium, Praha 6, Arabská 14. Loydova patnáctka. Dokumentace ročníkového projektu. Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1. Gymnázium, Praha 6, Arabská 14 Loydova patnáctka Dokumentace ročníkového projektu Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1.E Jan Zaoral květen 2014 1. Úvod 1.1. Anotace Česky Cílem

Více

Skalár- veličina určená jedním číselným údajem čas, hmotnost (porovnej životní úroveň, hospodaření firmy, naše poloha podle GPS )

Skalár- veličina určená jedním číselným údajem čas, hmotnost (porovnej životní úroveň, hospodaření firmy, naše poloha podle GPS ) LINEÁRNÍ ALGEBRA Úvod vektor Skalár- veličina určená jedním číselným údajem čas, hmotnost (porovnej životní úroveň, hospodaření firmy, naše poloha podle GPS ) Kartézský souřadnicový systém -je taková soustava

Více

Editor pro vizualizaci interiérů bytů

Editor pro vizualizaci interiérů bytů České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačové grafiky a interakce Bakalářská práce Editor pro vizualizaci interiérů bytů Dominik Vondráček Vedoucí práce: Ing. David Sedláček

Více

Determinant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice.

Determinant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice. [] Definice determinantu BI-LIN, determinant, 9, P Olšák [2] Determinant je číslo jistým způsobem charakterizující čtvercovou matici det A 0 pro singulární matici, det A 0 pro regulární matici používá

Více

II. Úlohy na vložené cykly a podprogramy

II. Úlohy na vložené cykly a podprogramy II. Úlohy na vložené cykly a podprogramy Společné zadání pro příklady 1. - 10. začíná jednou ze dvou možností popisu vstupních dat. Je dána posloupnost (neboli řada) N reálných (resp. celočíselných) hodnot.

Více

Uživatelská příručka pro program

Uživatelská příručka pro program NEWARE Uživatelský manuál Uživatelská příručka pro program ve spojení se zabezpečovacím systémem strana 1 Uživatelský manuál NEWARE strana 2 NEWARE Uživatelský manuál Vaše zabezpečovací ústředna DIGIPLEX

Více

Řízení pohybu stanice v simulačním prostředí OPNET Modeler podle mapového podkladu

Řízení pohybu stanice v simulačním prostředí OPNET Modeler podle mapového podkladu Rok / Year: Svazek / Volume: Číslo / Number: 2011 13 5 Řízení pohybu stanice v simulačním prostředí OPNET Modeler podle mapového podkladu Map-based mobility control system for wireless stations in OPNET

Více

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád), 1 LINEÁRNÍ ALGEBRA 1 Lineární algebra Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy islámského matematika Hisab al-džebr val-muqabala ( Věda o redukci

Více

Příklad generátor fází výstavby a TDA mikro

Příklad generátor fází výstavby a TDA mikro SCIA CZ, s. r. o. Slavíčkova 1a 638 00 Brno tel. 545 193 526 545 193 535 fax 545 193 533 E-mail info.brno@scia.cz www.scia.cz Systém programů pro projektování prutových a stěnodeskových konstrukcí NEXIS

Více

Využití animací letů kosmických sond ve výuce fyziky

Využití animací letů kosmických sond ve výuce fyziky Využití animací letů kosmických sond ve výuce fyziky TOMÁŠ FRANC Matematicko-fyzikální fakulta UK, Praha Zajímavým oživením hodin fyziky jsou lety kosmických sond, o kterých žáci gymnázií příliš mnoho

Více

5 Tabulky a seznamy dat Příklad 3 Excel 2010

5 Tabulky a seznamy dat Příklad 3 Excel 2010 TÉMA: Jednoduchá a rozšířená filtrace dat Ne vždy potřebujeme při běžné práci s tabulkami pracovat se všemi záznamy. Sekretářka společnosti Naše zahrada zpracovává seznamy prodejců, zaměstnanců a zboží

Více

Generování žádostí o certifikát Uživatelská příručka pro prohlížeč Apple Safari

Generování žádostí o certifikát Uživatelská příručka pro prohlížeč Apple Safari Generování žádostí o certifikát Uživatelská příručka pro prohlížeč Apple Safari První certifikační autorita, a.s. 12.8.2011 Verze 7.07 Obsah 1. Úvod... 3 2. Požadavky na software... 3 3. Instalace kořenového

Více

Generování žádostí o kvalifikovaný certifikát a instalace certifikátu Uživatelská příručka pro prohlížeč Internet Explorer

Generování žádostí o kvalifikovaný certifikát a instalace certifikátu Uživatelská příručka pro prohlížeč Internet Explorer Generování žádostí o kvalifikovaný certifikát a instalace certifikátu Uživatelská příručka pro prohlížeč Internet Explorer 1 První certifikační autorita, a.s. 8.9.2011 Obsah 1. Úvod... 3 2. Požadavky na

Více

FORMÁTOVÁNÍ ODSTAVCE

FORMÁTOVÁNÍ ODSTAVCE FORMÁTOVÁNÍ ODSTAVCE Autor: Mgr. Dana Kaprálová Datum (období) tvorby: srpen 2013 Ročník: šestý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žák se orientuje v prostředí aplikace WORD.

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

Zadání úlohy do projektu z předmětu IPP 2013/2014

Zadání úlohy do projektu z předmětu IPP 2013/2014 Zadání úlohy do projektu z předmětu IPP 2013/2014 Zbyněk Křivka a Dušan Kolář E-mail: {krivka, kolar}@fit.vutbr.cz, {54 114 1313, 54 114 1238} XTD: XML2DDL Zodpovědný cvičící: Ondřej Navrátil(inavra@fit.vutbr.cz)

Více

Lineární algebra a analytická geometrie sbírka úloh a ř ešených př íkladů

Lineární algebra a analytická geometrie sbírka úloh a ř ešených př íkladů Lineární algebra a analytická geometrie sbírka úloh a ř ešených př íkladů Linear algebra and analytic geometry problems and solved examples Klára Javornická Bakalářská práce 2010 UTB ve Zlíně, Fakulta

Více

0. Lineární rekurence Martin Mareš, 2010-07-04

0. Lineární rekurence Martin Mareš, 2010-07-04 0 Lineární rekurence Martin Mareš, 2010-07-04 V tomto krátkém textu se budeme zabývat lineárními rekurencemi, tj posloupnostmi definovanými rekurentní rovnicí typu A n+k = c 0 A n + c 1 A n+1 + + c k 1

Více

Nástroj WebMaker TXV 003 28.01 první vydání Únor 2009 změny vyhrazeny

Nástroj WebMaker TXV 003 28.01 první vydání Únor 2009 změny vyhrazeny Nástroj WebMaker TXV 003 28.01 první vydání Únor 2009 změny vyhrazeny 1 TXV 003 28.01 Historie změn Datum Vydání Popis změn Únor 2009 1 První verze (odpovídá stavu nástroje ve verzi 1.6.2) Obsah 1 Úvod...3

Více

Registrační číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B

Registrační číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B PŘIJÍMACÍ TEST Z INFORMATIKY A MATEMATIKY NAVAZUJÍCÍ MAGISTERSKÉ STUDIUM V OBORU APLIKOVANÁ INFORMATIKA FAKULTA INFORMATIKY A MANAGEMENTU UNIVERZITY HRADEC KRÁLOVÉ ČÁST A Registrační číslo Hodnocení -

Více

UŽIVATELSKÁ PŘÍRUČKA PRO IZR NA PORTÁLU FARMÁŘE - HLÁŠENÍ POHYBŮ A OBJEDNÁVKY UZ

UŽIVATELSKÁ PŘÍRUČKA PRO IZR NA PORTÁLU FARMÁŘE - HLÁŠENÍ POHYBŮ A OBJEDNÁVKY UZ UŽIVATELSKÁ PŘÍRUČKA PRO IZR NA PORTÁLU FARMÁŘE - HLÁŠENÍ POHYBŮ A OBJEDNÁVKY UZ Autor: Aquasoft, spol. s r. o. Projekt: Integrovaný zemědělský registr Poslední aktualizace: 5.12.2014 Jméno souboru: IZR-PFHLAS_142205

Více

matice([[1,1,0,0,0],[1,1,1,0,0],[0,1,1,0,0],[0,0,0,1,1],[0,0,0,1,1]],1). matice([[1,1,1],[1,1,0],[1,0,1]],2).

matice([[1,1,0,0,0],[1,1,1,0,0],[0,1,1,0,0],[0,0,0,1,1],[0,0,0,1,1]],1). matice([[1,1,1],[1,1,0],[1,0,1]],2). % Zápočtový program % souvislost grafu % popis algoritmu a postupu % Program využívá algoritmu na násobení matic sousednosti A. % Příslušná mocnina n matice A určuje z kterých do kterých % vrcholů se lze

Více

A B = A A B P A B C = P A P B P C = =

A B = A A B P A B C = P A P B P C = = 9..8 Nezávislé jevy II Předpoklady: 907 Jsou-li nezávislé jevy a. Jsou nezávislé i jevy a? Z obrázku je vidět, že platí: ( ) ( ) = ( ( ) ) ( ( ) ) = ( ) ( ) P P P P P = použijeme nezávislost jevů, : P

Více

Aplikované úlohy Solid Edge

Aplikované úlohy Solid Edge Aplikované úlohy Solid Edge SPŠSE a VOŠ Liberec Ing. Jana Kalinová [ÚLOHA 36 ÚVOD DO PROSTŘEDÍ SESTAVA A SVAŘENEC] 1 CÍL KAPITOLY. Cílem této kapitoly je co nejrychlejší zorientování se v novém modulu

Více

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4 ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4 JEDNODUCHÉ PŘIHLÁŠENÍ 4 ADMINISTRAČNÍ PROSTŘEDÍ 5 PŘEPÍNÁNÍ JAZYKOVÉ VERZE 5 POLOŽKY HORNÍHO MENU 5 DOPLŇKOVÉ POLOŽKY MENU: 6 STROM SE STRÁNKAMI, RUBRIKAMI A ČLÁNKY 7 TITULNÍ

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Grafická data jsou u 2D vektorové grafiky uložena ve voxelech NEPRAVDA Grafická data jsou u rastrové grafiky uložena v pixelech PRAVDA Grafická data

Grafická data jsou u 2D vektorové grafiky uložena ve voxelech NEPRAVDA Grafická data jsou u rastrové grafiky uložena v pixelech PRAVDA Grafická data Grafická data jsou u 2D vektorové grafiky uložena ve voxelech Grafická data jsou u rastrové grafiky uložena v pixelech Grafická data jsou u vektorové grafiky uložena v pixelech Na rozdíl od rastrové grafiky

Více

Operační systémy Linux, Mac OS X a jejich srovnání

Operační systémy Linux, Mac OS X a jejich srovnání 5 5.1 Operační systémy Linux, Mac OS X a jejich srovnání Popište výhody programů OpenSource, čím se vyznačují OpenSource programy se vyznačují tím, že se dodávají i se zdrojovým kódem. S tímto kódem může

Více

Modul EPNO. Téma: Elektronické odesílání evidenčních listů přepravy nebezpečných odpadů

Modul EPNO. Téma: Elektronické odesílání evidenčních listů přepravy nebezpečných odpadů Modul EPNO Téma: Elektronické odesílání evidenčních listů přepravy nebezpečných odpadů Program: EVI 8 Vypracoval: Mgr. Tomáš Čejchan (oddělení Podpora) Revize: 07.03.2014 Tento dokument popisuje funkcionalitu

Více

Vícekriteriální hodnocení variant metody

Vícekriteriální hodnocení variant metody Katedra aplikované matematiky a informatiky Jihočeská Univerzita v Českých Budějovicích, Ekonomická fakulta 2010 Metody vícekriteriální hodnocení variant (VHV) Jak jsme již zmiňovali, VHV obecně neposkytuje

Více

1 of 14 14.12.2004 14:27

1 of 14 14.12.2004 14:27 1 of 14 14.12.2004 14:27 Popis systému EDOX je systém vyvinutý ve společnosti Evektor spol. s r.o. určený pro bezpečné sdílení technické dokumentace a dalších dokumentů. Systém je umístěn na webovém serveru

Více

Integrovaný Ekonomický Systém Účetnictví - IES WIN 2006. Úvod...5

Integrovaný Ekonomický Systém Účetnictví - IES WIN 2006. Úvod...5 Úvod...5 Přehled funkcí modulu účetnictví...6 Účtový rozvrh...11 Výsledovka...12 Rozvaha...12 Saldokonto...12 Druh dokladu...12 Zpracování daňového dokladu...12 Nastavení zpracování DPH (období, sazeb,

Více

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY

Více

Minebot manuál (v 1.2)

Minebot manuál (v 1.2) Minebot manuál (v 1.2) Pro Váš rychlý start s nástrojem Minebot jsme připravili tohoto stručného průvodce, který by Vám měl být pomocníkem při spuštění a používání služby. Tento stručný průvodce by vám

Více

{Q={1,2};S,T;u(s,t)} (3.3) Prorovnovážnéstrategie s,t vehřesnulovýmsoučtemmusíplatit:

{Q={1,2};S,T;u(s,t)} (3.3) Prorovnovážnéstrategie s,t vehřesnulovýmsoučtemmusíplatit: 3 ANTAGONISTICKÉ HRY 3. ANTAGONISTICKÝ KONFLIKT Antagonistický konflikt je rozhodovací situace, v níž vystupují dva inteligentní rozhodovatelé, kteří se po volbě svých rozhodnutí rozdělí o pevnou částku,

Více

Studentská tvůrčí a odborná činnost STOČ 2015

Studentská tvůrčí a odborná činnost STOČ 2015 Studentská tvůrčí a odborná činnost STOČ 2015 NÁVRH A REALIZACE ALGORITMU PRO SYSTÉM LIMITNÍHO OZAŘOVÁNÍ David OCZKA Vysoká škola báňská - Technická univerzita Ostrava Fakulta elektrotechniky a informatiky

Více

Uživatelská příručka

Uživatelská příručka OM-Link Uživatelská příručka Verze: 2.1 Prosinec 2006 Copyright 2005, 2006 ORBIT MERRET, s r.o. I Nápověda k programu OM-Link Obsah Část I Úvod 3 Část II Základní pojmy a informace 3 1 Připojení... 3 2

Více

0.1 Úvod do lineární algebry

0.1 Úvod do lineární algebry Matematika KMI/PMATE 1 01 Úvod do lineární algebry 011 Lineární rovnice o 2 neznámých Definice 011 Lineární rovnice o dvou neznámých x, y je rovnice, která může být vyjádřena ve tvaru ax + by = c, kde

Více

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry. Kapitola Ohodnocené grafy V praktických aplikacích teorie grafů zpravidla graf slouží jako nástroj k popisu nějaké struktury. Jednotlivé prvky této struktury mají často přiřazeny nějaké hodnoty (může jít

Více

Nutné kroky a nastavení prohlížeče pro přístup do systému REGIS. Autor: Ing. Marek Pučelík

Nutné kroky a nastavení prohlížeče pro přístup do systému REGIS. Autor: Ing. Marek Pučelík Nutné kroky a nastavení prohlížeče pro přístup do systému REGIS Autor: Ing. Marek Pučelík Vytvořeno dne: 2. dubna 2013 1 Obsah 1. Návod na instalaci certifikátu ČNB... 3 Úvod... 3 Úvodní stránka aplikace...

Více

Operace s maticemi Sčítání matic: u matic stejného typu sečteme prvky na stejných pozicích: A+B=(a ij ) m n +(b ij ) m n =(a ij +b ij ) m n.

Operace s maticemi Sčítání matic: u matic stejného typu sečteme prvky na stejných pozicích: A+B=(a ij ) m n +(b ij ) m n =(a ij +b ij ) m n. 1 Sylvestrova věta Platí: Nechť A je symetrická matice řádu n, označme a 11 a 12... a 1i a D i = 21 a 22... a 2i.... a i1 a i2... a ii Pak A(a příslušná KF) je pozitivně definitní, právěkdyž D i >0provšechna

Více

VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ

VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ RNDr. Petra Poulová, Ph.D. Ing. Hana Šrámková Fakulta informatiky a managementu Univerzity Hradec Králové Projekt je spolufinancován Evropským sociálním fondem a

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo didaktického materiálu EU-OPVK-VT-III/2-ŠR-303 Druh didaktického materiálu DUM Autor RNDr. Václava Šrůtková Jazyk čeština

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více