trsyl#

Functions

void strsyl(
    const char* trana,
    const char* tranb,
    const INT   isgn,
    const INT   m,
    const INT   n,
    const f32*  A,
    const INT   lda,
    const f32*  B,
    const INT   ldb,
          f32*  C,
    const INT   ldc,
          f32*  scale,
          INT*  info
);
void strsyl(const char *trana, const char *tranb, const INT isgn, const INT m, const INT n, const f32 *A, const INT lda, const f32 *B, const INT ldb, f32 *C, const INT ldc, f32 *scale, INT *info)#

STRSYL solves the real Sylvester matrix equation:

op(A)*X + ISGN*X*op(B) = scale*C or op(A)*X - ISGN*X*op(B) = scale*C,

where op(A) = A or A**T, and A and B are both upper quasi- triangular. A is M-by-M and B is N-by-N; the right hand side C and the solution X are M-by-N; and scale is an output scale factor, set <= 1 to avoid overflow in X.

A and B must be in Schur canonical form (as returned by SHSEQR), that is, block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block has its diagonal elements equal and its off-diagonal elements of opposite sign.

Parameters

in
trana

Specifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘T’: op(A) = A**T (Transpose) = ‘C’: op(A) = A**H (Conjugate transpose = Transpose)

in
tranb

Specifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘T’: op(B) = B**T (Transpose) = ‘C’: op(B) = B**H (Conjugate transpose = Transpose)

in
isgn

Specifies the sign in the equation: = +1: solve op(A)*X + X*op(B) = scale*C = -1: solve op(A)*X - X*op(B) = scale*C

in
m

The order of the matrix A, and the number of rows in the matrices X and C. m >= 0.

in
n

The order of the matrix B, and the number of columns in the matrices X and C. n >= 0.

in
A

Double precision array, dimension (lda, m). The upper quasi-triangular matrix A, in Schur canonical form.

in
lda

The leading dimension of the array A. lda >= max(1, m).

in
B

Double precision array, dimension (ldb, n). The upper quasi-triangular matrix B, in Schur canonical form.

in
ldb

The leading dimension of the array B. ldb >= max(1, n).

inout
C

Double precision array, dimension (ldc, n). On entry, the M-by-N right hand side matrix C. On exit, C is overwritten by the solution matrix X.

in
ldc

The leading dimension of the array C. ldc >= max(1, m).

out
scale

The scale factor, scale, set <= 1 to avoid overflow in X.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • = 1: A and B have common or very close eigenvalues; perturbed values were used to solve the equation (but the matrices A and B are unchanged).

Functions

void dtrsyl(
    const char* trana,
    const char* tranb,
    const INT   isgn,
    const INT   m,
    const INT   n,
    const f64*  A,
    const INT   lda,
    const f64*  B,
    const INT   ldb,
          f64*  C,
    const INT   ldc,
          f64*  scale,
          INT*  info
);
void dtrsyl(const char *trana, const char *tranb, const INT isgn, const INT m, const INT n, const f64 *A, const INT lda, const f64 *B, const INT ldb, f64 *C, const INT ldc, f64 *scale, INT *info)#

DTRSYL solves the real Sylvester matrix equation:

op(A)*X + ISGN*X*op(B) = scale*C or op(A)*X - ISGN*X*op(B) = scale*C,

where op(A) = A or A**T, and A and B are both upper quasi- triangular. A is M-by-M and B is N-by-N; the right hand side C and the solution X are M-by-N; and scale is an output scale factor, set <= 1 to avoid overflow in X.

A and B must be in Schur canonical form (as returned by DHSEQR), that is, block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block has its diagonal elements equal and its off-diagonal elements of opposite sign.

Parameters

in
trana

Specifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘T’: op(A) = A**T (Transpose) = ‘C’: op(A) = A**H (Conjugate transpose = Transpose)

in
tranb

Specifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘T’: op(B) = B**T (Transpose) = ‘C’: op(B) = B**H (Conjugate transpose = Transpose)

in
isgn

Specifies the sign in the equation: = +1: solve op(A)*X + X*op(B) = scale*C = -1: solve op(A)*X - X*op(B) = scale*C

in
m

The order of the matrix A, and the number of rows in the matrices X and C. m >= 0.

in
n

The order of the matrix B, and the number of columns in the matrices X and C. n >= 0.

in
A

Double precision array, dimension (lda, m). The upper quasi-triangular matrix A, in Schur canonical form.

in
lda

The leading dimension of the array A. lda >= max(1, m).

in
B

Double precision array, dimension (ldb, n). The upper quasi-triangular matrix B, in Schur canonical form.

in
ldb

The leading dimension of the array B. ldb >= max(1, n).

inout
C

