Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
Is $M$ is a Hamiltonian matrix for a multidimensional system? I'm actually doing something similar, however I'm applying a similarity transform to $M$ and then only taking a small subset of the rows and columns; this destroys the structure of $M$, but it also vastly reduces the size which makes it easier to use dense matrix methods. – DumpsterDoofus Feb 22 '14 at 15:40
@DumpsterDoofus yes, it's a Hamiltonian matrix. What similarity transform do you apply? – Ruslan Feb 22 '14 at 15:43
I'm trying the one at I found the paper a bit hard to understand at first, I'm still working on optimization. – DumpsterDoofus Feb 22 '14 at 15:48

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.