SylvesterEquationTriangularBlocked

Решает уравнение Сильвестра для вещественных квазитреугольных или комплексных треугольных матриц:

   op(A)*X + X*op(B) = scale*C

или

   op(A)*X - X*op(B) = scale*C

где op(A) = A, A**T или A**H, а A и B — верхнетреугольные матрицы. A имеет размер m на m, а B — n на n; правая часть C и решение X имеют размер m на n, при этом коэффициент масштабирования scale устанавливается в значение <= 1 для предотвращения переполнения в X.

LAPACK-функция TRSYL3. Это блочная (BLAS уровня 3) версия TRSYL. Быстрее до 5 раз, но менее точная.

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

bool  matrix::SylvesterEquationTriangularBlocked(
   ENUM_BLAS_TRANS      transa,       // задает опцию op(A)
   ENUM_BLAS_TRANS      transb,       // задает опцию op(B)
   ENUM_SYLVESTER_ISIGN isign,        // задает знак в уравнении
   matrix&              B,            // верхнетреугольная матрица B
   matrix&              C,            // матрица правой части C
   matrix&              X,            // матрица решений X
   double&              scale         // коэффициент масштабирования
   );

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

bool  matrixf::SylvesterEquationTriangularBlocked(
   ENUM_BLAS_TRANS      transa,       // задает опцию op(A)
   ENUM_BLAS_TRANS      transb,       // задает опцию op(B)
   ENUM_SYLVESTER_ISIGN isign,        // задает знак в уравнении
   matrixf&             B,            // верхнетреугольная матрица B
   matrixf&             C,            // матрица правой части C
   matrixf&             X,            // матрица решений X
   float&               scale         // коэффициент масштабирования
   );

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

bool  matrix::SylvesterEquationTriangularBlocked(
   ENUM_BLAS_TRANS      transa,       // задает опцию op(A)
   ENUM_BLAS_TRANS      transb,       // задает опцию op(B)
   ENUM_SYLVESTER_ISIGN isign,        // задает знак в уравнении
   matrixc&             B,            // верхнетреугольная матрица B
   matrixc&             C,            // матрица правой части C
   matrixc&             X,            // матрица решений X
   double&              scale         // коэффициент масштабирования
   );

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

bool  matrix::SylvesterEquationTriangularBlocked(
   ENUM_BLAS_TRANS      transa,       // задает опцию op(A)
   ENUM_BLAS_TRANS      transb,       // задает опцию op(B)
   ENUM_SYLVESTER_ISIGN isign,        // задает знак в уравнении
   matrixcf&            B,            // верхнетреугольная матрица B
   matrixcf&            C,            // матрица правой части C
   matrixcf&            X,            // матрица решений X
   float&               scale         // коэффициент масштабирования
   );

Параметры

transa

[in]  Значение из перечисления ENUM_BLAS_TRANS, задающее опцию op(A).

transb

[in]  Значение из перечисления ENUM_BLAS_TRANS, задающее опцию op(B).

isign

[in]  Значение из перечисления ENUM_SYLVESTER_ISIGN, задающее знак в уравнении.

B

[in]  Верхнетреугольная матрица B.

C

[in]  Матрица C, столбцы которой представляют собой правые части систем линейных уравнений.

X

[out] Матрица X с решением уравнения Сильвестра.

scale

[out]  Коэффициент масштабирования, устанавливаемый ≤ 1 для предотвращения переполнения в X.

 

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

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

Примечание

Выходная матрица X имеет те же размеры, что и входная матрица B. Выходной вектор X имеет ту же размерность, что и входной вектор B.