How to create a matrix with special block diagonal structure
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Romio
 el 25 de Mayo de 2022
  
    
    
    
    
    Respondida: Stephen23
      
      
 el 25 de Mayo de 2022
            I would like to create a matrix that has the following structure ( The blue dots are ones and the rest is zeros)

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 comentarios
Respuesta aceptada
  DGM
      
      
 el 25 de Mayo de 2022
        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 comentarios
Más respuestas (3)
  Steven Lord
    
      
 el 25 de Mayo de 2022
        n = 8;
c = cell(1, n);
for k = 1:n
    c{k} = tril(ones(k));
end
B = blkdiag(c{:});
spy(B)
0 comentarios
  Torsten
      
      
 el 25 de Mayo de 2022
        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 comentarios
  Stephen23
      
      
 el 25 de Mayo de 2022
        N = 8;
C = arrayfun(@ones,1:N,'uni',0); 
B = tril(blkdiag(C{:}));
spy(B)
0 comentarios
Ver también
Categorías
				Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







