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.