I would like to solve a system of differential equations of the following form: $ \frac{dy}{dt} = i A y $. Here, $ A \in \mathbb{R} $ is a large, sparse and symmetric matrix and $i$ is the imaginary number.
In the case where $A$ is diagonal, the solutions are simply complex exponentials. As the magnitude of the off-diagonal coefficients increase, the solutions are still oscillatory in nature but interactions between the different components of $y$ cause the amplitudes to change over time (beating patterns).
I am interested in finding an efficient numerical method to accurately find $y(T)$ when $y(0)$ is given, where $T$ is a time span much larger than the typical period of the oscillations, and $y(t)$ is a very large vector (more than 5000 elements).
I have tried solving this problem using matrix exponentials and ODE solvers. Matrix exponentials (MATLAB implementation using Padé approximants) do not scale well to large systems and take a prohibitively long time to run. ODE solvers tend to select very small step sizes (due to the oscillations), and take even more time to run (I tried stiff and non-stiff solvers).
Is there a way to solve this system more efficiently for large vector sizes by exploiting the structure of the equation? What is the relevant literature for this particular problem?
I note that there are related questions (1, 2) on this site, but I am hoping to find a solution that would work well specifically for the problem described above.
If $u_j$ are orthonormal eigenvectors of $A$ corresponding to eigenvalues $\lambda_j$, the solution for initial value $y(0)$ will be $$ \eqalign{y(T) &= \sum_j c_j \exp(iT \lambda_j) u_j \cr c_j &= {u_j}^T y(0)}$$ Unfortunately the matrix formed by the eigenvectors will not be sparse, so there's a large amount of data to compute, but if you're lucky you might have only relatively few large $c_j$'s and everything else small enough to ignore. Matlab (for example) should be able to handle eigenvalues and eigenvectors for a $5000 \times 5000$ matrix.