trsyl3(3)
β¨ NAME β¨
trsyl3 β okay so this is trsyl3: the Sylvester equation, but make it level 3 π
(that's the trsyl3(3) manual page, bestie, in case the header vibe check wasn't clear π)
π¦ SYNOPSIS π¦
π Functions π
Four routines, all siblings, all solving the Sylvester equation like the icons they are π
ctrsyl3β the complex one πΈ
subroutine ctrsyl3 (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc,
scale, swork, ldswork, info)
CTRSYL3
dtrsyl3β the double precision one β¨
subroutine dtrsyl3 (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc,
scale, iwork, liwork, swork, ldswork, info)
DTRSYL3
strsyl3β the single precision one π
subroutine strsyl3 (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc,
scale, iwork, liwork, swork, ldswork, info)
STRSYL3
ztrsyl3β the double complex one π¦
subroutine ztrsyl3 (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc,
scale, swork, ldswork, info)
ZTRSYL3
π Detailed Description π
(yes that's the section name, don't come for me)
π Function Documentation π
πΈ subroutine ctrsyl3 (character trana, character tranb, integer isgn, integer m, integer n, complex, dimension( lda, * ) a, integer lda, complex, dimension( ldb, * ) b, integer ldb, complex, dimension( ldc, * ) c, integer ldc, real scale, real, dimension( ldswork, * ) swork, integer ldswork, integer info)
CTRSYL3 β main character energy, complex edition π
β¨ Purpose β¨
CTRSYL3 solves the complex Sylvester matrix equation, and it's literally giving:
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. Periodt. π₯
π Parameters π
TRANAβTRANAisCHARACTER*1. Specifies the optionop(A):= 'N':op(A) = A(No transpose)= 'C':op(A) = A**H(Conjugate transpose)
TRANBβTRANBisCHARACTER*1. Specifies the optionop(B):= 'N':op(B) = B(No transpose)= 'C':op(B) = B**H(Conjugate transpose)
ISGNβISGNisINTEGER. Specifies the sign in the equation:= +1: solveop(A)*X + X*op(B) = scale*C= -1: solveop(A)*X - X*op(B) = scale*C
MβMisINTEGER. The order of the matrixA, and the number of rows in the matricesXandC.M >= 0.NβNisINTEGER. The order of the matrixB, and the number of columns in the matricesXandC.N >= 0.AβAisCOMPLEXarray, dimension(LDA,M). The upper triangular matrixAπΈLDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).BβBisCOMPLEXarray, dimension(LDB,N). The upper triangular matrixB.LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).CβCisCOMPLEXarray, dimension(LDC,N). On entry, theM-by-Nright hand side matrixC. On exit,Cis overwritten by the solution matrixXβ so don't come crying when your RHS is gone, that's the whole point πLDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M)SCALEβSCALEisREAL. The scale factor,scale, set<= 1to avoid overflow inX.SWORKβSWORKisREALarray, dimension(MAX(2, ROWS), MAX(1,COLS)). On exit, ifINFO = 0,SWORK(1)returns the optimal valueROWSandSWORK(2)returns the optimalCOLSβ¨LDSWORKβLDSWORKisINTEGER.LDSWORK >= MAX(2,ROWS), whereROWS = ((M + NB - 1) / NB + 1)andNBis the optimal block size.
If LDSWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimensions of the SWORK matrix, returns these values as the first and second entry of the SWORK matrix, and no error message related LWORK is issued by XERBLA.
INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value= 1:AandBhave common or very close eigenvalues; perturbed values were used to solve the equation (but the matricesAandBare unchanged).
β οΈ Heads up: thatINFO = 1case is not a drill β the routine fudged the values to get you an answer. StillINFO = 1though, so read it, don't skip it.
Definition at line 167 of file ctrsyl3.f.
π¦ subroutine dtrsyl3 (character trana, character tranb, integer isgn, integer m, integer n, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( ldb, * ) b, integer ldb, double precision, dimension( ldc, * ) c, integer ldc, double precision scale, integer, dimension( * ) iwork, integer liwork, double precision, dimension( ldswork, * ) swork, integer ldswork, integer info)
DTRSYL3 β double precision, double the drama π
β¨ Purpose β¨
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. No cap, that's just the requirement π
This is the block version of the algorithm.
π Parameters π
TRANAβTRANAisCHARACTER*1. Specifies the optionop(A):= 'N':op(A) = A(No transpose)= 'T':op(A) = A**T(Transpose)= 'C':op(A) = A**H(Conjugate transpose = Transpose)
TRANBβTRANBisCHARACTER*1. Specifies the optionop(B):= 'N':op(B) = B(No transpose)= 'T':op(B) = B**T(Transpose)= 'C':op(B) = B**H(Conjugate transpose = Transpose)
ISGNβISGNisINTEGER. Specifies the sign in the equation:= +1: solveop(A)*X + X*op(B) = scale*C= -1: solveop(A)*X - X*op(B) = scale*C
MβMisINTEGER. The order of the matrixA, and the number of rows in the matricesXandC.M >= 0.NβNisINTEGER. The order of the matrixB, and the number of columns in the matricesXandC.N >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA,M). The upper quasi-triangular matrixA, in Schur canonical form.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).BβBisDOUBLE PRECISIONarray, dimension(LDB,N). The upper quasi-triangular matrixB, in Schur canonical form.LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).CβCisDOUBLE PRECISIONarray, dimension(LDC,N). On entry, theM-by-Nright hand side matrixC. On exit,Cis overwritten by the solution matrixXβ yes bestie, it eats your input, that's the deal πLDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M)SCALEβSCALEisDOUBLE PRECISION. The scale factor,scale, set<= 1to avoid overflow inX.IWORKβIWORKisINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORKβ¨LIWORKβLIWORKisINTEGER. The dimension of the arrayIWORK.LIWORK >= ((M + NB - 1) / NB + 1) + ((N + NB - 1) / NB + 1), whereNBis the optimal block size.
If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimension of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA.
SWORKβSWORKisDOUBLE PRECISIONarray, dimension(MAX(2, ROWS), MAX(1,COLS)). On exit, ifINFO = 0,SWORK(1)returns the optimal valueROWSandSWORK(2)returns the optimalCOLS.LDSWORKβLDSWORKisINTEGER.LDSWORK >= MAX(2,ROWS), whereROWS = ((M + NB - 1) / NB + 1)andNBis the optimal block size.
If LDSWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimensions of the SWORK matrix, returns these values as the first and second entry of the SWORK matrix, and no error message related LWORK is issued by XERBLA.
INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value= 1:AandBhave common or very close eigenvalues; perturbed values were used to solve the equation (but the matricesAandBare unchanged).
Definition at line 197 of file dtrsyl3.f.
π subroutine strsyl3 (character trana, character tranb, integer isgn, integer m, integer n, real, dimension( lda, * ) a, integer lda, real, dimension( ldb, * ) b, integer ldb, real, dimension( ldc, * ) c, integer ldc, real scale, integer, dimension( * ) iwork, integer liwork, real, dimension( ldswork, * ) swork, integer ldswork, integer info)
STRSYL3 β single precision, same energy πΈ
β¨ Purpose β¨
(and this is exactly where part 1 hands the mic off β STRSYL3's Purpose block picks up the second this page continues, so stay tuned bestie, we are not done here π)
So 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 π
TRANAβCHARACTER*1. Specifies the optionop(A):= 'N':op(A) = A(No transpose)= 'T':op(A) = A**T(Transpose)= 'C':op(A) = A**H(Conjugate transpose = Transpose)
TRANBβCHARACTER*1. Specifies the optionop(B):= 'N':op(B) = B(No transpose)= 'T':op(B) = B**T(Transpose)= 'C':op(B) = B**H(Conjugate transpose = Transpose)
ISGNβINTEGER. Specifies the sign in the equation:= +1: solveop(A)*X + X*op(B) = scale*C= -1: solveop(A)*X - X*op(B) = scale*C
MβINTEGER. The order of the matrixA, and the number of rows in the matricesXandC.M >= 0.NβINTEGER. The order of the matrixB, and the number of columns in the matricesXandC.N >= 0.AβREALarray, dimension(LDA,M). The upper quasi-triangular matrixA, in Schur canonical form.LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).BβREALarray, dimension(LDB,N). The upper quasi-triangular matrixB, in Schur canonical form.LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).CβREALarray, dimension(LDC,N). On entry, theM-by-Nright hand side matrixC. On exit,Cis overwritten by the solution matrixX.LDCβINTEGER. The leading dimension of the arrayC.LDC >= max(1,M)SCALEβREAL. The scale factor,scale, set<= 1to avoid overflow inX.IWORKβINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβIWORK is INTEGER(yes, the original really says that π). The dimension of the arrayIWORK.LIWORK >= ((M + NB - 1) / NB + 1) + ((N + NB - 1) / NB + 1), whereNBis the optimal block size.- If
LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimension of theIWORKarray, returns this value as the first entry of theIWORKarray, and no error message related toLIWORKis issued byXERBLA.
- If
SWORKβREALarray, dimension(MAX(2, ROWS), MAX(1,COLS)). On exit, ifINFO = 0,SWORK(1)returns the optimal valueROWSandSWORK(2)returns the optimalCOLS.LDSWORKβINTEGER.LDSWORK >= MAX(2,ROWS), whereROWS = ((M + NB - 1) / NB + 1)andNBis the optimal block size.- If
LDSWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimensions of theSWORKmatrix, returns these values as the first and second entry of theSWORKmatrix, and no error message relatedLWORKis issued byXERBLA.
- If
INFOβINTEGER:= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value= 1:AandBhave common or very close eigenvalues; perturbed values were used to solve the equation (but the matricesAandBare unchanged).
Definition at line 196 of file strsyl3.f.
π¦ subroutine ztrsyl3 π¦
subroutine ztrsyl3 (character trana, character tranb, integer isgn, integer
m, integer n, complex*16, dimension( lda, * ) a, integer lda,
complex*16, dimension( ldb, * ) b, integer ldb, complex*16, dimension(
ldc, * ) c, integer ldc, double precision scale, double precision,
dimension( ldswork, * ) swork, integer ldswork, integer info)
ZTRSYL3
π Purpose π
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 πΈ
TRANAβCHARACTER*1. Specifies the optionop(A):= 'N':op(A) = A(No transpose)= 'C':op(A) = A**H(Conjugate transpose)
TRANBβCHARACTER*1. Specifies the optionop(B):= 'N':op(B) = B(No transpose)= 'C':op(B) = B**H(Conjugate transpose)
ISGNβINTEGER. Specifies the sign in the equation:= +1: solveop(A)*X + X*op(B) = scale*C= -1: solveop(A)*X - X*op(B) = scale*C
MβINTEGER. The order of the matrixA, and the number of rows in the matricesXandC.M >= 0.NβINTEGER. The order of the matrixB, and the number of columns in the matricesXandC.N >= 0.AβCOMPLEX*16array, dimension(LDA,M). The upper triangular matrixA.LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).BβCOMPLEX*16array, dimension(LDB,N). The upper triangular matrixB.LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).CβCOMPLEX*16array, dimension(LDC,N). On entry, theM-by-Nright hand side matrixC. On exit,Cis overwritten by the solution matrixX.LDCβINTEGER. The leading dimension of the arrayC.LDC >= max(1,M)SCALEβDOUBLE PRECISION. The scale factor,scale, set<= 1to avoid overflow inX.SWORKβDOUBLE PRECISIONarray, dimension(MAX(2, ROWS), MAX(1,COLS)). On exit, ifINFO = 0,SWORK(1)returns the optimal valueROWSandSWORK(2)returns the optimalCOLS.LDSWORKβINTEGER.LDSWORK >= MAX(2,ROWS), whereROWS = ((M + NB - 1) / NB + 1)andNBis the optimal block size.- If
LDSWORK = -1, then a workspace query is assumed; the routine only calculates the optimal dimensions of theSWORKmatrix, returns these values as the first and second entry of theSWORKmatrix, and no error message relatedLWORKis issued byXERBLA.
- If
INFOβINTEGER:= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value= 1:AandBhave common or very close eigenvalues; perturbed values were used to solve the equation (but the matricesAandBare unchanged).
Definition at line 168 of file ztrsyl3.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
π That's the whole page, bestie! This little icon isLAPACKVersion 3.12.0, and you're readingtrsyl3(3). Go slay those Sylvester equations β no cap! ππ
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms