dlaic1.f.html

来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 317 行 · 第 1/2 页

HTML
317
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>dlaic1.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="DLAIC1.1"></a><a href="dlaic1.f.html#DLAIC1.1">DLAIC1</a>( JOB, J, X, SEST, W, GAMMA, SESTPR, S, C )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  -- LAPACK auxiliary 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>      INTEGER            J, JOB
      DOUBLE PRECISION   C, GAMMA, S, SEST, SESTPR
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Array Arguments ..
</span>      DOUBLE PRECISION   W( J ), X( J )
<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="DLAIC1.18"></a><a href="dlaic1.f.html#DLAIC1.1">DLAIC1</a> applies one step of incremental condition estimation in
</span><span class="comment">*</span><span class="comment">  its simplest version:
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Let x, twonorm(x) = 1, be an approximate singular vector of an j-by-j
</span><span class="comment">*</span><span class="comment">  lower triangular matrix L, such that
</span><span class="comment">*</span><span class="comment">           twonorm(L*x) = sest
</span><span class="comment">*</span><span class="comment">  Then <a name="DLAIC1.24"></a><a href="dlaic1.f.html#DLAIC1.1">DLAIC1</a> computes sestpr, s, c such that
</span><span class="comment">*</span><span class="comment">  the vector
</span><span class="comment">*</span><span class="comment">                  [ s*x ]
</span><span class="comment">*</span><span class="comment">           xhat = [  c  ]
</span><span class="comment">*</span><span class="comment">  is an approximate singular vector of
</span><span class="comment">*</span><span class="comment">                  [ L     0  ]
</span><span class="comment">*</span><span class="comment">           Lhat = [ w' gamma ]
</span><span class="comment">*</span><span class="comment">  in the sense that
</span><span class="comment">*</span><span class="comment">           twonorm(Lhat*xhat) = sestpr.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Depending on JOB, an estimate for the largest or smallest singular
</span><span class="comment">*</span><span class="comment">  value is computed.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Note that [s c]' and sestpr**2 is an eigenpair of the system
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">      diag(sest*sest, 0) + [alpha  gamma] * [ alpha ]
</span><span class="comment">*</span><span class="comment">                                            [ gamma ]
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  where  alpha =  x'*w.
</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">  JOB     (input) INTEGER
</span><span class="comment">*</span><span class="comment">          = 1: an estimate for the largest singular value is computed.
</span><span class="comment">*</span><span class="comment">          = 2: an estimate for the smallest singular value is computed.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  J       (input) INTEGER
</span><span class="comment">*</span><span class="comment">          Length of X and W
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  X       (input) DOUBLE PRECISION array, dimension (J)
</span><span class="comment">*</span><span class="comment">          The j-vector x.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  SEST    (input) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment">          Estimated singular value of j by j matrix L
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  W       (input) DOUBLE PRECISION array, dimension (J)
</span><span class="comment">*</span><span class="comment">          The j-vector w.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  GAMMA   (input) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment">          The diagonal element gamma.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  SESTPR  (output) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment">          Estimated singular value of (j+1) by (j+1) matrix Lhat.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  S       (output) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment">          Sine needed in forming xhat.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  C       (output) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment">          Cosine needed in forming xhat.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  =====================================================================
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     .. Parameters ..
</span>      DOUBLE PRECISION   ZERO, ONE, TWO
      PARAMETER          ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0 )
      DOUBLE PRECISION   HALF, FOUR
      PARAMETER          ( HALF = 0.5D0, FOUR = 4.0D0 )
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Local Scalars ..
</span>      DOUBLE PRECISION   ABSALP, ABSEST, ABSGAM, ALPHA, B, COSINE, EPS,
     $                   NORMA, S1, S2, SINE, T, TEST, TMP, ZETA1, ZETA2
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Intrinsic Functions ..
</span>      INTRINSIC          ABS, MAX, SIGN, SQRT
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. External Functions ..
</span>      DOUBLE PRECISION   DDOT, <a name="DLAMCH.91"></a><a href="dlamch.f.html#DLAMCH.1">DLAMCH</a>
      EXTERNAL           DDOT, <a name="DLAMCH.92"></a><a href="dlamch.f.html#DLAMCH.1">DLAMCH</a>
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Executable Statements ..
</span><span class="comment">*</span><span class="comment">
</span>      EPS = <a name="DLAMCH.96"></a><a href="dlamch.f.html#DLAMCH.1">DLAMCH</a>( <span class="string">'Epsilon'</span> )
      ALPHA = DDOT( J, X, 1, W, 1 )
<span class="comment">*</span><span class="comment">
</span>      ABSALP = ABS( ALPHA )
      ABSGAM = ABS( GAMMA )
      ABSEST = ABS( SEST )
<span class="comment">*</span><span class="comment">
</span>      IF( JOB.EQ.1 ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Estimating largest singular value
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        special cases
</span><span class="comment">*</span><span class="comment">
</span>         IF( SEST.EQ.ZERO ) THEN
            S1 = MAX( ABSGAM, ABSALP )
            IF( S1.EQ.ZERO ) THEN
               S = ZERO
               C = ONE
               SESTPR = ZERO
            ELSE
               S = ALPHA / S1
               C = GAMMA / S1
               TMP = SQRT( S*S+C*C )
               S = S / TMP
               C = C / TMP
               SESTPR = S1*TMP
            END IF
            RETURN
         ELSE IF( ABSGAM.LE.EPS*ABSEST ) THEN
            S = ONE
            C = ZERO
            TMP = MAX( ABSEST, ABSALP )
            S1 = ABSEST / TMP
            S2 = ABSALP / TMP
            SESTPR = TMP*SQRT( S1*S1+S2*S2 )
            RETURN
         ELSE IF( ABSALP.LE.EPS*ABSEST ) THEN
            S1 = ABSGAM
            S2 = ABSEST
            IF( S1.LE.S2 ) THEN
               S = ONE
               C = ZERO
               SESTPR = S2
            ELSE
               S = ZERO

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?