Eigen Decomposition of Hermitian symmetric matrix using MATLAB Coder

I'm planning to implement the eig function as part of a MATLAB coder project.
The input matrix is complex, and Hermitian symmetric and positive definite.
My worry is about timing, how long the algorithm requires, since I'll be calling it a lot.
My assumption is that the C-code implementation will employ the "full-blown" eigen decompsition, without considering that the problem could simplified using the knowledge of the matrix properties. For example, all the eigen-values will be positive and real-valued.
I have not yet looked into BLAS or LAPACK, etc., to see of there is a special case of eig for symmetric, positive definite matrices.
Any ideas?

2 Comments

Your decription is confused:
  • Hermitian is not symmetric if the matrix is complex (not pure real).
  • Symmetric is not positive in general, one cannot even speak about positiveness since x'*H*x is complex.
Yes, I (perhaps wrongly) use the term "Hermitian Symmetric" meaning "Hermitian" when the real parts are symmetric and the imaginary parts are "anti-symmetric", i.e. the matrix is its own conjugate transpose.
The matrix is also positive definite, due to the way it is generated; think sample covariance matrix.

Sign in to comment.

 Accepted Answer

According to the Extended Capabilities section of the documentation page for the eig function it already supports C/C++ code generation with MATLAB Coder.

5 Comments

True, that, but is it optimized based on matrix properties?
In general the coder uses thet same algorithm than MATLAB, it will then detect if you matrix is Hermitian and use appropriate algorithm.
You must ensure that your matrix is Hermitian numerically meaning
H == H'
exactly.
Good to know, thanks! Since the lower triangle is being constructed as the conjugate of the upper triangle, exactness is guaranteed.
So the C-code will contain the "appropriate" (optimized) algorithm, and will also contain "non-appropriate" algorithms that will never be called. My software verification team won't like that, in terms of code coverage. Oh, well.
The coder version of EIG does not support special branches for the Hermitian case. In fact, it will treat most simple eigenvalue problems as if they were generalized eigenvalue problems, in the implementation.
See the Extended Capabilities section, which notes
"For the standard eigenvalue problem, [V,D] = eig(A), when A is Hermitian or skew-Hermitian, code generation uses schur to calculate V and D. Otherwise, the results of [V,D] = eig(A) are similar to the results obtained by using [V,D] = eig(A,eye(size(A)),'qz') in MATLAB, except that the columns of V are normalized."
Note there are differences in behavior based on whether you specify the LAPACK library callback class.
schur sounds like the ticket for me. Thank you, Christine Tobler, and to others who responded.

Sign in to comment.

More Answers (0)

Categories

Find more on Linear Algebra in Help Center and File Exchange

Products

Release

R2021b

Asked:

AJ
on 5 Jun 2022

Commented:

AJ
on 8 Jun 2022

Community Treasure Hunt

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

Start Hunting!