External Issue: Cholesky decomposition returns upper/lower triangular part of a matrix instead of the decomposition

16487, “CaptainSharf”, “Cholesky decomposition returns upper/lower triangular part of a matrix instead of the decomposition”, “2020-09-27T17:55:37Z”

Summary of Problem

Cholesky decomposition returns the lower-triangular part of a given matrix instead of decomposing the matrix such that $$L^TL=A$$. One also needs to check if the matrix $$A$$ is symmetric positive definite before decomposing it into $$L,L^T$$. In the current implementation the return value of LAPACK.potrf is ignored.

Steps to Reproduce

Source Code:

use LinearAlgebra;
var dom = {1..3,1..3};
var arr:[dom] real;
for (i,j) in dom do
    arr[i,j] = i;
for i in 1..3 do
    arr[1,i] = 0;
var matr = Matrix(arr);
var x = cholesky(matr);
writeln(x);

Compile command:
chpl -L/usr/local/opt/lapack/lib -I/usr/local/opt/lapack/include -llapacke cholesky.chpl

Execution command:
./cholesky

Output

Matrix is 
0.0 0.0 0.0
2.0 2.0 2.0
3.0 3.0 3.0
L is 
0.0 0.0 0.0
2.0 2.0 0.0
3.0 3.0 3.0

The cholesky decomposition of the matrix does not exist as it is singular

Configuration Information

  • chpl --version: chpl version 1.23.0