Calculating exponential of a complex symmetric matrix
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
John D'Errico
2018-11-9
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
2018-11-9
The first two References in the documentation page for the expm function may include some technical information relevant to at least your first question.
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Eigenvalues & Eigenvectors 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!