ctgsyl.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 597 行 · 第 1/3 页
HTML
597 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ctgsyl.f</title>
<meta name="generator" content="emacs 21.3.1; htmlfontify 0.20">
<style type="text/css"><!--
body { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.default { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.default a { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: underline; }
span.string { color: rgb(188, 143, 143); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.string a { color: rgb(188, 143, 143); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: underline; }
span.comment { color: rgb(178, 34, 34); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.comment a { color: rgb(178, 34, 34); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: underline; }
--></style>
</head>
<body>
<pre>
SUBROUTINE <a name="CTGSYL.1"></a><a href="ctgsyl.f.html#CTGSYL.1">CTGSYL</a>( TRANS, IJOB, M, N, A, LDA, B, LDB, C, LDC, D,
$ LDD, E, LDE, F, LDF, SCALE, DIF, WORK, LWORK,
$ IWORK, INFO )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> -- LAPACK routine (version 3.1.1) --
</span><span class="comment">*</span><span class="comment"> Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
</span><span class="comment">*</span><span class="comment"> January 2007
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> .. Scalar Arguments ..
</span> CHARACTER TRANS
INTEGER IJOB, INFO, LDA, LDB, LDC, LDD, LDE, LDF,
$ LWORK, M, N
REAL DIF, SCALE
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment"> .. Array Arguments ..
</span> INTEGER IWORK( * )
COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
$ D( LDD, * ), E( LDE, * ), F( LDF, * ),
$ WORK( * )
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Purpose
</span><span class="comment">*</span><span class="comment"> =======
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> <a name="CTGSYL.25"></a><a href="ctgsyl.f.html#CTGSYL.1">CTGSYL</a> solves the generalized Sylvester equation:
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> A * R - L * B = scale * C (1)
</span><span class="comment">*</span><span class="comment"> D * R - L * E = scale * F
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> where R and L are unknown m-by-n matrices, (A, D), (B, E) and
</span><span class="comment">*</span><span class="comment"> (C, F) are given matrix pairs of size m-by-m, n-by-n and m-by-n,
</span><span class="comment">*</span><span class="comment"> respectively, with complex entries. A, B, D and E are upper
</span><span class="comment">*</span><span class="comment"> triangular (i.e., (A,D) and (B,E) in generalized Schur form).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> The solution (R, L) overwrites (C, F). 0 <= SCALE <= 1
</span><span class="comment">*</span><span class="comment"> is an output scaling factor chosen to avoid overflow.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> In matrix notation (1) is equivalent to solve Zx = scale*b, where Z
</span><span class="comment">*</span><span class="comment"> is defined as
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Z = [ kron(In, A) -kron(B', Im) ] (2)
</span><span class="comment">*</span><span class="comment"> [ kron(In, D) -kron(E', Im) ],
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Here Ix is the identity matrix of size x and X' is the conjugate
</span><span class="comment">*</span><span class="comment"> transpose of X. Kron(X, Y) is the Kronecker product between the
</span><span class="comment">*</span><span class="comment"> matrices X and Y.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> If TRANS = 'C', y in the conjugate transposed system Z'*y = scale*b
</span><span class="comment">*</span><span class="comment"> is solved for, which is equivalent to solve for R and L in
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> A' * R + D' * L = scale * C (3)
</span><span class="comment">*</span><span class="comment"> R * B' + L * E' = scale * -F
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> This case (TRANS = 'C') is used to compute an one-norm-based estimate
</span><span class="comment">*</span><span class="comment"> of Dif[(A,D), (B,E)], the separation between the matrix pairs (A,D)
</span><span class="comment">*</span><span class="comment"> and (B,E), using <a name="CLACON.56"></a><a href="clacon.f.html#CLACON.1">CLACON</a>.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> If IJOB >= 1, <a name="CTGSYL.58"></a><a href="ctgsyl.f.html#CTGSYL.1">CTGSYL</a> computes a Frobenius norm-based estimate of
</span><span class="comment">*</span><span class="comment"> Dif[(A,D),(B,E)]. That is, the reciprocal of a lower bound on the
</span><span class="comment">*</span><span class="comment"> reciprocal of the smallest singular value of Z.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> This is a level-3 BLAS algorithm.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Arguments
</span><span class="comment">*</span><span class="comment"> =========
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> TRANS (input) CHARACTER*1
</span><span class="comment">*</span><span class="comment"> = 'N': solve the generalized sylvester equation (1).
</span><span class="comment">*</span><span class="comment"> = 'C': solve the "conjugate transposed" system (3).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> IJOB (input) INTEGER
</span><span class="comment">*</span><span class="comment"> Specifies what kind of functionality to be performed.
</span><span class="comment">*</span><span class="comment"> =0: solve (1) only.
</span><span class="comment">*</span><span class="comment"> =1: The functionality of 0 and 3.
</span><span class="comment">*</span><span class="comment"> =2: The functionality of 0 and 4.
</span><span class="comment">*</span><span class="comment"> =3: Only an estimate of Dif[(A,D), (B,E)] is computed.
</span><span class="comment">*</span><span class="comment"> (look ahead strategy is used).
</span><span class="comment">*</span><span class="comment"> =4: Only an estimate of Dif[(A,D), (B,E)] is computed.
</span><span class="comment">*</span><span class="comment"> (<a name="CGECON.79"></a><a href="cgecon.f.html#CGECON.1">CGECON</a> on sub-systems is used).
</span><span class="comment">*</span><span class="comment"> Not referenced if TRANS = 'C'.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> M (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The order of the matrices A and D, and the row dimension of
</span><span class="comment">*</span><span class="comment"> the matrices C, F, R and L.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> N (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The order of the matrices B and E, and the column dimension
</span><span class="comment">*</span><span class="comment"> of the matrices C, F, R and L.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> A (input) COMPLEX array, dimension (LDA, M)
</span><span class="comment">*</span><span class="comment"> The upper triangular matrix A.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDA (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array A. LDA >= max(1, M).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> B (input) COMPLEX array, dimension (LDB, N)
</span><span class="comment">*</span><span class="comment"> The upper triangular matrix B.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDB (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array B. LDB >= max(1, N).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> C (input/output) COMPLEX array, dimension (LDC, N)
</span><span class="comment">*</span><span class="comment"> On entry, C contains the right-hand-side of the first matrix
</span><span class="comment">*</span><span class="comment"> equation in (1) or (3).
</span><span class="comment">*</span><span class="comment"> On exit, if IJOB = 0, 1 or 2, C has been overwritten by
</span><span class="comment">*</span><span class="comment"> the solution R. If IJOB = 3 or 4 and TRANS = 'N', C holds R,
</span><span class="comment">*</span><span class="comment"> the solution achieved during the computation of the
</span><span class="comment">*</span><span class="comment"> Dif-estimate.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDC (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array C. LDC >= max(1, M).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> D (input) COMPLEX array, dimension (LDD, M)
</span><span class="comment">*</span><span class="comment"> The upper triangular matrix D.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDD (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array D. LDD >= max(1, M).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> E (input) COMPLEX array, dimension (LDE, N)
</span><span class="comment">*</span><span class="comment"> The upper triangular matrix E.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDE (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array E. LDE >= max(1, N).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> F (input/output) COMPLEX array, dimension (LDF, N)
</span><span class="comment">*</span><span class="comment"> On entry, F contains the right-hand-side of the second matrix
</span><span class="comment">*</span><span class="comment"> equation in (1) or (3).
</span><span class="comment">*</span><span class="comment"> On exit, if IJOB = 0, 1 or 2, F has been overwritten by
</span><span class="comment">*</span><span class="comment"> the solution L. If IJOB = 3 or 4 and TRANS = 'N', F holds L,
</span><span class="comment">*</span><span class="comment"> the solution achieved during the computation of the
</span><span class="comment">*</span><span class="comment"> Dif-estimate.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LDF (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The leading dimension of the array F. LDF >= max(1, M).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> DIF (output) REAL
</span><span class="comment">*</span><span class="comment"> On exit DIF is the reciprocal of a lower bound of the
</span><span class="comment">*</span><span class="comment"> reciprocal of the Dif-function, i.e. DIF is an upper bound of
</span><span class="comment">*</span><span class="comment"> Dif[(A,D), (B,E)] = sigma-min(Z), where Z as in (2).
</span><span class="comment">*</span><span class="comment"> IF IJOB = 0 or TRANS = 'C', DIF is not referenced.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> SCALE (output) REAL
</span><span class="comment">*</span><span class="comment"> On exit SCALE is the scaling factor in (1) or (3).
</span><span class="comment">*</span><span class="comment"> If 0 < SCALE < 1, C and F hold the solutions R and L, resp.,
</span><span class="comment">*</span><span class="comment"> to a slightly perturbed system but the input matrices A, B,
</span><span class="comment">*</span><span class="comment"> D and E have not been changed. If SCALE = 0, R and L will
</span><span class="comment">*</span><span class="comment"> hold the solutions to the homogenious system with C = F = 0.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
</span><span class="comment">*</span><span class="comment"> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> LWORK (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The dimension of the array WORK. LWORK > = 1.
</span><span class="comment">*</span><span class="comment"> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*N).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> If LWORK = -1, then a workspace query is assumed; the routine
</span><span class="comment">*</span><span class="comment"> only calculates the optimal size of the WORK array, returns
</span><span class="comment">*</span><span class="comment"> this value as the first entry of the WORK array, and no error
</span><span class="comment">*</span><span class="comment"> message related to LWORK is issued by <a name="XERBLA.159"></a><a href="xerbla.f.html#XERBLA.1">XERBLA</a>.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> IWORK (workspace) INTEGER array, dimension (M+N+2)
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> INFO (output) INTEGER
</span><span class="comment">*</span><span class="comment"> =0: successful exit
</span><span class="comment">*</span><span class="comment"> <0: If INFO = -i, the i-th argument had an illegal value.
</span><span class="comment">*</span><span class="comment"> >0: (A, D) and (B, E) have common or very close
</span><span class="comment">*</span><span class="comment"> eigenvalues.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Further Details
</span><span class="comment">*</span><span class="comment"> ===============
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Based on contributions by
</span><span class="comment">*</span><span class="comment"> Bo Kagstrom and Peter Poromaa, Department of Computing Science,
</span><span class="comment">*</span><span class="comment"> Umea University, S-901 87 Umea, Sweden.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> [1] B. Kagstrom and P. Poromaa, LAPACK-Style Algorithms and Software
</span><span class="comment">*</span><span class="comment"> for Solving the Generalized Sylvester Equation and Estimating the
</span><span class="comment">*</span><span class="comment"> Separation between Regular Matrix Pairs, Report UMINF - 93.23,
</span><span class="comment">*</span><span class="comment"> Department of Computing Science, Umea University, S-901 87 Umea,
</span><span class="comment">*</span><span class="comment"> Sweden, December 1993, Revised April 1994, Also as LAPACK Working
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?