- ReduceToBidiagonal
- ReflectBidiagonalToQP
- ReduceSymmetricToTridiagonal
- ReflectTridiagonalToQ
ReduceToBidiagonal
Преобразует произвольную вещественную или комплексную матрицу A размера m×n к верхнему или нижнему бидиагональному виду B с помощью ортогонального преобразования: Q**T * A * P = B. При m >= n матрица B будет верхней бидиагональной; при m < n — нижней. Функция Lapack GEBRD.
Вычисления для типа matrix<double>
bool matrix::ReduceToBidiagonal(
|
Вычисления для типа matrix<float>
bool matrix::ReduceToBidiagonal(
|
Вычисления для типа matrix<complex>
bool matrix::ReduceToBidiagonal(
|
Вычисления для типа matrix<complexf>
bool matrix::ReduceToBidiagonal(
|
Параметры
Б
[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 обозначают диагональные и недиагональные элементы матрицы B, vi — элемент вектора, определяющего H(i), а ui — элемент вектора, определяющего G(i).
Матрицы Q и P могут быть получены с помощью метода ReflectBidiagonalToQP.