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. |