Generalized positive definite EVD

The generalized symmetric positive-definite eigenvalue problem is one of the following eigenproblems:

Ax = λBx
ABx = λx
BAx = λx

where A is a symmetric matrix, and B is a symmetric positive-definite matrix.

It is obvious that this problem is easily reduced to the problem of finding eigenvalues for a non-symmetric general matrix (we can perform this reduction by multiplying both sides of the system by B-1 in the first case, and by multiplying together matrices A and B in the second and the third cases). However, the non-symmetric eigenvalue problem is much more complex, therefore it is reasonable to find a more effective way of solving the generalized symmetric problem. For instance, we can reduce this problem to a classic symmetric problem by using the Cholesky decomposition of matrix B (the example below applies to the first problem).

Ax = λBx
Ax = λLLTx
AL-TLTx = λLLTx
L-1AL-TLTx = λLTx
(L-1AL-T)(LTx) = λ(LTx)

so we get the following problem:

Cy = λy
C = L-1AL-T
y = LTx

The eigenvalues for both problems are the same, the eigenvectors for the initial problem could be found by solving a system of linear equations with a triangular matrix. Similar transformations could be performed for two other generalized problems.

Subroutine description

This module contains two subroutines for solving a generalized symmetric positive-definite eigenvalue problem. The first subroutine, SMatrixGEVDReduce, performs the reduction of the problem to a classic symmetric problem. It returns matrices C (problem matrix) and R (triangular matrix which is used to find the eigenvectors). The second subroutine, SMatrixGEVD, uses the first one to solve a generalized problem. It calls all the necessary subroutines by itself and transforms the obtained vectors.

This article is licensed for personal use only.

Download ALGLIB for C++ / C# / Java / Python / ...

ALGLIB Project offers you two editions of ALGLIB:

ALGLIB Free Edition:
+delivered for free
+offers full set of numerical functionality
+extensive algorithmic optimizations
-no multithreading
-non-commercial license

ALGLIB Commercial Edition:
+flexible pricing
+offers full set of numerical functionality
+extensive algorithmic optimizations
+high performance (SMP, SIMD)
+commercial license with support plan

Links to download sections for Free and Commercial editions can be found below:

ALGLIB 4.01.0 for C++

C++ library.
Delivered with sources.
Monolithic design.
Extreme portability.
Editions:   FREE   COMMERCIAL

ALGLIB 4.01.0 for C#

C# library with native kernels.
Delivered with sources.
VB.NET and IronPython wrappers.
Extreme portability.
Editions:   FREE   COMMERCIAL

ALGLIB 4.01.0 for Java

Java wrapper around HPC core.
Delivered with sources.
Seamless integration with Java.
Editions:   FREE   COMMERCIAL

ALGLIB 4.01.0 for Delphi

Delphi wrapper around C core.
Delivered as precompiled binary.
Compatible with FreePascal.
Editions:   FREE   COMMERCIAL

ALGLIB 4.01.0 for CPython

CPython wrapper around C core.
Delivered as precompiled binary.
Editions:   FREE   COMMERCIAL