Functions
vnl_complex_generalized_schur.h File Reference

Solves the generalized eigenproblem det(t A - s B) = 0. More...

#include <complex>
#include <algorithm>
#include <vnl/vnl_matrix.h>
#include <vnl/vnl_vector.h>
#include <vnl/algo/vnl_algo_export.h>

Go to the source code of this file.

Functions

template<class T >
bool vnl_generalized_schur (vnl_matrix< std::complex< T > > *A, vnl_matrix< std::complex< T > > *B, vnl_vector< std::complex< T > > *alpha, vnl_vector< std::complex< T > > *beta, vnl_matrix< std::complex< T > > *L, vnl_matrix< std::complex< T > > *R)
 For a scalar type T, this function uses orthogonal matrices L, R over complex<T> to reduce the (square) matrices A, B to generalized (complex) Schur form. More...
 
template<>
VNL_ALGO_EXPORT bool vnl_generalized_schur (vnl_matrix< std::complex< double > > *A, vnl_matrix< std::complex< double > > *B, vnl_vector< std::complex< double > > *alpha, vnl_vector< std::complex< double > > *beta, vnl_matrix< std::complex< double > > *L, vnl_matrix< std::complex< double > > *R)
 
template<class T >
std::complex< T > vnl_complex_generalized_schur_convert_cast (std::complex< double > a)
 

Detailed Description

Solves the generalized eigenproblem det(t A - s B) = 0.

Author
Peter Vanroose, ABIS Leuven
Date
9 Jan 2011 Adapted from vnl_generalized_schur.h/.cxx

Definition in file vnl_complex_generalized_schur.h.

Function Documentation

◆ vnl_complex_generalized_schur_convert_cast()

template<class T >
std::complex<T> vnl_complex_generalized_schur_convert_cast ( std::complex< double >  a)

Definition at line 52 of file vnl_complex_generalized_schur.h.

◆ vnl_generalized_schur() [1/2]

template<class T >
bool vnl_generalized_schur ( vnl_matrix< std::complex< T > > *  A,
vnl_matrix< std::complex< T > > *  B,
vnl_vector< std::complex< T > > *  alpha,
vnl_vector< std::complex< T > > *  beta,
vnl_matrix< std::complex< T > > *  L,
vnl_matrix< std::complex< T > > *  R 
)
inline

For a scalar type T, this function uses orthogonal matrices L, R over complex<T> to reduce the (square) matrices A, B to generalized (complex) Schur form.

This means that A and B become upper triangular, A <– L^* A R, and B <– L^* B R. Of course, A and B should be of the same size.

In addition, the function computes the (complex) generalized eigenvalues alpha(k) : beta(k) for k = 0, 1, 2,...

To pass in scalar type T matrices A and B, you'll have to first convert them to complex matrices since they will be overwritten by they (complex) upper triangular decomposition.

Definition at line 55 of file vnl_complex_generalized_schur.h.

◆ vnl_generalized_schur() [2/2]

template<>
VNL_ALGO_EXPORT bool vnl_generalized_schur ( vnl_matrix< std::complex< double > > *  A,
vnl_matrix< std::complex< double > > *  B,
vnl_vector< std::complex< double > > *  alpha,
vnl_vector< std::complex< double > > *  beta,
vnl_matrix< std::complex< double > > *  L,
vnl_matrix< std::complex< double > > *  R 
)

Definition at line 13 of file vnl_complex_generalized_schur.cxx.