MatrixBalance

Балансирует общую вещественную или комплексную квадратную матрицу A. Сначала выполняется перестановка A с помощью преобразования подобия для выделения собственных значений в первых 1 до ILO-1 и последних IHI+1 до N элементов на диагонали. Затем выполняется диагональное преобразование подобия для строк и столбцов от ILO до IHI, чтобы сделать нормы строк и столбцов максимально близкими. Оба шага являются опциональными. Балансировка может уменьшить 1-норму матрицы и повысить точность вычисленных собственных значений и/или собственных векторов. Функция LAPACK GEBAL.

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

bool  matrix::MatrixBalance(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   matrix&               AB,                      // сбалансированная матрица
   long&                 ilo,                     // индекс нижней границы сбалансированной матрицы
   long&                 ihi,                     // индекс нижней границы сбалансированной матрицы
   vector&               scale                    // подробности перестановок и масштабирования при балансировке входной матрицы
   );

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

bool  matrixf::MatrixBalance(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   matrixf&              AB,                      // сбалансированная матрица
   long&                 ilo,                     // индекс нижней границы сбалансированной матрицы
   long&                 ihi,                     // индекс нижней границы сбалансированной матрицы
   vectorf&              scale                    // подробности перестановок и масштабирования при балансировке входной матрицы
   );

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

bool  matrixc::MatrixBalance(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   matrixc&              AB,                      // сбалансированная матрица
   long&                 ilo,                     // индекс нижней границы сбалансированной матрицы
   long&                 ihi,                     // индекс нижней границы сбалансированной матрицы
   vector&               scale                    // подробности перестановок и масштабирования при балансировке входной матрицы
   );

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

bool  matrixcf::MatrixBalance(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   matrixcf&             AB,                      // сбалансированная матрица
   long&                 ilo,                     // индекс нижней границы сбалансированной матрицы
   long&                 ihi,                     // индекс нижней границы сбалансированной матрицы
   vectorf&              scale                    // подробности перестановок и масштабирования при балансировке входной матрицы
   );

Параметры

job

[in]  Значение из перечисления ENUM_EIG_BALANCE, которое определяет необходимость и способ балансировки входной матрицы.

AB

[out] Сбалансированная матрица.

ilo

[out]  Индекс нижней границы сбалансированной матрицы.

ihi

[out]  Индекс верхней границы сбалансированной матрицы.

scale

[out]  Вектор подробностей перестановок и масштабирования при балансировке входной матрицы.

Детали перестановок и масштабирования, применяемых при балансировке А.

Если P(j) — это индекс строки и столбца, меняемого местами со строкой и столбцом j, а D(j) — это коэффициент масштабирования, примененный к строке и столбцу j, тогда

scale(j) = P(j), для j = 1,...,ilo-1

= D(j), для j = ilo,...,ihi

= P(j) для j = ihi+1,..., n.

Порядок, в котором выполняются перестановки: сначала n в ihi+1, затем 1 в ilo-1.

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

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

ENUM_EIG_BALANCE

Перечисление, определяющее необходимость вычисления собственных векторов.

Идентификатор

Описание

EIGBALANCE_N

Не проводится диагональное масштабирование и перестановка.

EIGBALANCE_P

Выполняются перестановки, чтобы привести матрицу к почти верхнетреугольному виду. Не выполняется диагональное масштабирование

EIGBALANCE_S

Выполняется диагональное масштабирование матрицы. Перестановка не проводится

EIGBALANCE_B      

Выполняется и диагональное масштабирование, и перестановка.