HALCON Reference Manual 10.0.2
Table of Contents / Matrix / Arithmetic ClassesClassesClasses | | | Operators

invert_matrixinvert_matrixinvert_matrixInvertMatrixInvertMatrix (Operator)

Name

invert_matrixinvert_matrixinvert_matrixInvertMatrixInvertMatrix — Invert a matrix.

Signature

invert_matrix( : : MatrixID, MatrixType, Epsilon : MatrixInvID)

Herror invert_matrix(const Hlong MatrixID, const char* MatrixType, double Epsilon, Hlong* MatrixInvID)

Herror T_invert_matrix(const Htuple MatrixID, const Htuple MatrixType, const Htuple Epsilon, Htuple* MatrixInvID)

Herror invert_matrix(const HTuple& MatrixID, const HTuple& MatrixType, const HTuple& Epsilon, Hlong* MatrixInvID)

HMatrix HMatrix::InvertMatrix(const HTuple& MatrixType, const HTuple& Epsilon) const

void HOperatorSetX.InvertMatrix(
[in] VARIANT MatrixID, [in] VARIANT MatrixType, [in] VARIANT Epsilon, [out] VARIANT* MatrixInvID)

IHMatrixX* HMatrixX.InvertMatrix(
[in] BSTR MatrixType, [in] double Epsilon)

static void HOperatorSet.InvertMatrix(HTuple matrixID, HTuple matrixType, HTuple epsilon, out HTuple matrixInvID)

HMatrix HMatrix.InvertMatrix(string matrixType, double epsilon)

Description

The operator invert_matrixinvert_matrixinvert_matrixInvertMatrixInvertMatrix computes the inverse of the MatrixMatrixMatrixMatrixmatrix defined by the matrix handle MatrixIDMatrixIDMatrixIDMatrixIDmatrixID. A new matrix MatrixInvMatrixInvMatrixInvMatrixInvmatrixInv is generated with the result and the matrix handle MatrixInvIDMatrixInvIDMatrixInvIDMatrixInvIDmatrixInvID of this matrix is returned. Access to the elements of the matrix is possible e.g. with the operator get_full_matrixget_full_matrixget_full_matrixGetFullMatrixGetFullMatrix.

For EpsilonEpsilonEpsilonEpsilonepsilon = 0, the inverse is computed. The type of the MatrixMatrixMatrixMatrixmatrix can be selected via MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType. The following values are supported: 'general'"general""general""general""general" for general, 'symmetric'"symmetric""symmetric""symmetric""symmetric" for symmetric, 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite" for symmetric positive definite, 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal" for tridiagonal, 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular" for upper triangular, 'permuted_upper_triangular'"permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular" for permuted upper triangular, 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular" for lower triangular, and 'permuted_lower_triangular'"permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular" for permuted lower triangular matrices.

Example 1:


           /  1.0   3.0   3.0  \
  Matrix = |  4.0   5.0   6.0  |
           \  5.0   5.0   7.0  /

  MatrixType = 'general'    Epsilon = 0

                    /  -1.25    1.50   -0.75  \
  ->    MatrixInv = |  -0.50    2.00   -1.50  |
                    \   1.25   -2.50    1.75  /

Example 2:


           /  1.0   3.0   3.0  \
  Matrix = |   0    2.0   6.0  |
           \   0     0   10.0  /

  MatrixType = 'upper_triangular'    Epsilon = 0

                    /   1.00   -1.50    0.60  \
  ->    MatrixInv = |    0      0.50   -0.30  |
                    \    0       0      0.10  /

Example 3:


           /  1.0   3.0   3.0  \
  Matrix = |   0     0   10.0  |
           \   0    2.0   6.0  /

  MatrixType = 'permuted_upper_triangular'    Epsilon = 0

                    /   1.00   -1.50    0.60  \
  ->    MatrixInv = |    0      0.50   -0.30  |
                    \    0       0      0.10  /

For EpsilonEpsilonEpsilonEpsilonepsilon > 0, the pseudo inverse is computed using a singular value decomposition (SVD). During the computation, all singular values less than the value EpsilonEpsilonEpsilonEpsilonepsilon * the largest singular value are set to 0. For these values no internal division is done to prevent a division by zero. If a square matrix is computed with the SVD algorithm the computation takes more time. The type of the matrix must be set to MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType = 'general'"general""general""general""general".

