ClassesClassesClassesClasses | | | | Operators

solve_matrixsolve_matrixSolveMatrixsolve_matrixSolveMatrixSolveMatrix (Operator)

Name

solve_matrixsolve_matrixSolveMatrixsolve_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 SolveMatrix(const HTuple& MatrixLHSID, const HTuple& MatrixLHSType, const HTuple& Epsilon, const HTuple& MatrixRHSID, HTuple* MatrixResultID)

HMatrix HMatrix::SolveMatrix(const HString& MatrixLHSType, double Epsilon, const HMatrix& MatrixRHSID) const

HMatrix HMatrix::SolveMatrix(const char* MatrixLHSType, double 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_matrixSolveMatrixsolve_matrixSolveMatrixSolveMatrix computes the solution of a system of linear equations or of a linear least squares problem. The input matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS and MatrixRHSMatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS are defined by the matrix handles MatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDmatrixLHSID and MatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDmatrixRHSID. The number of rows of matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS and MatrixRHSMatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS must be identical. The operator returns the matrix handle MatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDmatrixResultID of the matrix MatrixResultMatrixResultMatrixResultMatrixResultMatrixResultmatrixResult. Access to the elements of the matrix is possible e.g. with the operator get_full_matrixget_full_matrixGetFullMatrixget_full_matrixGetFullMatrixGetFullMatrix.

For linear equation systems, the equations

  MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultMatrixResultmatrixResult = MatrixRHSMatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS
are solved. Therefore, the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS must be a square matrix and the parameter EpsilonEpsilonEpsilonEpsilonEpsilonepsilon must be 0. The type of the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS can be selected via the parameter MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType. The following values are supported: 'general'"general""general""general""general""general" for general, 'symmetric'"symmetric""symmetric""symmetric""symmetric""symmetric" for symmetric, 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite""positive_definite" for symmetric positive definite, 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal""tridiagonal" for tridiagonal, 'upper_triangular'"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""permuted_upper_triangular" for permuted upper triangular, 'lower_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""permuted_lower_triangular" for permuted lower triangular matrices.

Example:

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

  ||MatrixRHSMatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS - MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultMatrixResultmatrixResult||.
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 MatrixLHSMatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS may be rank-deficient. The type of matrix must be selected via MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'general'"general""general""general""general""general".

Example:

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

Attention

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

Parallelization

Parameters

MatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDmatrixLHSID (input_control)  matrix HMatrix, HTupleHTupleHMatrix, HTupleHMatrixX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

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

MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

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

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

List of values: 'general'"general""general""general""general""general", 'lower_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""permuted_lower_triangular", 'permuted_upper_triangular'"permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular", 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite""positive_definite", 'symmetric'"symmetric""symmetric""symmetric""symmetric""symmetric", 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal""tridiagonal", 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular""upper_triangular"

EpsilonEpsilonEpsilonEpsilonEpsilonepsilon (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (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

MatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDmatrixRHSID (input_control)  matrix HMatrix, HTupleHTupleHMatrix, HTupleHMatrixX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Matrix handle of the input matrix of right hand side.

MatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDmatrixResultID (output_control)  matrix HMatrix, HTupleHTupleHMatrix, HTupleHMatrixX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

New matrix handle with the solution.

Result

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

Possible Predecessors

create_matrixcreate_matrixCreateMatrixcreate_matrixCreateMatrixCreateMatrix

Possible Successors

get_full_matrixget_full_matrixGetFullMatrixget_full_matrixGetFullMatrixGetFullMatrix, get_value_matrixget_value_matrixGetValueMatrixget_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


ClassesClassesClassesClasses | | | | Operators