invert_matrix
— Invert a matrix.
invert_matrix( : : MatrixID, MatrixType, Epsilon : MatrixInvID)
The operator invert_matrix
computes the inverse of the
Matrix
defined by the matrix handle MatrixID
. A
new matrix MatrixInv
is generated with the result and the
matrix handle MatrixInvID
of this matrix is returned.
Access to the elements of the matrix is possible e.g. with the
operator get_full_matrix
.
For Epsilon
= 0, the inverse is computed. The type of the
Matrix
can be selected via MatrixType
. The
following values are supported: 'general' for general,
'symmetric' for symmetric, 'positive_definite' for
symmetric positive definite, 'tridiagonal' for tridiagonal,
'upper_triangular' for upper triangular,
'permuted_upper_triangular' for permuted upper triangular,
'lower_triangular' for lower triangular, and
'permuted_lower_triangular' for permuted lower triangular
matrices.
Example 1:
Example 2:
Example 3:
For Epsilon
> 0, the pseudo inverse is computed using a
singular value decomposition (SVD). During the computation, 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. If a
square matrix is computed with the SVD algorithm the computation
takes more time. The type of the matrix must be set to
MatrixType
= 'general' .
Example:
Note: The relative accuracy of the floating point representation of
the used data type (double) is Epsilon
= 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.
For MatrixType
= 'symmetric' ,
'positive_definite' , or 'upper_triangular' the
upper triangular part of the input Matrix
must contain
the relevant information of the matrix. The strictly lower
triangular part of the matrix is not referenced. For
MatrixType
= 'lower_triangular' the lower
triangular part of the input Matrix
must contain the
relevant information of the matrix. The strictly upper triangular
part of the matrix is not referenced. For MatrixType
=
'tridiagonal' , only the main diagonal, the superdiagonal,
and the subdiagonal of the input Matrix
are used. The
other parts of the matrix are not referenced. If the referenced
part of the input Matrix
is not of the specified type,
an exception is raised.
MatrixID
(input_control) matrix →
(handle)
Matrix handle of the input matrix.
MatrixType
(input_control) string →
(string)
The type of the input matrix.
Default value: 'general'
List of values: 'general' , 'lower_triangular' , 'permuted_lower_triangular' , 'permuted_upper_triangular' , 'positive_definite' , 'symmetric' , 'tridiagonal' , 'upper_triangular'
Epsilon
(input_control) real →
(real)
Type of inversion.
Default value: 0.0
Suggested values: 0.0, 2.2204e-16
MatrixInvID
(output_control) matrix →
(handle)
Matrix handle with the inverse matrix.
If the parameters are valid, the operator invert_matrix
returns the value 2 (H_MSG_TRUE). If necessary, an exception is raised.
get_full_matrix
,
get_value_matrix
transpose_matrix
,
transpose_matrix_mod
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.
Foundation