# Which decomposition does dss_factor_real() compute?

## Which decomposition does dss_factor_real() compute?

Seems that the dss_factor() function decomposes a symmetric positive-definite matrix A either as L*L^T or as U*U^T.
My observation is that both representations are possible.

Fro example, if A=[14, 2, -2; 2, 4, 0; -2, 0, 1], it computes U*U^T with U=[3, 1, -2; 0, 2, 0; 0, 0, 1].
On the contrary, if A=[5, -2, -6; -2, 5, 3; -6, 3, 9], it computes L*L^T.
The type of decomposition is important when only forward or only backward substitution is performed by a subsequent dss_soleve_real() call with either MKL_DSS_FORWARD_SOLVE or MKL_DSS_BACKWARD_SOLVE option.

Is there any control to fix this vulnerability and always compute L*L^T?

3 posts / 0 new
For more complete information about compiler optimizations, see our Optimization Notice.

Quoting - agnonchik
Seems that the dss_factor() function decomposes a symmetric positive-definite matrix A either as L*L^T or as U*U^T.
My observation is that both representations are possible.

Fro example, if A=[14, 2, -2; 2, 4, 0; -2, 0, 1], it computes U*U^T with U=[3, 1, -2; 0, 2, 0; 0, 0, 1].
On the contrary, if A=[5, -2, -6; -2, 5, 3; -6, 3, 9], it computes L*L^T.
The type of decomposition is important when only forward or only backward substitution is performed by a subsequent dss_soleve_real() call with either MKL_DSS_FORWARD_SOLVE or MKL_DSS_BACKWARD_SOLVE option.

Is there any control to fix this vulnerability and always compute L*L^T?

Hi
Pardiso do L*L^T only but for reodered matrix A. Of course result of such decomposition of matrix A without reodering is not the same of L*L^Tdecompositionreodered matrix A. If you want to have L*L^T decompositionof matrix A the best way to choose your own type of reodering in dss_reorder by choosing parameter opt= MKL_DSS_MY_ORDER with vector perm=(1,2,3,....)
with best regards,