|
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 (машинный ноль).
1. Норма вектора:
void NormVec(double& norm, CVector& VecA, int numRowsA);
Входные параметры:
VecA - исходный вектор,
numRowsA - число строк исходного вектора.
Выходные параметры:
norm - норма исходного вектора.
2. Норма матрицы:
void NormMat(double& norm, CMatrix& MatA, int numRowsA, int numColsA);
Входные параметры:
MatA - исходная матрица,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы.
Выходные параметры:
norm - норма исходной матрицы.
3. Число обусловленности системы:
void SystCond(double normMat, double normInvMat, double& cond);
Входные параметры:
normMat - норма исходной матрицы,
normInvMat - норма обратной матрицы.
Выходные параметры:
cond - число обусловленности системы.
4. Левая перестановочная матрица:
MatErrType RrrMatL(CMatrix& MatRes, int numRowsA, int rowInd, int colInd);
Входные параметры:
numRowsA - число строк исходной матрицы,
rowInd - индекс строки главного элемента,
colInd - индекс столбца главного элемента.
Выходные параметры:
MatRes - левая перестановочная матрица.
5. Правая перестановочная матрица:
MatErrType RrrMatR(CMatrix& MatRes, int numColsA, int rowInd, int colInd);
Входные параметры:
numColsA - число столбцов исходной матрицы,
rowInd - индекс строки главного элемента,
colInd - индекс столбца главного элемента.
Выходные параметры:
MatRes - правая перестановочная матрица.
6. Копирование вектора:
void CopyVec(CVector& VecA, CVector& VecB, int numRowsB);
Входные параметры:
VecB - исходный вектор,
numRowsB - число строк исходного вектора.
Выходные параметры:
VecA - вектор результата.
7. Копирование матрицы:
void CopyMat(CMatrix& MatA, CMatrix& MatB, int numRowsB, int numColsB);
Входные параметры:
MatB - исходная матрица,
numRowsB - число строк исходной матрицы,
numColsB - число столбцов исходной матрицы.
Выходные параметры:
MatA - матрица результата.
8. Сложение матриц:
MatErrType AddMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB);
Входные параметры:
MatA - первая исходная матрица,
MatB - вторая исходная матрица,
numRowsA - число строк первой исходной матрицы,
numColsA - число столбцов первой исходной матрицы,
numRowsB - число строк второй исходной матрицы,
numColsB - число столбцов второй исходной матрицы.
Выходные параметры:
MatC - сумма исходных матриц.
9. Вычитание матриц:
MatErrType SubMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB);
Входные параметры:
MatA - уменьшаемая матрица,
MatB - вычитаемая матрица,
numRowsA - число строк уменьшаемой матрицы,
numColsA - число столбцов уменьшаемой матрицы,
numRowsB - число строк вычитаемой матрицы,
numColsB - число столбцов вычитаемой матрицы.
Выходные параметры:
MatC - разность двух матриц.
10.Транспонирование матрицы:
void TransMat(CMatrix& MatA, CMatrix& MatRes, int numRowsA, int numColsA);
Входные параметры:
MatA - исходная матрица,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы.
Выходные параметры:
MatRes - транспонированная матрица.
11.Умножение матрицы на вектор:
MatErrType MulMatVec(CMatrix& MatA, CVector& VecB, CVector& VecC,
int numRowsA, int numColsA, int numRowsB);
Входные параметры:
MatA - исходная матрица,
VecB - исходный вектор,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы,
numRowsB - число строк исходного вектора.
Выходные параметры:
VecC - произведение.
12.Умножение двух матриц:
MatErrType MulMatMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
int numRowsA, int numColsA, int numRowsB, int numColsB);
Входные параметры:
MatA - левая матрица,
MatB - правая матрица,
numRowsA - число строк левой матрицы,
numColsA - число столбцов левой матрицы,
numRowsB - число строк правой матрицы,
numColsB - число столбцов правой матрицы.
Выходные параметры:
MatC - произведение.
13.Low/Up перестановка:
MatErrType LowUp(CMatrix& MatA, CMatrix& MatLow, CMatrix& MatUp,
int numRowsA, int numColsA);
Входные параметры:
MatA - исходная матрица,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы.
Выходные параметры:
MatLow - нижняя треугольная матрица,
MatUp - верхняя треугольная матрица.
14.Детерминант матрицы:
MatErrType DetMat(CMatrix& MatA, double& det, int numRowsA, int numColsA);
Входные параметры:
MatA - исходная матрица,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы.
Выходные параметры:
det - детерминант.
15.Обратная матрица:
MatErrType InverseMat(CMatrix& MatA, CMatrix& MatRes, int numRowsA,
int numColsA);
Входные параметры:
MatA - исходная матрица,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы.
Выходные параметры:
MatRes - обратная матрица.
16.Метод Гаусса:
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 - вектор решения.
17.Метод Гаусса с выбором главного элемента по столбцу:
MatErrType GaussPivCol(CMatrix& MatA, CVector& VecIn, CVector& VecOut,
int numRowsA, int numColsA, int numRowsIn);
Входные параметры:
MatA - исходная матрица,
VecIn - вектор свободных членов,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы,
numRowsIn - число строк вектора свободных членов.
Выходные параметры:
VecOut - вектор решения.
18.Метод Гаусса с выбором главного элемента по таблице:
MatErrType GaussPivTbl(CMatrix& MatA, CVector& VecIn, CVector& VecOut,
int numRowsA, int numColsA, int numRowsIn);
Входные параметры:
MatA - исходная матрица,
VecIn - вектор свободных членов,
numRowsA - число строк исходной матрицы,
numColsA - число столбцов исходной матрицы,
numRowsIn - число строк вектора свободных членов.
Выходные параметры:
VecOut - вектор решения.
Вызов функций GaussDLL (MS Visual C++ X.X):
Декларация глобальной переменной управления модулем:
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.
|