GaussDLL JINRLIB
Мова: С ++
Середовище програмування: MS Visual C ++ 7.0
GaussDLL - це комплекс програм, написаний на мові С ++ в середовищі програмування MS Visual C ++, призначений для виконання матрічно- векторних операцій і вирішення систем лінійних алгебраїчних рівнянь (СЛАР) з речовими коефіцієнтами методом Гаусса без і з вибором головного елемента. GaussDLL розроблений як модуль розширення Microsoft Foundation Classes (MFC) і оформлений у вигляді динамічно яку пов'язують бібліотеки - GaussDLL.dll. Для використання GaussDLL потрібно скопіювати файли GaussDLL.dll і mfc70.dll в директорію SYSTEM (SYSTEM32) операційної системи і включити додається заголовки ARRAYS.H і саму бібліотеку в список зв'язків програми.
Призначені для користувача типи даних: CMatrix (ARRAYS.H) CVector (ARRAYS.H) Тип повернення з функцій:enum MatErrType {matErr_None, matErr_Size, matErr_Singular,
matErr_IllConditioned, matErr_IterLimit, matErr_QNAN}; (ARRAYS.H). matErr_None - правильне рішення, matErr_Size - помилка розмірності, matErr_Singular - помилка сингулярності, matErr_IllConditioned - помилка поганої обумовленості, matErr_IterLimit - помилка перевищення меж за кількістю ітерацій, matErr_QNAN - помилка ділення на нуль.
Експортовані функції:
Функції, що експортуються з бібліотеки GaussDLL, дозволяють зробити розрахунок норми вектора, норми матриці, числа обумовленості системи, лівої і правої перестановки матриць, суми і різниці двох матриць, творів матриці на вектор і матриці на матрицю, зворотний матриці і детермінантою матриці. Крім того, вони дозволяють зробити копіювання вектора, копіювання матриці, а також транспонування і Low / Up декомпозицію матриць. Три функції працюють над вирішенням систем лінійних алгебраїчних рівнянь з речовими коефіцієнтами методом Гаусса, методом Гаусса з вибором головного елемента по стовпцю і методом Гаусса з вибором головного елемента по матриці відповідно. Ліва перестановки матриця використовується для перестановки рядків в матриці коефіцієнтів і векторі вільних членів. Права перестановки матриця використовується для перестановки стовпців в матриці коефіцієнтів і рядків у векторі рішення. Абсолютне значення детермінанта матриці коефіцієнтів має бути більше, ніж 1.е-15 (машинний нуль).
- Норма вектора:
void NormVec (double & norm, CVector & VecA, int numRowsA); Вхідні параметри: VecA - вихідний вектор, numRowsA - число рядків вихідного вектора. Вихідні параметри: norm - норма вихідного вектора. - Норма матриці:
void NormMat (double & norm, CMatrix & MatA, int numRowsA, int numColsA); Вхідні параметри: MatA - вихідна матриця, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці. Вихідні параметри: norm - норма вихідної матриці. - Число обумовленості системи:
void SystCond (double normMat, double normInvMat, double & cond); Вхідні параметри: normMat - норма вихідної матриці, normInvMat - норма зворотної матриці. Вихідні параметри: cond - число обумовленості системи. - Ліва перестановки матриця:
MatErrType RrrMatL (CMatrix & MatRes, int numRowsA, int rowInd, int colInd); Вхідні параметри: numRowsA - число рядків вихідної матриці, rowInd - індекс рядка головного елемента, colInd - індекс стовпця головного елемента. Вихідні параметри: MatRes - ліва перестановки матриця. - Права перестановки матриця:
MatErrType RrrMatR (CMatrix & MatRes, int numColsA, int rowInd, int colInd); Вхідні параметри: numColsA - число стовпців початкової матриці, rowInd - індекс рядка головного елемента, colInd - індекс стовпця головного елемента. Вихідні параметри: MatRes - права перестановки матриця. - Копіювання вектора:
void CopyVec (CVector & VecA, CVector & VecB, int numRowsB); Вхідні параметри: VecB - вихідний вектор, numRowsB - число рядків вихідного вектора. Вихідні параметри: VecA - вектор результату. - Копіювання матриці:
void CopyMat (CMatrix & MatA, CMatrix & MatB, int numRowsB, int numColsB); Вхідні параметри: MatB - вихідна матриця, numRowsB - число рядків вихідної матриці, numColsB - число стовпців початкової матриці. Вихідні параметри: MatA - матриця результату. - Додавання матриць:
MatErrType AddMat (CMatrix & MatA, CMatrix & MatB, CMatrix & MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB); Вхідні параметри: MatA - перша вихідна матриця, MatB - друга вихідна матриця, numRowsA - число рядків першої вихідної матриці numColsA - число стовпців першої вихідної матриці, numRowsB - число рядків другий вихідної матриці, numColsB - число стовпців другої вихідної матриці. Вихідні параметри: MatC - сума вихідних матриць. - Віднімання матриць:
MatErrType SubMat (CMatrix & MatA, CMatrix & MatB, CMatrix & MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB); Вхідні параметри: MatA - зменшується матриця, MatB - віднімається матриця, numRowsA - число рядків зменшується матриці, numColsA - число стовпців зменшується матриці, numRowsB - число рядків віднімається матриці, numColsB - число стовпців віднімається матриці. Вихідні параметри: MatC - різниця двох матриць. - Транспонування матриці:
void TransMat (CMatrix & MatA, CMatrix & MatRes, int numRowsA, int numColsA); Вхідні параметри: MatA - вихідна матриця, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці. Вихідні параметри: MatRes - транспонована матриця. - Множення матриці на вектор:
MatErrType MulMatVec (CMatrix & MatA, CVector & VecB, CVector & VecC,
int numRowsA, int numColsA, int numRowsB); Вхідні параметри: MatA - вихідна матриця, VecB - вихідний вектор, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці, numRowsB - число рядків вихідного вектора. Вихідні параметри: VecC - твір. - Множення двох матриць:
MatErrType MulMatMat (CMatrix & MatA, CMatrix & MatB, CMatrix & MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB); Вхідні параметри: MatA - ліва матриця, MatB - права матриця, numRowsA - число рядків лівої матриці, numColsA - число стовпців лівої матриці, numRowsB - число рядків правої матриці, numColsB - число стовпців правою матриці. Вихідні параметри: MatC - твір - Low / Up перестановка:
MatErrType LowUp (CMatrix & MatA, CMatrix & MatLow, CMatrix & MatUp,
int numRowsA, int numColsA); Вхідні параметри: MatA - вихідна матриця, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці. Вихідні параметри: MatLow - нижня трикутна матриця, MatUp - верхня трикутна матриця. - Детермінант матриці:
MatErrType DetMat (CMatrix & MatA, double & det, int numRowsA, int numColsA); Вхідні параметри: MatA - вихідна матриця, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці. Вихідні параметри: det - детермінант. - Зворотна матриця:
MatErrType InverseMat (CMatrix & MatA, CMatrix & MatRes, int numRowsA, int numColsA); Вхідні параметри: MatA - вихідна матриця, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці. Вихідні параметри: MatRes - зворотна матриця. - Метод Гаусса:
MatErrType Gauss (CMatrix & MatLow, CMatrix & MatUp, CVector & VecIn, CVector & VecOut,
int numRowsLow, int numColsLow, int numRowsUp, int numColsUp, int numRowsIn); Вхідні параметри: MatLow - нижня трикутна матриця, MatUp - верхня трикутна матриця, VecIn - вектор вільних членів, numRowsLow - число рядків нижньої трикутної матриці, numColsLow - число стовпців нижньої трикутної матриці, numRowsUp - число рядків верхньої трикутної матриці, numColsUp - число стовпців верхньої трикутної матриці, numRowsIn - число рядків вектора вільних членів. Вихідні параметри: VecOut - вектор рішення. - Метод Гаусса з вибором головного елемента по стовпцю:
MatErrType GaussPivCol (CMatrix & MatA, CVector & VecIn, CVector & VecOut,
int numRowsA, int numColsA, int numRowsIn); Вхідні параметри: MatA - вихідна матриця, VecIn - вектор вільних членів, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці, numRowsIn - число рядків вектора вільних членів. Вихідні параметри: VecOut - вектор рішення. - Метод Гаусса з вибором головного елемента по таблиці:
MatErrType GaussPivTbl (CMatrix & MatA, CVector & VecIn, CVector & VecOut,
int numRowsA, int numColsA, int numRowsIn); Вхідні параметри: MatA - вихідна матриця, VecIn - вектор вільних членів, numRowsA - число рядків вихідної матриці, numColsA - число стовпців початкової матриці, numRowsIn - число рядків вектора вільних членів. Вихідні параметри: VecOut - вектор рішення.
Виклик функцій GaussDLL (MS Visual C ++ XX):
Декларація глобальної змінної управління модулем: HMODULE gGaussDLL; Визначення типу покажчика на функцію: typedef MatErrType (* GAUSSPIVTBL) (CMatrix & MatA, CVector & VecIn, CVector & VecOut, int numRowsA, int numColsA, int numRowsIn); Декларація глобального покажчика на функцію: GAUSSPIVTBL pGaussPivTbl; Завантаження DLL (в конструкторі): gGaussDLL = LoadLibrary ( "GaussDLL"); Отримання адреси функції, що експортується DLL (в конструкторі): pGaussPivTbl = (GAUSSPIVTBL) GetProcAddress (gGaussDLL, "GaussPivTbl"); Декларація локальної змінної і виклик функції, що експортується: MatErrType ErrCode; ErrCode = pGaussPivTbl (MatA, VecIn, VecOut, MatA.getRows (), MatA.getCols (), VecIn.getSize ()); Вивантаження DLL (в деструкції): FreeLibrary (gGaussDLL);В архіві містяться опис програм (в форматі .doc), dll-бібліотеки GaussDLL.dll і mfc70.dll, файл ARRAYS.H з описом призначених для користувача типів даних, фрагменти програми, що використовують GaussDLL.dll, і тестовий приклад TestDLL.exe.