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 &lt;= SCALE &lt;= 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 &gt;= 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 &gt;= 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 &gt;= 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 &gt;= 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 &gt;= 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 &gt;= 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 &gt;= 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 &lt; SCALE &lt; 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 &gt; = 1.
</span><span class="comment">*</span><span class="comment">          If IJOB = 1 or 2 and TRANS = 'N', LWORK &gt;= 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">            &lt;0: If INFO = -i, the i-th argument had an illegal value.
</span><span class="comment">*</span><span class="comment">            &gt;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 + -
显示快捷键?