TMtxType DetectMtxType(Boolean CheckPosDef)
Determines type of the matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | CheckPosDef | Boolean |
Returns: TMtxType
Remarks:
Tests the calling matrix and returns the Dew.Math.TMtxType of the calling of matrix. The following types are supported:
- Dew.Math.TMtxType.mtSymmPosDef = symmetric positive definite matrix
- Dew.Math.TMtxType.mtSymmetric = symmetric matrix
- Dew.Math.TMtxType.mtHermPosDef = Hermitian positve definite matrix
- Dew.Math.TMtxType.mtHermitian = Hermitian matrix
- Dew.Math.TMtxType.mtTriangle = triangular matrix, with unit or non unit main diagonal
- Dew.Math.TMtxType.mtGeneral = general matrix (none of the above)
Checking for positive definite matrix can be very expensive (O(n) = 1/3*n^3). Therefore the ChekPosDef parameter is False by default, unless the user specifies otherwise. The method will not detect banded matrix storage.
Examples
TVec X;
TVec B;
TMtx A;
TMtxType at;
MtxVec.CreateIt(out X, out B);
MtxVec.CreateIt(out A);
try
{
B.SetIt(false,new double[] {0,2});
A.SetIt(2,2,false,[1,2,
2,4]); // 2x2 real matrix
at = A.DetectMtxType;
A.LUSolve(B,X,at);
// This is the same for this example (except slower)
A.LUSolve(B,X,mtSymmetric);
// You could also specify
A.AutoMtxType = true
A.LUSolve(B,X); // the type is autodetected
}
finally
{
MtxVec.FreeIt(ref B, ref X);
MtxVec.FreeIt(ref A);
}