Octave includes a polymorphic solver, that selects an appropriate matrix factorization depending on the properties of the matrix itself. Generally, the cost of determining the matrix type is small relative to the cost of factorizing the matrix itself, but in any case the matrix type is cached once it is calculated, so that it is not re-determined each time it is used in a linear equation.
The selection tree for how the linear equation is solve or a matrix inverse is form is given by
The user can force the type of the matrix with the matrix_type
function. This overcomes the cost of discovering the type of the matrix.
However, it should be noted that identifying the type of the matrix incorrectly
will lead to unpredictable results, and so matrix_type
should be
used with care.
It should be noted that the test for whether a matrix is a candidate for
Cholesky factorization, performed above and by the matrix_type
function, does not give a certainty that the matrix is
Hermitian. However, the attempt to factorize the matrix will quickly
flag a non-Hermitian matrix.