solve_matrixT_solve_matrixSolveMatrixSolveMatrixsolve_matrix (Operator)

Name

solve_matrixT_solve_matrixSolveMatrixSolveMatrixsolve_matrix — Compute the solution of a system of equations.

Signature

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

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

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

HMatrix HMatrix::SolveMatrix(const wchar_t* MatrixLHSType, double Epsilon, const HMatrix& MatrixRHSID) const   (Windows only)

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

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

def solve_matrix(matrix_lhsid: HHandle, matrix_lhstype: str, epsilon: float, matrix_rhsid: HHandle) -> HHandle

Description

The operator solve_matrixsolve_matrixSolveMatrixSolveMatrixSolveMatrixsolve_matrix computes the solution of a system of linear equations or of a linear least squares problem. The input matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs and MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHSmatrix_rhs are defined by the matrix handles MatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDmatrixLHSIDmatrix_lhsid and MatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDmatrixRHSIDmatrix_rhsid. The number of rows of matrices MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs and MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHSmatrix_rhs must be identical. The operator returns the matrix handle MatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDmatrixResultIDmatrix_result_id of the matrix MatrixResultMatrixResultMatrixResultMatrixResultmatrixResultmatrix_result. Access to the elements of the matrix is possible e.g. with the operator get_full_matrixget_full_matrixGetFullMatrixGetFullMatrixGetFullMatrixget_full_matrix.

For linear equation systems, the equations MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResultmatrix_result = MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHSmatrix_rhs are solved. Therefore, the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs must be a square matrix and the parameter EpsilonEpsilonEpsilonEpsilonepsilonepsilon must be 0. The type of the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs can be selected via the parameter MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype. 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 MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs need not be a square matrix. The linear least squares problem is solved using the singular value decomposition (SVD) of the matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs by minimizing ||MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHSmatrix_rhs - MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResultmatrix_result||. 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 MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs may be rank-deficient. The type of matrix must be selected via MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype = '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 MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype = '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 MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs must contain the relevant information of the matrix. The strictly lower triangular part of the matrix is not referenced. For MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype = 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular""lower_triangular" the lower triangular part of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs must contain the relevant information of the matrix. The strictly upper triangular part of the matrix is not referenced. For MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype = 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal""tridiagonal", only the main diagonal, the superdiagonal, and the subdiagonal of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs are used. The other parts of the matrix are not referenced. If the referenced part of the input MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHSmatrix_lhs is not of the specified type, an exception is raised.

Execution Information

Parameters

MatrixLHSIDMatrixLHSIDMatrixLHSIDMatrixLHSIDmatrixLHSIDmatrix_lhsid (input_control)  matrix HMatrix, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

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

MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSTypematrix_lhstype (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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 HTuplefloatHTupleHtuple (real) (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

MatrixRHSIDMatrixRHSIDMatrixRHSIDMatrixRHSIDmatrixRHSIDmatrix_rhsid (input_control)  matrix HMatrix, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Matrix handle of the input matrix of right hand side.

MatrixResultIDMatrixResultIDMatrixResultIDMatrixResultIDmatrixResultIDmatrix_result_id (output_control)  matrix HMatrix, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

New matrix handle with the solution.

Result

If the parameters are valid, the operator solve_matrixsolve_matrixSolveMatrixSolveMatrixSolveMatrixsolve_matrix returns the value TRUE. If necessary, an exception is raised.

Possible Predecessors

create_matrixcreate_matrixCreateMatrixCreateMatrixCreateMatrixcreate_matrix

Possible Successors

get_full_matrixget_full_matrixGetFullMatrixGetFullMatrixGetFullMatrixget_full_matrix, get_value_matrixget_value_matrixGetValueMatrixGetValueMatrixGetValueMatrixget_value_matrix

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