Knihovna pro matematické výpočty v jazyce C++ - Temel, Aleš (Vysoké učení technické v Brně. Fakulta elektrotechniky a komunikačních technologií, 2012)
Ve své bakalářské práci vytvářím knihovnu pro uchování matic a práci s maticemi. V tomto případě je problematika zaměřena hlavně na tzv. řídké matice. Jazyk C++ nenabízí mezi standardními knihovnami nástroje pro jednoduchou práci s řídkými maticemi. Nejčastější alternativou bývá použití dvourozměrného pole, tzv. 2D pole. 2D pole může být realizováno jako dvojitý ukazatel reprezentující řádky a sloupce matice. Základním problémem je fakt, že 2D pole se chová stejně k řídkému, tak i plnému nenulovému poli. Nezohledňuje se možnost uložit pole výhodněji. Mnou navržená knihovna pro uchování řídkých matic tento problém zohledňuje více různými způsoby. Nabízí nejen úsporný formát CSR (Compressed sparse rows), ale i alternativy pro uložení speciálně strukturovaných matic. Při tvorbě knihovny jsem kladl důraz především na velikost paměti, která bude potřeba na uložení objektu. Protože se jedná o matematickou knihovnu, tak obsahuje různé funkce vhodné pro práci s maticemi, jako výpočet determinantu, výpočet inverzní matice a podobně. Při výpočtech těchto funkcí se zohledňuje také velikost využité paměti, proto jsou i matice pro výpočty subdeterminantů ukládány do řídkých formátů a mezivýsledky jsou rovněž odstraňovány co nejdříve po jejich využití. Byla vytvořena také druhá knihovna, která se zabývá čísly uloženými s větší přesností než jsou standardní datové typy. Velikost potřebné paměti se zvyšuje se zvětšující se přesností čísla s pohyblivou řádovou čárkou.

I create a library for storing matrices and working with matrices in this bachelor’s thesis. In this case, the issues concern mainly so-called sparse matrices. C++ do not provide among the standard libraries tools for easy working with sparse matrices. The most frequent alternative is the application of two-dimensional array (2D array). 2D array may be realized as a double pointer representing the rows and the columns of the matrix. The basic problem is that behavior of 2D array is identical both to the sparse, and to the full non-zero matrix. 2D array ignores the possibility to store matrices more favorable. The library for storing matrices designed by me takes into account the storing of sparse matrices by several different ways. It offers the sparse format CSR (Compressed sparse rows), as well as alternatives to save the specially structured matrices. In the course of creating library the main emphasis first of all I put on the amount of memory that is necessary for storing matrices. Because it is a mathematical library, it contains different functions suitable for working with matrices, such as determinant calculation, inverse matrix calculation and so. When calculate these functions it is necessary to take into account used memory size as well. Intermediate results are stored also in sparse format, and removed as soon as possible after their use. I created also the second library that deals with the floating point numbers stored with greater precision than standard data types like float and double. The size of occupied memory increases according to precision of floating point number.
Enhanced mathematical library for C++
Keywords: matice; šablona; knihovna; matematické funkce; pohyblivá řádová desetinná čárka; paměť; C++; matrix; template; library; mathematical functions; floating point; memory; C++