| 2.2.3.9.44 matrixbase::InverseInverse
 DescriptionReplace this matrix with the Inverse of this matrix.
 Syntaxint Inverse( ) ParametersReturnReturns 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.
 ExamplesEX1
 // 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());
}RemarkReplace 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.
 See Alsomatrixbase::GetReal, matrixbase::GetImaginary, matrixbase::GetPhase, matrixbase::GetAmplitude, matrixbase::Conjugate, matrixbase::Cross, matrixbase::MakeComplex
 Header to Includeorigin.h
 |