Akademia górniczo-hutnicza



Pobieranie 0,79 Mb.
Strona4/5
Data24.02.2019
Rozmiar0,79 Mb.
1   2   3   4   5
Opis diagramu klas
Matrix

Klasa matrix jest strukturą danych zawierającą macierz. Może przechowywać dane na różne sposoby, w zależności od indywidualnych właściwości macierzy. Dokładny opis sposobów reprezentacji znajduje się w dalszej części pracy.

Macierz można stworzyć na kilka sposobów. Podstawową metodą jest użycie konstruktora matrix(int size), który tworzy kwadratową macierz zerową o liczbie wierszy i kolumn zadanej przez użytkownika. Innym sposobem jest kopia już istniejącego obiektu klasy matrix (użycie konstruktora kopiującego lub użycie metody copy).

Dostęp do elementów jest uzyskiwany przez metody getVal (odczyt) oraz setVal (zapis).

Klasa udostępnia podstawowe operacje na macierzach: dodawanie, mnożenie, zamiana wierszy i transpozycja.

Użytkownik ma możliwość zapisania właściwości macierzy. Ustawienia te są potem wykorzystywane przez solver do optymalizacji obliczeń, a także do wyboru najlepszej metody przechowywania danych.


Opis składników

size (int)

Zawiera informację o liczbie kolumn i wierszy macierzy. Składnik prywatny.
Tab (double*)

Wewnętrzna reprezentacja macierzy w klasie. Wartości rzeczywiste są przechowywane używając podwójnej precyzji. Konkretny sposób zapisu danych zależy od właściwości macierzy. Składnik prywatny.


Właściwości macierzy- isSymmetric, isPositiveDefinite,isBand,isTriangular,isSparse,isLU (int)

Są to flagi określające specjalne właściwości macierzy. Na ich podstawie solver wybiera najlepiej dopasowaną do układu równań metodę rozwiązania. Składniki te mogą przyjmować 3 możliwe wartości:



  1. właściwość nie została ustawiona. Solver nie będzie próbować optymalizacji pod kątem tej właściwości.

  2. Właściwość aktywna.

  3. Właściwość nieaktywna.

Składnik prywatny.
Matrix()

Konstruktor domyślny. Tworzy obiekt zawierający pustą macierz o rozmiarze 0. Metoda konieczna ze względów implementacji. Składnik publiczny.


Matrix(int Size)

Konstruktor, tworzy kwadratową macierz zerową o liczbie kolumn i wierszy równą parametrowi Size. Używa podstawowej reprezentacji wewnętrznej. Składnik publiczny.


Matrix(int Size,string propertyName)

Konstruktor, tworzy kwadratową macierz zerową o liczbie kolumn i wierszy równą parametrowi Size. Użytkownik może ustawić typ macierzy, konstruktor wybierze dopasowany do niego sposób reprezentacji wewnętrznej danych. Składnik publiczny.


Matrix(matrix& source)

Konstruktor kopiujący. Składnik publiczny.


getSize() :int

Zwraca rozmiar macierzy. Składnik publiczny.


getVal(int x,int y) : double

Zwraca wartość elementu w wierszu x i w kolumnie y. Składnik publiczny.


setVal(int x,int y,double val): void

Ustawia wartość val w wierszu x i kolumnie y. Składnik publiczny.


transpose(): matrix

Zwraca transpozycję macierzy na obiekcie której wywołano metodę. Inne właściwości macierzy są kopiowane. Składnik publiczny.


swapRow(int row1, int row 2) : void

Zmienia kolejność wierszy macierzy. Funkcja przydatna głównie do zastosowania metody częściowego elementu podstawowego. Najczęściej jest wywoływana przez solver w trakcie obliczeń. Pozostawiona jest jednak jako publiczna, żeby użytkownik miał możliwość własnoręcznie dokonać optymalizacji.


Operatory matematyczne +,* (matrix B)

Metody zwracają sumę lub iloczyn macierzy na której je wywołano oraz macierzy B. Składniki publiczne. Składnik publiczny.


setProperty(string propertyName, int val): void

Metoda pozwala ustawić właściwości macierzy. Parametr propertyName zawiera oznaczenie własności. Możliwe wartości to Band (macierz pasmowa ),Triag (macierz trójkątna), PosDef(macierz dodatnio określona), Symm(macierz symetryczna),Sparse(macierz rzadka). Parametr val oznacza stan ustawianej własności (lista możliwych wartości została podana wyżej). Składnik publiczny.


getProperty(string propertyName): int

Metoda zwraca stan własności macierzy podanej w parametrze propertyName. Opis możliwych stanów oraz własności podano wyżej. Składnik publiczny.


checkProperty(string propertyName): bool

