I have a square matrix of the form $$M=D+\overset{N}{\underset{n=1}\bigoplus}R_n,$$
where $R_n$ are circulant matrices, $D$ is a diagonal matrix and $\oplus$ is Kronecker sum. Its size is quite big, but as can be seen from its form, it's in fact not very dense in a way. Namely, its elements can be generated by a simple procedure not needing much memory - the only things needing storage are a vector for diagonal of $D$, and a set of smaller vectors for first rows of $R_n$ (i.e. totally two vectors matching dimensions of $M$).
Actually, diagonal matrix is simple to get with SparseArray, but I don't know how to make "sparse" circulant matrices.
So the question: is there a nice way to store this matrix sparsely so that it could be operated on by e.g. Eigensystem[] with Arnoldi method or something similar?
SparseArrayas the second argument toIdentityMatrixallows aKroneckerSumon sparse matrices to be easily built on top ofKroneckerProduct. – b3m2a1 Aug 06 '18 at 09:30