ReduceToBidiagonal

Преобразует произвольную вещественную или комплексную матрицу A размера m×n к верхнему или нижнему бидиагональному виду B с помощью ортогонального преобразования: Q**T * A * P = B. При m >= n матрица B будет верхней бидиагональной; при m < n — нижней. Функция Lapack GEBRD.

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

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

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

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

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

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

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

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

Параметры

Б

[out]  Верхняя или нижняя бидиагональная матрица.

reflect_qp

[out]  Преобразованная матрица A. При m >= n диагональ и первая наддиагональ перезаписываются верхней бидиагональной матрицей B; элементы ниже диагонали вместе с вектором tau_q представляют ортогональную матрицу Q как произведение элементарных отражателей, а элементы выше первой наддиагонали вместе с вектором tau_p представляют ортогональную матрицу P как произведение элементарных отражателей. При m < n диагональ и первая поддиагональ перезаписываются нижней бидиагональной матрицей B; при этом элементы ниже первой поддиагонали вместе с вектором tau_q представляют ортогональную матрицу Q как произведение элементарных отражателей, а элементы выше диагонали с вектором tau_p представляют ортогональную матрицу P как произведение элементарных отражателей.

tau_q

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

tau_p

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

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

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

Примечание

Матрицы Q и P представляются в виде произведений элементарных рефлекторов:

При m >= n

    Q = H(1) H(2) . . . H(n)  и  P = G(1) G(2) . . . G(n-1)

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

    H(i) = I - tauq * v * v**T  и G(i) = I - taup * u * u**T

где tauq и taup — это скаляры, а v и u — векторы;

v(1:i-1) = 0, v(i) = 1, а v(i+1:m) сохраняется на выходе в матрице A(i+1:m,i);

u(1:i) = 0, u(i+1) = 1, а u(i+2:n) сохраняется на выходе в матрице A(i,i+2:n);

tauq сохраняется в массиве tau_q(i), а taup — в tau_p(i).

При m < n

    Q = H(1) H(2) . . . H(m-1)  и  P = G(1) G(2) . . . G(m)

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

    H(i) = I - tauq * v * v**T  и G(i) = I - taup * u * u**T

где tauq и taup — это скаляры, а v и u — векторы;

v(1:i) = 0, v(i+1) = 1, а v(i+2:m) сохраняется на выходе в матрице A(i+2:m,i);

u(1:i-1) = 0, u(i) = 1, а u(i+1:n) сохраняется на выходе в матрице A(i,i+1:n);

tauq сохраняется в массиве tau_q(i), а taup — в tau_p(i).

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

m = 6 and n = 5 (m > n):          m = 5 and n = 6 (m < n):
  (  d   e   u1  u1  u1 )           (  d   u1  u1  u1  u1  u1 )
  (  v1  d   e   u2  u2 )           (  e   d   u2  u2  u2  u2 )
  (  v1  v2  d   e   u3 )           (  v1  e   d   u3  u3  u3 )
  (  v1  v2  v3  d   e  )           (  v1  v2  e   d   u4  u4 )
  (  v1  v2  v3  v4  d  )           (  v1  v2  v3  e   d   u5 )
  (  v1  v2  v3  v4  v5 )

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

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