Double precision array, dimension (ldc, n). On entry, the M-by-N right hand side matrix C. On exit, C is overwritten by the solution matrix X.

in
ldc

The leading dimension of the array C. ldc >= max(1, m).

out
scale

The scale factor, scale, set <= 1 to avoid overflow in X.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • = 1: A and B have common or very close eigenvalues; perturbed values were used to solve the equation (but the matrices A and B are unchanged).

Functions

void ctrsyl(
    const char* trana,
    const char* tranb,
    const INT   isgn,
    const INT   m,
    const INT   n,
    const c64*  A,
    const INT   lda,
    const c64*  B,
    const INT   ldb,
          c64*  C,
    const INT   ldc,
          f32*  scale,
          INT*  info
);
void ctrsyl(const char *trana, const char *tranb, const INT isgn, const INT m, const INT n, const c64 *A, const INT lda, const c64 *B, const INT ldb, c64 *C, const INT ldc, f32 *scale, INT *info)#

CTRSYL solves the complex Sylvester matrix equation:

op(A)*X + X*op(B) = scale*C or op(A)*X - X*op(B) = scale*C,

where op(A) = A or A**H, and A and B are both upper triangular. A is M-by-M and B is N-by-N; the right hand side C and the solution X are M-by-N; and scale is an output scale factor, set <= 1 to avoid overflow in X.

Parameters

in
trana

Specifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘C’: op(A) = A**H (Conjugate transpose)

in
tranb

Specifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘C’: op(B) = B**H (Conjugate transpose)

in
isgn

Specifies the sign in the equation: = +1: solve op(A)*X + X*op(B) = scale*C = -1: solve op(A)*X - X*op(B) = scale*C

in
m

The order of the matrix A, and the number of rows in the matrices X and C. m >= 0.

in
n

The order of the matrix B, and the number of columns in the matrices X and C. n >= 0.

in
A

Single complex array, dimension (lda, m). The upper triangular matrix A.

in
lda

The leading dimension of the array A. lda >= max(1, m).

in
B

Single complex array, dimension (ldb, n). The upper triangular matrix B.

in
ldb

The leading dimension of the array B. ldb >= max(1, n).

inout
C

Single complex array, dimension (ldc, n). On entry, the M-by-N right hand side matrix C. On exit, C is overwritten by the solution matrix X.

in
ldc

The leading dimension of the array C. ldc >= max(1, m).

out
scale

The scale factor, scale, set <= 1 to avoid overflow in X.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • = 1: A and B have common or very close eigenvalues; perturbed values were used to solve the equation (but the matrices A and B are unchanged).

Functions

void ztrsyl(
    const char* trana,
    const char* tranb,
    const INT   isgn,
    const INT   m,
    const INT   n,
    const c128* A,
    const INT   lda,
    const c128* B,
    const INT   ldb,
          c128* C,
    const INT   ldc,
          f64*  scale,
          INT*  info
);
void ztrsyl(const char *trana, const char *tranb, const INT isgn, const INT m, const INT n, const c128 *A, const INT lda, const c128 *B, const INT ldb, c128 *C, const INT ldc, f64 *scale, INT *info)#

ZTRSYL solves the complex Sylvester matrix equation:

op(A)*X + X*op(B) = scale*C or op(A)*X - X*op(B) = scale*C,

where op(A) = A or A**H, and A and B are both upper triangular. A is M-by-M and B is N-by-N; the right hand side C and the solution X are M-by-N; and scale is an output scale factor, set <= 1 to avoid overflow in X.

Parameters

in
trana

Specifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘C’: op(A) = A**H (Conjugate transpose)

in
tranb

Specifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘C’: op(B) = B**H (Conjugate transpose)

in
isgn

Specifies the sign in the equation: = +1: solve op(A)*X + X*op(B) = scale*C = -1: solve op(A)*X - X*op(B) = scale*C

in
m

The order of the matrix A, and the number of rows in the matrices X and C. m >= 0.

in
n

The order of the matrix B, and the number of columns in the matrices X and C. n >= 0.

in
A

Double complex array, dimension (lda, m). The upper triangular matrix A.

in
lda

The leading dimension of the array A. lda >= max(1, m).

in
B

Double complex array, dimension (ldb, n). The upper triangular matrix B.

in
ldb

The leading dimension of the array B. ldb >= max(1, n).

inout
C

Double complex array, dimension (ldc, n). On entry, the M-by-N right hand side matrix C. On exit, C is overwritten by the solution matrix X.

in
ldc

The leading dimension of the array C. ldc >= max(1, m).

out
scale

The scale factor, scale, set <= 1 to avoid overflow in X.

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • = 1: A and B have common or very close eigenvalues; perturbed values were used to solve the equation (but the matrices A and B are unchanged).