ReduceSymmetricToTridiagonal

Преобразует вещественную симметричную или комплексную эрмитову матрицу A в трехдиагональную форму B с помощью ортогонального преобразования подобия: Q**T * A * Q = B. Lapack-функции SYTRD и HETRD.

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

bool  matrix::ReduceSymmetricToTridiagonal(
   matrix&         B,            // трехдиагональная матрица
   matrix&         reflect_q,    // q-отражатели
   vector&         tau_q         // скалярные коэффициенты элементарных отражателей Q
   );

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

bool  matrix::ReduceSymmetricToTridiagonal(
   matrixf&        B,            // трехдиагональная матрица
   matrixf&        reflect_q,    // q-отражатели
   vectorf&        tau_q         // скалярные коэффициенты элементарных отражателей Q
   );

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

bool  matrix::ReduceSymmetricToTridiagonal(
   matrixc&        B,            // трехдиагональная матрица
   matrixc&        reflect_q,    // q-отражатели
   vectorc&        tau_q         // скалярные коэффициенты элементарных отражателей Q
   );

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

bool  matrix::ReduceSymmetricToTridiagonal(
   matrixcf&       B,            // трехдиагональная матрица
   matrixcf&       reflect_q,    // q- и p-отражатели
   vectorcf&       tau_q         // скалярные коэффициенты элементарных отражателей Q
   );

Параметры

Б

[out]  Симметричная (или эрмитова) трехдиагональная матрица.

reflect_q

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

tau_q

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

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

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

Примечание

В верхнем случае матрица Q представляется как произведение элементарных отражателей

    Q = H(n-1) . . . H(2) H(1)

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

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

где tau — это скаляр, а v — это вектор, при этом v(i+1:n) = 0 и v(i) = 1; v(1:i-1) сохраняется в матрице A(1:i-1,i+1), а tau — в массиве tau_q(i).

В нижнем случае матрица Q представляется как произведение элементарных отражателей

    Q = H(1) H(2) . . . H(n-1)

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

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

где tau — это скаляр, а v — это вектор, при этом v(1:i) = 0 и v(i+1) = 1; v(i+2:n) сохраняется в матрице A(i+2:n,i), а tau — в массиве tau_q(i). */

Содержимое матрицы A при выходе (выходная матрица reflect_q) можно проиллюстрировать следующими примерами при n = 5:

  upper case:                          lower case:
 
  (  d   e   v2  v3  v4 )              (  d                  )
  (      d   e   v3  v4 )              (  e   d              )
  (          d   e   v4 )              (  v1  e   d          )
  (              d   e  )              (  v1  v2  e   d      )
  (                  d  )              (  v1  v2  v3  e   d  )

где d и e обозначают диагональные и недиагональные элементы матрицы B, а vi — элемент вектора, определяющего H(i).

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