Replace this matrix with the Inverse of this matrix.
int Inverse( )
Returns 0 on success or one of the following error codes on failure:
-1 = Matrix is not N x N
366 = The matrix is singular, possibly due to rounding errors; or the underlying type of matrix is not double.
11 = N must not be less than 1.
73 = Memory allocation failed.
EX1
// Compute an inverse matrix void matrixbase_Inverse_ex1() { int rc; matrix<double> mat1 = { {2, 3}, {3, 4} }; // Inverse matrix is: // {-4, 3} // { 3, -2} MatrixPage MatPg1; MatPg1.Create("Origin"); MatrixLayer MatLy1 = MatPg1.Layers(0); Matrix Mat1(MatLy1); Mat1 = mat1; printf(" Original matrix is %s.\n",Mat1.GetName()); MatrixPage MatPg2; MatPg2.Create("Origin"); MatrixLayer MatLy2 = MatPg2.Layers(0); Matrix Mat2(MatLy2); Mat2 = mat1; rc=Mat2.Inverse(); // Compute the inverse matrix if(rc!=0) printf(" Error: Inverse failed. Error Code=%d\n",rc); else printf(" Inverse matrix is %s.\n",Mat2.GetName()); }
EX2
#define MAKEMAT(X) MatrixLayer MatLy##X;MatLy##X.Create();Matrix Mat##X(MatLy##X) void mDivideTest1_ex2() { matrix mat1 = { {1, 2, 3}, {4, 5, 6}, {1, 1, 1} }; matrix mat2 = { {2, 3, 4}, {1, 1, 1}, {4, 5, 4} }; MAKEMAT(1); MAKEMAT(2); MAKEMAT(3); MAKEMAT(4); MAKEMAT(5); Mat1=mat1; Mat2=mat2; matrix mat3; mat3=mat2; mat3.Inverse(); Mat3=mat1*mat3; //= mat1*Inv(mat2) printf("%s = %s*Inv(%s) <== proper division of 2 matrices\n",Mat3.GetName(),Mat1.GetName(),Mat2.GetName()); Mat4=mat1/10; printf("%s = %s/10 <== scaler division of a matrix\n",Mat4.GetName(),Mat1.GetName(),Mat2.GetName()); Mat5=mat1; Mat5.DotDivide(mat2); printf("%s = DotDivide(%s,%s) <== element-wise division of 2 matrices\n",Mat5.GetName(),Mat1.GetName(),Mat2.GetName()); }
Replace this matrix with the Inverse of this matrix. An error is returned if the underlying base type of the matrix is not double.
Note
The following is a summary of various matrix operations:
1) Multiplication:
1-1) * ... Proper multiplication of 2 matrices (mat1*mat2)
1-2) * ... Scaler multiplication of a matrix (mat1*A or A*mat1)
1-3) DotMultiply ... Element-wise multiplication of 2 matrices
1-4) Cross ... Cross product of 2 matrices
1-5) CumulativeProduct ... cumulative product of a matrix
2) Division:
2-1) / ... Not defined for 2 matrices. For proper division, multiply Inverse(mat1)
2-2) / ... Scaler division of a matrix (mat1/A)
2-3) DotDivide ... Element-wise division of 2 matrices
3) Addition:
3-1) + ... Element-wise addition of 2 matrices
3-2) + ... Scaler addition of a matrix (mat1+A or A+mat1)
3-3) SumColumns ... Summation of each column in a matrix
3-4) CumulativeSum ... Cumulative product of a matrix
4) Subtraction:
4-1) - ... Element-wise subtraction of 2 matrices
4-2) - ... Scaler subtraction of a matrix (mat1-A or A-mat1)
4-3) Difference ... Difference of adjacent 2 rows in a matrix (1st order differential)
5) Power:
5-1) ^ (or pow) ... Not defined as element-wise power of 2 matrices
5-2) ^ (or pow) ... Not defined as scaler power of a matrix
5-3) DotPower ... Element-wise power of 2 matrices
To depict the differences of above divisions, try the EX2.
matrixbase::GetReal, matrixbase::GetImaginary, matrixbase::GetPhase, matrixbase::GetAmplitude, matrixbase::Conjugate, matrixbase::Cross, matrixbase::MakeComplex
origin.h