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 + -
显示快捷键?