ReduceToHessenbergBalanced

Преобразует вещественную или комплексную общую сбалансированную матрицу A размера n на n к верхней форме Хессенберга H с помощью ортогонального преобразования подобия: Q**T * A * Q = H. Функция LAPACK GEHRD.

Вычисления для типа matrix<double>

bool  matrix::ReduceToHessenbergBalanced(
   long            ilo,          // индекс нижней границы сбалансированной матрицы
   long            ihi,          // индекс верхней границы сбалансированной матрицы
   matrix&         H,            // верхняя матрица Хессенберга
   matrix&         reflect_q,    // q-рефлекторы
   vector&         tau_q         // скалярные множители элементарных отражателей Q
   );

Вычисления для типа matrix<float>

bool  matrixf::ReduceToHessenbergBalanced(
   long            ilo,          // индекс нижней границы сбалансированной матрицы
   long            ihi,          // индекс верхней границы сбалансированной матрицы
   matrixf&        H,            // верхняя матрица Хессенберга
   matrixf&        reflect_q,    // q-рефлекторы
   vectorf&        tau_q         // скалярные множители элементарных отражателей Q
   );

Вычисления для типа matrix<complex>

bool  matrixc::ReduceToHessenbergBalanced(
   long            ilo,          // индекс нижней границы сбалансированной матрицы
   long            ihi,          // индекс верхней границы сбалансированной матрицы
   matrixc&        H,            // верхняя матрица Хессенберга
   matrixc&        reflect_q,    // q-рефлекторы
   vectorc&        tau_q         // скалярные множители элементарных отражателей Q
   );

Вычисления для типа matrix<complexf>

bool  matrixcf::ReduceToHessenbergBalanced(
   long            ilo,          // индекс нижней границы сбалансированной матрицы
   long            ihi,          // индекс верхней границы сбалансированной матрицы
   matrixcf&       H,            // верхняя матрица Хессенберга
   matrixcf&       reflect_q,    // q- и p-рефлекторы
   vectorcf&       tau_q         // скалярные множители элементарных отражателей Q
   );

Параметры

ilo

[in]  Индекс нижней границы сбалансированной матрицы. Значение, возвращаемое методом MatrixBalance.

ihi

[in]  Индекс верхней границы сбалансированной матрицы. Значение, возвращаемое методом MatrixBalance.

H

[out]  Верхняя матрица Хессенберга.

reflect_q

[out] Перезаписанная сбалансированная матрица A. Элементы ниже первой поддиагонали вместе с массивом tau_q представляют ортогональную матрицу Q как произведение элементарных отражений.

tau_q

[out] Вектор скалярных множителей элементарных отражателей, представляющих ортогональную матрицу Q.

Возвращаемое значение

Возвращает true в случае успеха, иначе false в случае ошибки.

Примечание

Предполагается, что матрица A уже имеет верхнетреугольный вид в строках и столбцах 1:ilo-1 и ihi+1:N. Значения ilo и ihi обычно задаются функцией MatrixBalance. В противном случае их следует установить равными 1 и N соответственно.

Матрица Q представлена как произведение (ihi-ilo) элементарных отражений:

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

Каждый H(i) имеет вид

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

Где tau — это вещественный скаляр, а v — вещественный вектор, при этом v(1:i) = 0, v(i+1) = 1 и v(ihi+1:n) = 0; v(i+2:ihi) сохраняется в матрице reflect_q(i+2:ihi,i), а tau — в массиве tau_q(i)

В примере ниже показано содержимое матрицы reflect_q. Здесь n = 7, ilo = 2 и 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 )
 

где a означает элемент исходной матрицы A, h — модифицированный элемент верхней матрицы Хессенберга H, а vi — элемент вектора, определяющего H(i).

Матрица Q может быть получена с помощью метода ReflectHessenbergBalancedToQ, примененного к матрице reflect_q.