You just want the lower triangle elements. semi-definite-ness is irrelevant to what you asked for at the end.
A = sprand(5,5,.3);
>> full(A)
ans =
0.46421 0.83266 0 0.022104 0.18026
0.26627 0 0 0 0
0 0 0 0 0
0 0 0 0.92865 0
0 0 0.37763 0.42783 0
>> [Rind,Cind,val] = find(tril(A))
Rind =
1
2
5
4
5
Cind =
1
1
3
4
4
val =
0.46421
0.26627
0.37763
0.92865
0.42783
That is how you would EXTRACT the lower triangle into a set of row and column indices, and the non-zero elements in those positions. Which on the face of it, seems to be your question. However, my guess is that you really want to build the sparse matrix from those values? Or, perhaps you just don't understand that sparse matrices already exist in MATLAB and can be used as such? It is not at all clear what is the real problem.
Regardless, if you wanted to build the matrix as a sparse one, then just call sparse using those vectors.
Atril = sparse(Rind,Cind,val,5,5)
Atril =
(1,1) 0.46421
(2,1) 0.26627
(5,3) 0.37763
(4,4) 0.92865
(5,4) 0.42783
>> full(Atril)
ans =
0.46421 0 0 0 0
0.26627 0 0 0 0
0 0 0 0 0
0 0 0 0.92865 0
0 0 0.37763 0.42783 0
2 Comments
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/522852-lower-triangular-semidefinite-matrix#comment_840781
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/522852-lower-triangular-semidefinite-matrix#comment_840781
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/522852-lower-triangular-semidefinite-matrix#comment_840835
Direct link to this comment
https://in.mathworks.com/matlabcentral/answers/522852-lower-triangular-semidefinite-matrix#comment_840835
Sign in to comment.