Sprawdza macierz pod kątem podanej w parametrze propertyName własności. Zwraca True jeśli macierz spełnia sprawdzaną właściwość (np. jest dodatnio określona). Składnik publiczny.


copy(): matrix

Zwraca obiekt klasy matrix będący kopią macierzy na której wywołano metodę. Kopiowane są zarówno wartości jak i oznaczenia właściwości. Składnik publiczny.


Vector

Klasa będąca reprezentacją wektora. Większość metod jest analogiczna do metod klasy matrix.

Podstawową różnicą jest brak metod umożliwiających ustawienie własności.Publiczna metoda Swap(int val1,int val2) działa podobnie do metody swapRow klasy matrix i powinna być zawsze z nią wywoływana gdy zmieniana jest kolejność równań w układzie.

Klasa udostępnia metody dostępowe getVal i setVal, metodę kopiującą copy() i operacje dodawania i mnożenia.


Solver

Główna część modułu. Klasa udostępnia metody umożliwiające rozwiązanie zadanego układu równań. Decyzję o wyborze metody podejmuje na podstawie informacji o właściwościach macierzy podanych przez użytkownika. Po stworzeniu obiektu solvera jest możliwość ustalenia warunków pracy( np. czy konieczne jest zapisanie macierzy do powtórnego użycia).


Opis składników

defaultMethod(int)

Określa metodę numeryczną wykorzystywaną do obliczeń gdy użytkownik nie wyszczególnił żadnych właściwości charakterystycznych macierzy A. Składnik prywatny.
saveMatrix(bool)

Flaga określająca czy macierz A ma zostać zapamiętana przez solver po wykonaniu obliczeń.

Gdy wartość flagi ustawiono na True macierz zostaje zapisana do składnika savedMatrix. Może zostać następnie wykorzystana do kolejnych obliczeń, np. przy wykorzystaniu nowego

wektora b. Domyślna wartość to False. Składnik prywatny.

calcLocal(bool)

Flaga określająca czy obliczenia mają być przeprowadzane na kopii macierzy podanej przez użytkownika. Domyślna wartość to True. Składnik prywatny.


savedMatrix(matrix)

Zawiera zapisaną wcześniej macierz. Składnik prywatny.


savedPivot(int*)

Tablica indeksów elementów podstawowych. Wypełniana przy zapisywaniu macierzy. Składnik prywatny.


Solver()

Konstruktor domyślny


Solver(int defaultMethod )

Konstruktor używany gdy użytkownik chce stworzyć solver z metodą domyślną rozwiązywania układu równań inną niż podstawowa.


setDefaultMethod(int method) : void

Ustawia domyślną metodę rozwiązywania układu równań. Zostanie ona użyta gdy nie zostaną wyszczególnione żadne specjalne właściwości macierzy A. Składnik publiczny.


setSaveMatrix(): bool

Ustawia flagę saveMatrix na wartość przeciwną niż obecna. Gdy jest ustawiona na True, macierz A zostanie zapisana przez solver do ponownego wykorzystania. Zwraca aktualną wartość flagi po modyfikacji. Składnik publiczny.


setCalcLocal()

Ustawia flagę calcLocal. Jeśli jej wartość wynosi False, obliczania przeprowadzane są na macierzy podanej przez użytkownika (czyli po zakończeniu obliczeń macierz A zostanie zmodyfikowana). Składnik publiczny.

clearSavedMatrix(): void

Usuwa z pamięci zapisaną wcześniej macierz. Składnik publiczny.


solve(matrix* A, vector* b, vector* result)

Podstawowa metoda modułu. Rozwiązuje układ równań Ax=b i zapisuje wynik do obiektu wektora wskazanego przez wskaźnik result. Sposób rozwiązania zależy od właściwości

macierzy A. Jeśli ustawiona jest flaga saveMatrix, macierz zostaje zapisana. Obliczenia są domyślnie przeprowadzane na lokalnej kopii macierzy podanej przez użytkownika, chyba że flaga calcLocal została ustawiona na False. Składnik publiczny.
solve(matrix* A, vector* b, vector* result, int method)

Funkcja prawie identyczna do powyższej. Jedyną różnicą jest wymuszenie użycia określonej metody obliczeniowej, podanej w parametrze method. Składnik publiczny.


solveFromFactor(vector* b,vector* result)

Metoda rozwiązuje układ równań wykorzystując zapisaną wcześniej kopię macierzy A. Głównym zastosowaniem są wielokrotne obliczenia na tej samej macierzy A, ale różnych wektorach b. Parametry są analogiczne do parametrów metody solve(). Funkcja ta wykorzystuje rozkład (np. LU) macierzy A. Składnik publiczny.



Diagram przypadków użycia



1   2   3   4   5


©operacji.org 2017
wyślij wiadomość

    Strona główna