trsyl3#
Functions
-
void strsyl3(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 *iwork, const INT liwork, f32 *swork, const INT ldswork, INT *info)#
STRSYL3 solves the real 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**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.
This is the block version of the algorithm.
Parameters
intranaSpecifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘T’: op(A) = A**T (Transpose) = ‘C’: op(A) = A**H (Conjugate transpose = Transpose)
intranbSpecifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘T’: op(B) = B**T (Transpose) = ‘C’: op(B) = B**H (Conjugate transpose = Transpose)
inisgnSpecifies 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
inmThe order of the matrix A, and the number of rows in the matrices X and C. m >= 0.
innThe order of the matrix B, and the number of columns in the matrices X and C. n >= 0.
inADouble precision array, dimension (lda, m). The upper quasi-triangular matrix A, in Schur canonical form.
inldaThe leading dimension of the array A. lda >= max(1, m).
inBDouble precision array, dimension (ldb, n). The upper quasi-triangular matrix B, in Schur canonical form.
inldbThe leading dimension of the array B. ldb >= max(1, n).
inoutCDouble 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.
inldcThe leading dimension of the array C. ldc >= max(1, m).
outscaleThe scale factor, scale, set <= 1 to avoid overflow in X.
outiworkInteger array, dimension (MAX(1, liwork)). On exit, if info = 0, iwork[0] returns the optimal liwork.
inliworkThe dimension of the array iwork. liwork >= ((m + nb - 1) / nb + 1) + ((n + nb - 1) / nb + 1), where nb is the optimal block size. If liwork = -1, then a workspace query is assumed.
outsworkDouble precision array, dimension (MAX(2, rows), MAX(1, cols)). On exit, if info = 0, swork[0] returns the optimal rows and swork[1] returns the optimal cols.
inldsworkThe leading dimension of the array swork. ldswork >= MAX(2, rows), where rows = ((m + nb - 1) / nb + 1). If ldswork = -1, then a workspace query is assumed.
outinfo= 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).
void strsyl3(
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* iwork,
const INT liwork,
f32* swork,
const INT ldswork,
INT* info
);
Functions
-
void dtrsyl3(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 *iwork, const INT liwork, f64 *swork, const INT ldswork, INT *info)#
DTRSYL3 solves the real 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**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.
This is the block version of the algorithm.
Parameters
intranaSpecifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘T’: op(A) = A**T (Transpose) = ‘C’: op(A) = A**H (Conjugate transpose = Transpose)
intranbSpecifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘T’: op(B) = B**T (Transpose) = ‘C’: op(B) = B**H (Conjugate transpose = Transpose)
inisgnSpecifies 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
inmThe order of the matrix A, and the number of rows in the matrices X and C. m >= 0.
innThe order of the matrix B, and the number of columns in the matrices X and C. n >= 0.
inADouble precision array, dimension (lda, m). The upper quasi-triangular matrix A, in Schur canonical form.
inldaThe leading dimension of the array A. lda >= max(1, m).
inBDouble precision array, dimension (ldb, n). The upper quasi-triangular matrix B, in Schur canonical form.
inldbThe leading dimension of the array B. ldb >= max(1, n).
inoutCDouble 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.
inldcThe leading dimension of the array C. ldc >= max(1, m).
outscaleThe scale factor, scale, set <= 1 to avoid overflow in X.
outiworkInteger array, dimension (MAX(1, liwork)). On exit, if info = 0, iwork[0] returns the optimal liwork.
inliworkThe dimension of the array iwork. liwork >= ((m + nb - 1) / nb + 1) + ((n + nb - 1) / nb + 1), where nb is the optimal block size. If liwork = -1, then a workspace query is assumed.
outsworkDouble precision array, dimension (MAX(2, rows), MAX(1, cols)). On exit, if info = 0, swork[0] returns the optimal rows and swork[1] returns the optimal cols.
inldsworkThe leading dimension of the array swork. ldswork >= MAX(2, rows), where rows = ((m + nb - 1) / nb + 1). If ldswork = -1, then a workspace query is assumed.
outinfo= 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).
void dtrsyl3(
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* iwork,
const INT liwork,
f64* swork,
const INT ldswork,
INT* info
);
Functions
-
void ctrsyl3(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, f32 *swork, const INT ldswork, INT *info)#
CTRSYL3 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.
This is the block version of the algorithm.
Parameters
intranaSpecifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘C’: op(A) = A**H (Conjugate transpose)
intranbSpecifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘C’: op(B) = B**H (Conjugate transpose)
inisgnSpecifies 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
inmThe order of the matrix A, and the number of rows in the matrices X and C. m >= 0.
innThe order of the matrix B, and the number of columns in the matrices X and C. n >= 0.
inAComplex*16 array, dimension (lda, m). The upper triangular matrix A.
inldaThe leading dimension of the array A. lda >= max(1, m).
inBComplex*16 array, dimension (ldb, n). The upper triangular matrix B.
inldbThe leading dimension of the array B. ldb >= max(1, n).
inoutCComplex*16 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.
inldcThe leading dimension of the array C. ldc >= max(1, m).
outscaleThe scale factor, scale, set <= 1 to avoid overflow in X.
outsworkSingle precision array, dimension (MAX(2, ROWS), MAX(1, COLS)). On exit, if info = 0, swork[0] returns the optimal value ROWS and swork[1] returns the optimal COLS.
inldsworkThe leading dimension of the array swork. ldswork >= MAX(2, ROWS) + MAX(m, n), where ROWS = ((m + nb - 1) / nb + 1). If ldswork = -1, then a workspace query is assumed.
outinfo= 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).
void ctrsyl3(
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,
f32* swork,
const INT ldswork,
INT* info
);
Functions
-
void ztrsyl3(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, f64 *swork, const INT ldswork, INT *info)#
ZTRSYL3 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.
This is the block version of the algorithm.
Parameters
intranaSpecifies the option op(A): = ‘N’: op(A) = A (No transpose) = ‘C’: op(A) = A**H (Conjugate transpose)
intranbSpecifies the option op(B): = ‘N’: op(B) = B (No transpose) = ‘C’: op(B) = B**H (Conjugate transpose)
inisgnSpecifies 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
inmThe order of the matrix A, and the number of rows in the matrices X and C. m >= 0.
innThe order of the matrix B, and the number of columns in the matrices X and C. n >= 0.
inAComplex*16 array, dimension (lda, m). The upper triangular matrix A.
inldaThe leading dimension of the array A. lda >= max(1, m).
inBComplex*16 array, dimension (ldb, n). The upper triangular matrix B.
inldbThe leading dimension of the array B. ldb >= max(1, n).
inoutCComplex*16 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.
inldcThe leading dimension of the array C. ldc >= max(1, m).
outscaleThe scale factor, scale, set <= 1 to avoid overflow in X.
outsworkDouble precision array, dimension (MAX(2, ROWS), MAX(1, COLS)). On exit, if info = 0, swork[0] returns the optimal value ROWS and swork[1] returns the optimal COLS.
inldsworkThe leading dimension of the array swork. ldswork >= MAX(2, ROWS) + MAX(m, n), where ROWS = ((m + nb - 1) / nb + 1). If ldswork = -1, then a workspace query is assumed.
outinfo= 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).
void ztrsyl3(
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,
f64* swork,
const INT ldswork,
INT* info
);