Spis treści

Biblioteka Boost.uBLAS

Wstęp

uBLAS (Basic Linear Algebra Subprograms) – biblioteka klas szablonowych, dostarczająca struktur do reprezentacji wektorów i macierzy różnego typu (np. macierz trójkątna, symetryczna, rzadka) oraz operacji na nich. Różne reprezentacje macierzy służą przestrzeganiu zasad danego typu macierzy oraz zoptymalizowanemu przechowywaniu (np. macierzy rzadkich - w formie upakowanej).

Biblioteka uBLAS reaguje w różny sposob na próby modyfikacji niezgodnej z cecha danego typu macierzy:

  1. błąd kompilacji - np.:
    • nie można modyfikować macierzy jednostkowej, zerowej, skalarnej - gdyż w momencie tworzenia są one inicjowane na stałe.
  2. błąd wykonania - np.:
    • nie można modyfikować elementu nad głowną przekatną dolnej macierzy trójkątnej, ale pozostałe elementy można
    • nie można przypisać wartości elementowi macierzy wstęgowej, nie należącemu do głównej przekątnej lub jednej z jego wstęg, określonych przy definicji danego obiektu klasy.
  3. brak sygnalizacji niezgodności - np.:
    • możliwość definicji macierzy o innej liczbie wierszy, niż kolumn, dla macierzy, które z definicji powinny być kwadratowe (np. macierz jednostkowa, trójkątna)
    • mozna przypisac elementom na głównej przekątnej macierzy hermitowskiej wartosci zespolone o niezerowej części urojonej - mimo, ze definicja macierzy Hermitowskiej nakazuje

wartości rzeczywiste na głównej przekątnej.

Typy

Biblioteka uBLAS udostępnia następujące typy macierzy:

  1. Matrix - podstawowy kontener dla macierzy gęstych
    • Identity Matrix - macierz jednostkowa. Jest macierzą kwadratową (wymiary M=N).
    • Zero Matrix - macierz zerowa
    • Scalar Matrix - macierz skalarna
  2. Triangular Matrix - macierz trójkątna
  3. Symmetric Matrix - macierz symetryczna
  4. Hermitian Matrix - macierz Hermitowska
  5. Banded Matrix - macierz wstęgowa
  6. Sparse Matrix - macierz rzadka
    • Mapped Matrix - macierz odwzorowania
    • Compressed Matrix - macierz skompresowana
    • Coordinate Matrix - macierz koordynacji

Matrix

Szablon klasy: matrix<T, F, A>

Inne typy macierzy gęstych - typy stałe, nie można modyfikowac ich elementow. Tak jak klasa matrix<>, inne klasy również obsługują rozszerzoną deklarację z kilkoma parametrami szablonu klasy.

Identity Matrix

Dla wymiarów macierzy NxN, 0 <= i < N, 0 <= j < N

Zero Matrix

Wszystkie elementy mają wartosc 0. Próba modyfikacji dowolnej wartości macierzy w kodzie kończy sie błędem kompilacji.

Scalar Matrix

Każdy element macierzy to stała wartość, podana w konstruktorze (domyslnie 0). Próba modyfikacji dowolnej wartości macierzy w kodzie kończy się błędem kompilacji.

Triangular Matrix

Jest to rodzaj macierzy kwadratowej, jednak w klasie należy definiować rozmiar obydwu wymiarow.

Dla wymiarów macierzy NxN, 0 <= i < N,0 <= j < N
Szablon klasy: triangular_matrix<T, F1, F2, A>

Triangular Adaptor - adapter dla macierzy innych typów

Zmiana wartości w macierzy adaptowanej jest odzwierciedlona w obiekcie klasy adaptera. Tu także próba zmiany wartości na głównej przekątnej dla typu macierzy unit_lower lub unit_upper kończy się wyjątkiem.

Szablon klasy: triangular_adaptor<M, F>

Symmetric Matrix

Jest to rodzaj macierzy kwadratowej, jednak w klasie należy definiować rozmiar obydwu wymiarów.

Dla wymiarów macierzy NxN, 0 <= i < N,0 <= j < N
Szablon klasy: symetric_matrix<T, F1, F2, A>

Symmetric Adaptor - adapter dla macierzy innych typów

Zmiana wartości w macierzy adaptowanej jest odzwierciedlona w obiektcie klasy adaptera.

Szablon klasy: symmetric_adaptor<M, F>

Hermitian Matrix

Jest to rodzaj macierzy kwadratowej, jednak w klasie należy definiować rozmiar obydwu wymiarow.

Szablon klasy: hermitian_matrix<T, F1, F2, A>
Dla wymiarów macierzy NxN, 0 <= i < N,0 <= j < N

Implementacja macierzy Hermitowskiej w uBLAS dopuszcza umieszszczenie na głównej przekątnej macierzy wartości zespolonych o niezerowej cześci urojonej mimo, ze nie jest to macierz Hermitowska.

Banded Matrix

Wszystkie elementy macierzy wstęgowej są zerowe poza główna przekątną i określonymi przekątnymi (wstęgami).

Dla wymiarów macierzy MxN, 0 <= i < M,0 <= j < N, l-liczba niezerowych dolnych przekątnych (tych pod przekątna główną), u-liczba górnych przekątnych
Szablon klasy: banded_matrix<T, F, A>

Sparse Matrix

Poniższe klasy macierzy rzadkich różnią się tylko sposobem przechowywania macierzy.

Mapped Matrix

Kontenerem jest mapa (indeks elementu, wartość).

Dla wymiarów macierzy MxN, 0 <= i < M,0 <= j < N
Szablon klasy: mapped_matrix<T, F, A>

Compressed Matrix, Coordinate Matrix

Osobne kontenery dla indeksów elementu i wartości.

Szablon klasy: compressed_matrix<T, F, IB, IA, TA>

Kod źródłowy

ublas_repr.cpp

Linki zewnętrzne

Dokumentacja uBLAS

Zbigniew Fabijański H1ISI