|
GaussDLL Library "JINRLIB"
Author: I.N.Kiyan You are
Language: C++
Environment: MS Visual C++ 7.0 visitor here.
PROGRAM COMPLEX OF MATRIX-VECTOR OPERATIONS AND SOLUTION
OF SLAE WITH REAL COEFFICIENTS
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 ziro.
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.
|