stgsyl.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 581 行 · 第 1/3 页
HTML
581 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>stgsyl.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="STGSYL.1"></a><a href="stgsyl.f.html#STGSYL.1">STGSYL</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) --
</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"> November 2006
</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( * )
REAL 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="STGSYL.25"></a><a href="stgsyl.f.html#STGSYL.1">STGSYL</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 real entries. (A, D) and (B, E) must be in
</span><span class="comment">*</span><span class="comment"> generalized (real) Schur canonical form, i.e. A, B are upper quasi
</span><span class="comment">*</span><span class="comment"> triangular and D, E are upper triangular.
</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 is an output
</span><span class="comment">*</span><span class="comment"> 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
</span><span class="comment">*</span><span class="comment"> Z 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 Ik is the identity matrix of size k and X' is the transpose of
</span><span class="comment">*</span><span class="comment"> X. kron(X, Y) is the Kronecker product between the matrices X and Y.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> If TRANS = 'T', <a name="STGSYL.48"></a><a href="stgsyl.f.html#STGSYL.1">STGSYL</a> solves the transposed system Z'*y = scale*b,
</span><span class="comment">*</span><span class="comment"> 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 = 'T') 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="SLACON.56"></a><a href="slacon.f.html#SLACON.1">SLACON</a>.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> If IJOB >= 1, <a name="STGSYL.58"></a><a href="stgsyl.f.html#STGSYL.1">STGSYL</a> computes a Frobenius norm-based estimate
</span><span class="comment">*</span><span class="comment"> of 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. See [1-2] for more
</span><span class="comment">*</span><span class="comment"> information.
</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"> = 'T', solve the '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 IJOB = 1 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="SGECON.80"></a><a href="sgecon.f.html#SGECON.1">SGECON</a> on sub-systems is used ).
</span><span class="comment">*</span><span class="comment"> Not referenced if TRANS = 'T'.
</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) REAL array, dimension (LDA, M)
</span><span class="comment">*</span><span class="comment"> The upper quasi 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) REAL array, dimension (LDB, N)
</span><span class="comment">*</span><span class="comment"> The upper quasi 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) REAL 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) REAL 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) REAL 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) REAL 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 = 'T', DIF is not touched.
</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, D
</span><span class="comment">*</span><span class="comment"> and E have not been changed. If SCALE = 0, C and F hold the
</span><span class="comment">*</span><span class="comment"> solutions R and L, respectively, to the homogeneous system
</span><span class="comment">*</span><span class="comment"> with C = F = 0. Normally, SCALE = 1.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> WORK (workspace/output) REAL 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.161"></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+6)
</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 close 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.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?