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