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

solve_matrixsolve_matrixsolve_matrixSolveMatrixSolveMatrix (Operator)

Name

solve_matrixsolve_matrixsolve_matrixSolveMatrixSolveMatrix — Compute the solution of a system of equations.

Signature

solve_matrix( : : MatrixLHSID, MatrixLHSType, Epsilon, MatrixRHSID : MatrixResultID)

Herror solve_matrix(const Hlong MatrixLHSID, const char* MatrixLHSType, double Epsilon, const Hlong MatrixRHSID, Hlong* MatrixResultID)

Herror T_solve_matrix(const Htuple MatrixLHSID, const Htuple MatrixLHSType, const Htuple Epsilon, const Htuple MatrixRHSID, Htuple* MatrixResultID)

Herror solve_matrix(const HTuple& MatrixLHSID, const HTuple& MatrixLHSType, const HTuple& Epsilon, const HTuple& MatrixRHSID, Hlong* MatrixResultID)

HMatrix HMatrix::SolveMatrix(const HTuple& MatrixLHSType, const HTuple& Epsilon, const HMatrix& MatrixRHSID) const

void HOperatorSetX.SolveMatrix(
[in] VARIANT MatrixLHSID, [in] VARIANT MatrixLHSType, [in] VARIANT Epsilon, [in] VARIANT MatrixRHSID, [out] VARIANT* MatrixResultID)

IHMatrixX* HMatrixX.SolveMatrix(
[in] BSTR MatrixLHSType, [in] double Epsilon, [in] IHMatrixX* MatrixRHSID)

static void HOperatorSet.SolveMatrix(HTuple matrixLHSID, HTuple matrixLHSType, HTuple epsilon, HTuple matrixRHSID, out HTuple matrixResultID)

HMatrix HMatrix.SolveMatrix(string matrixLHSType, double epsilon, HMatrix matrixRHSID)

Description

The operator solve_matrixsolve_matrixsolve_matrixSolveMatrixSolveMatrix computes the solution of a system of linear equations or of a linear least squares problem. The input matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS and MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS are defined by the matrix handles MatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDmatrixLHSID and MatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDmatrixRHSID. The number of rows of matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS and MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS must be identical. The operator returns the matrix handle MatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDmatrixResultID of the matrix MatrixResultMatrixResultMatrixResultMatrixResultmatrixResult. Access to the elements of the matrix is possible e.g. with the operator get_full_matrixget_full_matrixget_full_matrixGetFullMatrixGetFullMatrix.

For linear equation systems, the equations

  MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResult = MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS

are solved. Therefore, the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS must be a square matrix and the parameter EpsilonEpsilonEpsilonEpsilonepsilon must be 0. The type of the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS can be selected via the parameter MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType. 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:


              /  6.0  5.0  3.0  \                 / -1.0   6.0  \
  MatrixLHS = |  5.0  7.0  3.0  |     MatrixRHS = |  3.0  -3.0  |
              \  3.0  3.0  4.0  /                 \  5.0   4.0  /

  MatrixLHSType = 'positive_definite'     Epsilon = 0

                       / -2.0   3.0  \
  ->    MatrixResult = |  1.0  -3.0  |
                       \  2.0   1.0  /

For linear least squares problems or if EpsilonEpsilonEpsilonEpsilonepsilon is not 0, the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS need not be a square matrix. The linear least squares problem is solved using the singular value decomposition (SVD) of the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS by minimizing

  ||MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS - MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResult||.

All singular values less than the value Epsilon * the largest singular value are set to 0. For these values no internal division is done to prevent a division by zero. Also, the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS may be rank-deficient. The type of matrix must be selected via MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'general'"general""general""general""general".

Example:


              /  6.0   5.0   3.0  \                 /  29.0  \
              |  3.0   7.0  -3.0  |                 |  10.0  |
  MatrixLHS = |  5.0  12.0   4.0  |     MatrixRHS = |  35.0  |
              |  5.0   4.0  12.0  |                 |  43.0  |
              \  4.0   6.0   8.0  /                 \  25.0  /

  MatrixLHSType = 'general'     Epsilon = 2.2204e-16

                       /  3.4914  \
  ->    MatrixResult = |  0.7114  |
                       \  1.6213  /

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

Attention

For MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = '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 MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS must contain the relevant information of the matrix. The strictly lower triangular part of the matrix is not referenced. For MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular" the lower triangular part of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS must contain the relevant information of the matrix. The strictly upper triangular part of the matrix is not referenced. For MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal", only the main diagonal, the superdiagonal, and the subdiagonal of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS are used. The other parts of the matrix are not referenced. If the referenced part of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS is not of the specified type, an exception is raised.

Parallelization

Parameters

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

Matrix handle of the input matrix of the left hand side.

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

The type of the input matrix of the left hand side.

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 solving and limitation to set singular values to be 0.

Default value: 0.0

Suggested values: 0.0, 2.2204e-16

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

Matrix handle of the input matrix of right hand side.

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

New matrix handle with the solution.

Result

If the parameters are valid, the operator solve_matrixsolve_matrixsolve_matrixSolveMatrixSolveMatrix 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

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