Calculating exponential of a complex symmetric matrix

4 views (last 30 days)
I work in electron spin resonance spectroscopy, where the differential equation describing the quantum statistical mechanical evolution of a spin ensemble, crudely, has the form dx/dt=Ax, where A is a complex symmetric matrix. Hence the solution is x=exp(At), which necessitates the computation of the exponential of a complex symmetric matrix.
1. I use expm in MATLAB, but don't know the error estimate on MATLAB's answer. Because according to my naive understanding of the scaling and squaring algorithm MATLAB uses, the error should be inversely related to the scaling factor 2^M. Is there a way MATLAB could tell me the error estimate on the answer from expm?
2. Also, if my matrix is very big, how I can make the expm routine work faster? Will a simple-minded parallel pool on MATLAB suffice? Or there are cleverer ways to use multiple cores to save time?
3. This is a math question, but is expm(At) * v (for some vector v) better than calculating the (A+iw)\v for many values of w and then taking a (discrete) Fourier transform of (A+iw)\v to give expm(At)?
4. The nice thing about a complex symmetric matrix A is that it can be written as B+iC, where B and C are both real symmetric. Is there a way I could coax MATLAB into taking advantage of this fact, when it calculates expm(A/2^M) in its scaling and squaring algorithm? Naively speaking, can I write expm(A/2^M)=expm((B+iC)/2^M) and then use the awesomeness of B, C in being real symmetric, to make expm more accurate? Or does MATLAB already do this or something related behind the scenes?
5. This is a general question about MATLAB functions when dealing with big matrices. I know that MATLAB routines are quite fast when there are no for loops. But if I start dealing with 50000*50000 matrices, is it advisable to rip off Fortran LAPACK routines to speed up the calculations, as MATLAB might face memory overload issues? Or there is a quick fix to such a problem in MATLAB and I can save myself the trouble of constructing a FORTRAN code to do the task?
Please pardon my prolixity here. Thanks in advance for your help.
  4 Comments
John D'Errico
John D'Errico on 9 Nov 2018
As James points out, expm is already going to use all the available cores you have if the matrix is at all large. A quick test just verified that fact on my computer, even for a moderately sized 1Kx1K matrix.
Steven Lord
Steven Lord on 9 Nov 2018
The first two References in the documentation page for the expm function may include some technical information relevant to at least your first question.

Sign in to comment.

Answers (0)

Categories

Find more on Eigenvalues & Eigenvectors in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!