MATLAB: Fastest way to create N by 1 matrix which contain lots of zero without using for loop

block matrixsparsewithout loop.

I want to express n x 1 matrix, X
X = [ a; a; a; a; b; 0; 0; 0; b; 0; 0; 0; (…) b; 0; 0; 0; b; 0; 0; 0; c; c; ] ("b; 0; 0; 0;" block is repeated N times)
What I first design is that:
A = a * ones(4,1) ; B = zeros(4,1); B(1) = b ; C = c * ones(2,1); X = [ A ; B ; B ; (…) B ; B ; C ] ;
But the problem is that I cannot set a number of center block. How can I code it?
Thanks in advance 😀

Best Answer

a = 1;
b = 2;
c = 3;
N = 10;
D = [repelem(a, 4, 1);
repmat([b; 0; 0; 0], N, 1);
repelem(c, 2, 1)];