Search code examples
matlabmatrixvectorization

MATLAB: Create a block diagonal matrix with same repeating block


I have a matrix K of dimensions n x n. I want to create a new block diagonal matrix M of dimensions N x N, such that it contains d blocks of matrix K as its diagonal.

I would have directly used M = blkdiag(K,K,K) etc. had d been smaller. Unfortunately, d is very large and I don't want to manually write the formula with d exactly same arguments for the blkdiag() function.

Is there any shorter, smarter way to do this?


Solution

  • you can use kron for that.

    M = kron(X,Y)
    

    returns the Kronecker tensor product of X and Y. The result is a large array formed by taking all possible products between the elements of X and those of Y. If X is m-by-n and Y is p-by-q, then kron(X,Y) is m*p-by-n*q. So in your case something like this will do:

    M = kron(eye(L),K)
    

    with L the # of blocks.