JOINT   INSTITUTE   FOR   NUCLEAR   RESEARCH
lit PROGRAM   LIBRARY   JINRLIB

GaussDLL - program complex of matrix-vector operations and solution of Slae with real coefficients


Author: I.N.Kiyan
rus
You are
counter
visitor here.

Language: C++
Environment: MS Visual C++ 7.0


GaussDLL is a C++ program complex written in MS Visual C++ 7.0 programming environment on the base of use of Microsoft Foundation Classes (MFC). It is intended for realization of matrix-vector operations and for decision of systems of the linear algebraic equations (SLAE) with real coefficients by a method of Gauss without and with pivoting. GaussDLL could be used if calling application makes calls to the MFC library at run time.

User data type:
CMatrix (arrays.h)
CVector (arrays.h)
Function return type:

enum MatErrType { matErr_None, matErr_Size, matErr_Singular,
matErr_IllConditioned, matErr_IterLimit, matErr_QNAN }; (arrays.h).
matErr_None - correct solution,
matErr_Size - error of size,
matErr_Singular - error of singular,
matErr_IllConditioned - error of ill conditionality,
matErr_IterLimit - error of excess of limit of iteration number,
matErr_QNAN - error of division by zero.

Exported functions:

The functions, exported from GaussDLL library, allow to make account of norm of a vector, norm of a matrix, number of conditionality of system, left and right of rearrangement matrixes, sum and difference of two matrixes, products of a matrix on a vector and matrixes on a matrix, inverse matrix and determinant of a matrix. Besides they allow to make copying a vector, copying a matrix, and also transposition and Low / Up decomposition of the matrixes. Three functions are intended for the decision of systems of the linear algebraic equations with real coefficients by a method of Gauss, method of Gauss with column pivoting and method of Gauss with matrix pivoting accordingly. Left rearrangement matrix is used for rearrangement of rows in a matrix of coefficients and in a vector of the free members. Right rearrangement matrix is used for rearrangement columns in a matrix of coefficients and rows in a vector of the solution. The absolute value of the determinant of a matrix of coefficients should be more than e-15 (machine 0).

  1. Norm of vector:
    void NormVec(double& norm, CVector& VecA, int numRowsA);
    Input parameters:
    VecA - source vector,
    numRowsA - number of rows of source vector.
    Output parameters:
    norm - norm of source vector.
  2. Norm of matrix:
    void NormMat(double& norm, CMatrix& MatA, int numRowsA, int numColsA);
    Input parameters:
    MatA - source matrix,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix.
    Output parameters:
    norm - norm of source matrix.
  3. Condition number of system:
    void SystCond(double normMat, double normInvMat, double& cond);
    Input parameters:
    normMat - norm of source matrix,
    normInvMat - norm of inverse matrix.
    Output parameters:
    cond - condition number of system.
  4. Left rearrangement matrix:
    MatErrType RrrMatL(CMatrix& MatRes, int numRowsA, int rowInd, int colInd);
    Input parameters:
    numRowsA - number of rows of source matrix,
    rowInd - ziro based index of row of main element,
    colInd - ziro based index of column of main element.
    Output parameters:
    MatRes - left rearrangement matrix.
  5. Right rearrangement matrix:
    MatErrType RrrMatR(CMatrix& MatRes, int numColsA, int rowInd, int colInd);
    Input parameters:
    numColsA - number of columns of source matrix,
    rowInd - ziro based index of row of main element,
    colInd - ziro based index of column of main element.
    Output parameters:
    MatRes - right rearrangement matrix.
  6. Copying of vector:
    void CopyVec(CVector& VecA, CVector& VecB, int numRowsB);
    Input parameters:
    VecB - source vector,
    numRowsB - number of rows of source vector.
    Output parameters:
    VecA - destination vector.
  7. Copying of matrix:
    void CopyMat(CMatrix& MatA, CMatrix& MatB, int numRowsB, int numColsB);
    Input parameters:
    MatB - source matrix,
    numRowsB - number of rows of source matrix,
    numColsB - number of columns of source matrix.
    Output parameters:
    MatA - destination matrix.
  8. Addition of matrixes:
    MatErrType AddMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
    int numRowsA, int numColsA, int numRowsB, int numColsB);
    Input parameters:
    MatA - first source matrix,
    MatB - second source matrix,
    numRowsA - number of rows of first source matrix,
    numColsA - number of columns of first source matrix,
    numRowsB - number of rows of second source matrix,
    numColsB - number of columns of second source matrix.
    Output parameters:
    MatC - sum of source matrixes.
  9. Subtraction of matrixes:
    MatErrType SubMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
    int numRowsA, int numColsA, int numRowsB, int numColsB);
    Input parameters:
    MatA - reduced matrix,
    MatB - deducted matrix,
    numRowsA - number of rows of reduced matrix,
    numColsA - number of columns of reduced matrix,
    numRowsB - number of rows of deducted matrix,
    numColsB - number of columns of deducted matrix.
    Output parameters:
    MatC - difference of two matrixes.
  10. Transposition of matrix:
    void TransMat(CMatrix& MatA, CMatrix& MatRes, int numRowsA, int numColsA);
    Input parameters:
    MatA - source matrix,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix.
    Output parameters:
    MatRes - transposed matrix.
  11. Multiplication of matrix and vector:
    MatErrType MulMatVec(CMatrix& MatA, CVector& VecB, CVector& VecC,
    int numRowsA, int numColsA, int numRowsB);
    Input parameters:
    MatA - source matrix,
    VecB - source vector,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix,
    numRowsB - number of rows of source vector.
    Output parameters:
    VecC - product.
  12. Multiplication of two matrixes:
    MatErrType MulMatMat(CMatrix& MatA, CMatrix& MatB, CMatrix& MatC,
    int numRowsA, int numColsA, int numRowsB, int numColsB);
    Input parameters:
    MatA - left matrix,
    MatB - right matrix,
    numRowsA - number of rows of left matrix,
    numColsA - number of columns of left matrix,
    numRowsB - number of rows of right matrix,
    numColsB - number of columns of right matrix.
    Output parameters:
    MatC - product.
  13. Low/Up decomposition:
    MatErrType LowUp(CMatrix& MatA, CMatrix& MatLow, CMatrix& MatUp,
    int numRowsA, int numColsA);
    Input parameters:
    MatA - source matrix,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix.
    Output parameters:
    MatLow - bottom triangular matrix,
    MatUp - top triangular matrix.
  14. Determinant of matrix:
    MatErrType DetMat(CMatrix& MatA, double& det, int numRowsA, int numColsA);
    Input parameters:
    MatA - source matrix,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix.
    Output parameters:
    det - determinant.
  15. Inverse matrix:
    MatErrType InverseMat(CMatrix& MatA, CMatrix& MatRes, int numRowsA, int numColsA);
    Input parameters:
    MatA - source matrix,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix.
    Output parameters:
    MatRes - inverse matrix.
  16. Gauss method:
    MatErrType Gauss(CMatrix& MatLow, CMatrix& MatUp, CVector& VecIn, CVector& VecOut,
    int numRowsLow, int numColsLow, int numRowsUp, int numColsUp, int numRowsIn);
    Input parameters:
    MatLow - bottom triangular matrix,
    MatUp - top triangular matrix,
    VecIn - vector of free members,
    numRowsLow - number of rows of bottom triangular matrix,
    numColsLow -number of columns of bottom triangular matrix,
    numRowsUp - number of rows of top triangular matrix,
    numColsUp - number of columns of top triangular matrix,
    numRowsIn - number of rows of vector of free members.
    Output parameters:
    VecOut - vector of solution.
  17. Gauss method with pivoting by column:
    MatErrType GaussPivCol(CMatrix& MatA, CVector& VecIn, CVector& VecOut,
    int numRowsA, int numColsA, int numRowsIn);
    Input parameters:
    MatA - source matrix,
    VecIn - vector of free members,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix,
    numRowsIn - number of rows of vector of free members.
    Output parameters:
    VecOut - vector of solution.
  18. Gauss method with pivoting by table:
    MatErrType GaussPivTbl(CMatrix& MatA, CVector& VecIn, CVector& VecOut,
    int numRowsA, int numColsA, int numRowsIn);
    Input parameters:
    MatA - source matrix,
    VecIn - vector of free members,
    numRowsA - number of rows of source matrix,
    numColsA - number of columns of source matrix,
    numRowsIn - number of rows of vector of free members.
    Output parameters:
    VecOut - vector of solution.

DLL function call (MS Visual C++ X.X):

Declaring the global variable of handle to the module:
HMODULE gGaussDLL;
Definition of type of pointer to the function:
typedef MatErrType (*GAUSSPIVTBL)(CMatrix& MatA, CVector& VecIn, CVector& VecOut, int numRowsA, int numColsA, int numRowsIn);
Declaring the global pointer to the function:
GAUSSPIVTBL pGaussPivTbl;
Loading the DLL (in constructor):
gGaussDLL = LoadLibrary("GaussDLL");
Retrieving the address of an function exported by DLL (in constructor):
pGaussPivTbl = (GAUSSPIVTBL)GetProcAddress(gGaussDLL, "GaussPivTbl");
Declaring the local variable and call of the exported function:
MatErrType ErrCode;
ErrCode = pGaussPivTbl(MatA, VecIn, VecOut, MatA.getRows(),
MatA.getCols(), VecIn.getSize());
Unloading the DLL (in destructor):
FreeLibrary(gGaussDLL);

Archive GaussDLL (GaussDLL.dll, mfc70.dll, ARRAYS.H, test, example and description) are submitted.




home up e-mail