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