ReduceToHessenbergBalanced

Reduces a real or complex general n-by-n balanced matrix A to upper Hessenberg form B by an orthogonal similarity transformation: Q**T * A * Q = H. LAPACK function GEHRD.

Computing for type matrix<double>

bool  matrix::ReduceToHessenbergBalanced(
   long            ilo,          // subscript of balanced matrix
   long            ihi,          // superscript of balanced matrix
   matrix&         H,            // upper Hessenberg matrix
   matrix&         reflect_q,    // q-reflectors
   vector&         tau_q         // scalar factors of the elementary reflectors Q
   );

Computing for type matrix<float>

bool  matrixf::ReduceToHessenbergBalanced(
   long            ilo,          // subscript of balanced matrix
   long            ihi,          // superscript of balanced matrix
   matrixf&        H,            // upper Hessenberg matrix
   matrixf&        reflect_q,    // q-reflectors
   vectorf&        tau_q         // scalar factors of the elementary reflectors Q
   );

Computing for type matrix<complex>

bool  matrixc::ReduceToHessenbergBalanced(
   long            ilo,          // subscript of balanced matrix
   long            ihi,          // superscript of balanced matrix
   matrixc&        H,            // upper Hessenberg matrix
   matrixc&        reflect_q,    // q-reflectors
   vectorc&        tau_q         // scalar factors of the elementary reflectors Q
   );

Computing for type matrix<complexf>

bool  matrixcf::ReduceToHessenbergBalanced(
   long            ilo,          // subscript of balanced matrix
   long            ihi,          // superscript of balanced matrix
   matrixcf&       H,            // upper Hessenberg matrix
   matrixcf&       reflect_q,    // q and p-reflectors
   vectorcf&       tau_q         // scalar factors of the elementary reflectors Q
   );

Parameters

ilo

[in]  Subscript of the balanced matrix. As returned by MatrixBalance.

ihi

[in]  Superscript of the balanced matrix. As returned by MatrixBalance.

H

[out]  Upper Hessenberg matrix.

reflect_q

[out] Owerwritten balanced matrix A, the elements below the first subdiagonal, with the array tau_q, represent the orthogonal matrix Q as a product of elementary reflectors.

tau_q

[out] Vector of the scalar factors of the elementary reflectors which represent the orthogonal matrix Q.

Return Value

Return true if successful, otherwise false in case of an error.

Note

It is assumed that A is already upper triangular in rows and columns 1:ilo-1 and ihi+1:N. ilo and ihi are normally set by a previous call to MatrixBalance; otherwise they should be set to 1 and N respectively.

The matrix Q is represented as a product of (ihi-ilo) elementary  reflectors

    Q = H(ilo) H(ilo+1) . . . H(ihi-1).

Each H(i) has the form

    H(i) = I - tau * v * v**T

where tau is a real scalar, and v is a real vector with v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on exit in reflect_q(i+2:ihi,i), and tau in tau_q(i)

The contents of reflect_q are illustrated by the following example, with n = 7, ilo = 2 and ihi = 6:

input matrix on entry,           reflect_q on exit,

( a   a   a   a   a   a   a )    ( a   a   h   h   h   h   a )

(     a   a   a   a   a   a )    (     a   h   h   h   h   a )

(     a   a   a   a   a   a )    (     h   h   h   h   h   h )

(     a   a   a   a   a   a )    (     v2  h   h   h   h   h )

(     a   a   a   a   a   a )    (     v2  v3  h   h   h   h )

(     a   a   a   a   a   a )    (     v2  v3  v4  h   h   h )

(                         a )    (                         a )
 

where a denotes an element of the original matrix A, h denotes a modified element of the upper Hessenberg matrix H, and vi denotes an element of the vector defining H(i).

Matrix Q can be produced with ReflectHessenbergBalancedToQ method applied to the reflect_q matrix.