EigenHessenbergBalancedSchurQ

Вычисляет собственные значения матрицы Хессенберга H и матриц T и Z из разложения Шура H = Z T Z**T, где T — верхняя квазитреугольная матрица (форма Шура), а Z — ортогональная матрица векторов Шура. Опционально Z может быть перемножена справа с входной ортогональной матрицей Q, что позволяет получить факторизацию Шура матрицы A, которая была приведена к форме Хессенберга H ортогональной матрицей Q:

    A = Q*H*Q**T = (QZ)*T*(QZ)**T.

Функция LAPACK HSEQR.

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

bool  matrix::EigenHessenbergBalancedSchurQ(
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   matrix&               Q,                       // ортогональная матрица Q
   vectorc&              eigen_values,            // вектор вычисленных собственных значений
   matrix&               schur_t,                 // матрица T в форме Шура
   matrix&               schur_z                  // матрица Z векторов Шура
   );

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

bool  matrixf::EigenHessenbergBalancedSchurQ(
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   matrixf&              Q,                       // ортогональная матрица Q
   vectorcf&             eigen_values,            // вектор вычисленных собственных значений
   matrixf&              schur_t,                 // матрица T в форме Шура
   matrixf&              schur_z                  // матрица Z векторов Шура
   );

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

bool  matrixc::EigenHessenbergBalancedSchurQ(
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   matrixc&              Q,                       // ортогональная матрица Q
   vectorc&              eigen_values,            // вектор вычисленных собственных значений
   matrixc&              schur_t,                 // матрица T в форме Шура
   matrixc&              schur_z                  // матрица Z векторов Шура
   );

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

bool  matrixcf::EigenHessenbergBalancedSchurQ(
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   matrixcf&             Q,                       // ортогональная матрица Q
   vectorcf&             eigen_values,            // вектор вычисленных собственных значений
   matrixcf&             schur_t,                 // матрица T в форме Шура
   matrixcf&             schur_z                  // матрица Z векторов Шура
   );

Параметры

ilo

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

ihi

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

Q

[in]  Ортогональная матрица Q, полученная методом ReflectHessenbergBalancedToQ. Матрица Q может быть матрицей нулевого размера. В этом случае разложению подвергается сама матрица Хессенберга H, а не исходная матрица A. Если используется матрица Q, то вычисляется разложение исходной матрицы A, приведенной к форме Хессенберга (см. ReduceToHessenbergBalanced).

eigen_values

[out] Вектор собственных значений.

schur_t

[out]  Верхнетреугольная матрица Шура (форма Шура для входной матрицы).

schur_z

[out]  Матрица векторов Шура.

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

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

Примечание

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

Реальные (не комплексные) матрицы могут иметь комплексное решение. Поэтому входной вектор собственных значений должен быть комплексным. В случае комплексного решения код ошибки устанавливается в 4019 (ERR_MATH_OVERFLOW). В противном случае нужно учитывать только реальные части комплексных значений вектора собственных значений.