|
Язык: С++
Среда программирования: 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++ 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.
|
|