I want to add another inquiry, In the above setting B=vech(A), on the relation B(f)=A(i,j), we have the following relation on the indices that f=(j-1)(k-j/2)+i, where k is the order of the matrix A (here k=3) if I know f and K can I know the corresponding i,j ??
How to create a matrix with 1 on ij-th position and zeros elsewhere from a lower triangular matrix?
3 views (last 30 days)
Show older comments
Niveen El Zayat
on 31 May 2018
Commented: Niveen El Zayat
on 31 May 2018
It may be a very simple question For a symmetric matrix A (3x3), say A=[2 4 6;4 8 11;6 11 20], the way to extract its unique elements (on and lower the diagonal) in an output vector B is:
B=(A(tril(A)~=0))
B = 2
4
6
8
11
20
How can I create matrices C1,C2,C3,...,C6, such that
B(1)=A.*C1, B(2)=A.*C2, ..., B(6)=A.*C6
C1=[1 0 0;0 0 0;0 0 0];
C2=[0 0 0;1 0 0;0 0 0];
C3=[0 0 0;0 0 0;1 0 0];
C4=[0 0 0;0 1 0;0 0 0];
C5=[0 0 0;0 0 0;0 1 0];
C6=[0 0 0;0 0 0;0 0 1];
Accepted Answer
Stephen23
on 31 May 2018
Edited: Stephen23
on 31 May 2018
A = [2,4,6;4,8,11;6,11,20]
S = size(A);
T = tril(true(S));
[R,C] = find(T);
N = nnz(T);
Z = zeros([S,N]);
V = 1:N;
Z(sub2ind([S,N],R,C,V(:))) = 1
Each page of Z (i.e. the third dimension) is one of the requested matrices, which you can access easily using indexing:
>> Z(:,:,1)
ans =
1 0 0
0 0 0
0 0 0
>> Z(:,:,2)
ans =
0 0 0
1 0 0
0 0 0
...
>> Z(:,:,6)
ans =
0 0 0
0 0 0
0 0 1
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!