Generalized symmetric positive definite eigenproblem

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 = λLL Tx
AL -TL Tx = λLL Tx
L -1AL -TL Tx = λL Tx
(L -1AL -T)(L Tx) = λ(L Tx)

so we get the following problem:

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

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# / ...

ALGLIB Project offers you two editions of ALGLIB:

ALGLIB Free Edition:
delivered for free
offers full set of numerical functionality
extensive algorithmic optimizations
no low level optimizations
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 3.12.0 for C++

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

ALGLIB 3.12.0 for C#

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

ALGLIB 3.12.0 for Delphi

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

ALGLIB 3.12.0 for CPython

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