Example:


           /  3.0   1.0  -2.0   5.0  \
  Matrix = | -5.0   7.0   2.0  -6.0  |
           \ -9.0  -4.0   1.0   4.0  /

  MatrixType = 'general'    Epsilon = 2.2204e-16

                    /  -0.0021   -0.0482   -0.0813  \
                    |   0.1435    0.1137   -0.0137  |
  ->    MatrixInv = |  -0.0519   -0.0015    0.0028  |
                    \   0.1518    0.0056    0.0526  /

Note: The relative accuracy of the floating point representation of the used data type (double) is EpsilonEpsilonEpsilonEpsilonepsilon = 2.2204e-16.

It should be also noted that in the examples there are differences in the meaning of the numbers of the output matrices: The results of the elements are per definition a certain value if the number of this value is shown as an integer number, e.g., 0 or 1. If the number is shown as a floating point number, e.g., 0.0 or 1.0, the value is computed.

Attention

For MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType = 'symmetric'"symmetric""symmetric""symmetric""symmetric", 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite", or 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular" the upper triangular part of the input MatrixMatrixMatrixMatrixmatrix must contain the relevant information of the matrix. The strictly lower triangular part of the matrix is not referenced. For MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType = 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular" the lower triangular part of the input MatrixMatrixMatrixMatrixmatrix must contain the relevant information of the matrix. The strictly upper triangular part of the matrix is not referenced. For MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType = 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal", only the main diagonal, the superdiagonal, and the subdiagonal of the input MatrixMatrixMatrixMatrixmatrix are used. The other parts of the matrix are not referenced. If the referenced part of the input MatrixMatrixMatrixMatrixmatrix is not of the specified type, an exception is raised.

Parallelization

Parameters

MatrixIDMatrixIDMatrixIDMatrixIDmatrixID (input_control)  matrix HMatrix, HTupleHMatrix, HTupleHMatrixX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong)

Matrix handle of the input matrix.

MatrixTypeMatrixTypeMatrixTypeMatrixTypematrixType (input_control)  string HTupleHTupleVARIANTHtuple (string) (string) (char*) (BSTR) (char*)

The type of the input matrix.

Default value: 'general' "general" "general" "general" "general"

List of values: 'general'"general""general""general""general", 'symmetric'"symmetric""symmetric""symmetric""symmetric", 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite", 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal", 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular", 'permuted_upper_triangular'"permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular", 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular", 'permuted_lower_triangular'"permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular"

EpsilonEpsilonEpsilonEpsilonepsilon (input_control)  real HTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double)

Type of inversion.

Default value: 0.0

Suggested values: 0.0, 2.2204e-16

MatrixInvIDMatrixInvIDMatrixInvIDMatrixInvIDmatrixInvID (output_control)  matrix HMatrix, HTupleHMatrix, HTupleHMatrixX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong)

Matrix handle with the inverse matrix.

Result

If the parameters are valid, the operator invert_matrixinvert_matrixinvert_matrixInvertMatrixInvertMatrix returns the value 2 (H_MSG_TRUE). If necessary, an exception is raised.

Possible Predecessors

create_matrixcreate_matrixcreate_matrixCreateMatrixCreateMatrix

Possible Successors

get_full_matrixget_full_matrixget_full_matrixGetFullMatrixGetFullMatrix, get_value_matrixget_value_matrixget_value_matrixGetValueMatrixGetValueMatrix

Alternatives

invert_matrix_modinvert_matrix_modinvert_matrix_modInvertMatrixModInvertMatrixMod

See also

transpose_matrixtranspose_matrixtranspose_matrixTransposeMatrixTransposeMatrix, transpose_matrix_modtranspose_matrix_modtranspose_matrix_modTransposeMatrixModTransposeMatrixMod

References

David Poole: “Linear Algebra: A Modern Introduction”; Thomson; Belmont; 2006.
Gene H. Golub, Charles F. van Loan: “Matrix Computations”; The Johns Hopkins University Press; Baltimore and London; 1996.

Module

Foundation


Table of Contents / Matrix / Arithmetic ClassesClassesClasses | | | Operators
HALCON Reference Manual 10.0.2 Copyright © 1996-2011 MVTec Software GmbH