# 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*^{ T}x
*AL*^{ -T}L^{ T}x = λLL^{ T}x
*L*^{ -1}AL^{ -T}L^{ T}x = λL^{ T}x
*(L*^{ -1}AL^{ -T})(L^{ T}x) = λ(L^{ T}x)
so we get the following problem:

*Cy = λy*
*C = L*^{ -1}AL^{ -T}
*y = L*^{ T}x
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.

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:

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.

## ALGLIB 3.12.0
for C#

C# library with native kernels.

Delivered with sources.

VB.NET and IronPython wrappers.

Extreme portability.

## ALGLIB 3.12.0
for Delphi

Delphi wrapper around C core.

Delivered as precompiled binary.

Compatible with FreePascal.

## ALGLIB 3.12.0
for CPython

CPython wrapper around C core.

Delivered as precompiled binary.