How to create a matrix with special block diagonal structure
2 次查看(过去 30 天)
显示 更早的评论
I would like to create a matrix that has the following structure ( The blue dots are ones and the rest is zeros)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1010405/image.png)
the number of the dots is determined by the triangular sequence. For example, the above matrix was obtained with n = 8. So is there any way to program this for any arbitrary n?
0 个评论
采纳的回答
DGM
2022-5-25
Here's one way. I'm sure there are plenty of others.
n = 8;
sz = sum(1:n);
A = zeros(sz);
idx0 = 1;
for k = 1:n
A(idx0:idx0+k-1,idx0:idx0+k-1) = 1;
idx0 = idx0+k;
end
A = tril(A);
imshow(A)
0 个评论
更多回答(3 个)
Steven Lord
2022-5-25
n = 8;
c = cell(1, n);
for k = 1:n
c{k} = tril(ones(k));
end
B = blkdiag(c{:});
spy(B)
0 个评论
Torsten
2022-5-25
ntriangles = 4;
n = ntriangles*(ntriangles+1)/2;
A = zeros(n);
rowstart = 1;
rowend = 1;
for i = 1:ntriangles
for jrow = rowstart:rowend
A(jrow:rowend,jrow) = 1.0;
end
rowstart = rowend + 1;
rowend = rowstart + i;
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!