ОБЪЕДИНЕННЫЙ   ИНСТИТУТ   ЯДЕРНЫХ   ИССЛЕДОВАНИЙ
lit БИБЛИОТЕКА   ПРОГРАММ   JINRLIB

GaussDLL - комплекс программ матрично-векторных операций
и решения СЛАУ с вещественными коэффициентами


Автор: И.Н.Киян
eng
Вы
counter
посетитель.

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




home up e-mail