LAPACK  3.6.1
LAPACK: Linear Algebra PACKage
subroutine dlartgs ( double precision  X,
double precision  Y,
double precision  SIGMA,
double precision  CS,
double precision  SN 
)

DLARTGS generates a plane rotation designed to introduce a bulge in implicit QR iteration for the bidiagonal SVD problem.

Download DLARTGS + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 DLARTGS generates a plane rotation designed to introduce a bulge in
 Golub-Reinsch-style implicit QR iteration for the bidiagonal SVD
 problem. X and Y are the top-row entries, and SIGMA is the shift.
 The computed CS and SN define a plane rotation satisfying

    [  CS  SN  ]  .  [ X^2 - SIGMA ]  =  [ R ],
    [ -SN  CS  ]     [    X * Y    ]     [ 0 ]

 with R nonnegative.  If X^2 - SIGMA and X * Y are 0, then the
 rotation is by PI/2.
Parameters
[in]X
          X is DOUBLE PRECISION
          The (1,1) entry of an upper bidiagonal matrix.
[in]Y
          Y is DOUBLE PRECISION
          The (1,2) entry of an upper bidiagonal matrix.
[in]SIGMA
          SIGMA is DOUBLE PRECISION
          The shift.
[out]CS
          CS is DOUBLE PRECISION
          The cosine of the rotation.
[out]SN
          SN is DOUBLE PRECISION
          The sine of the rotation.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
September 2012

Definition at line 92 of file dlartgs.f.

92 *
93 * -- LAPACK computational routine (version 3.4.2) --
94 * -- LAPACK is a software package provided by Univ. of Tennessee, --
95 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
96 * September 2012
97 *
98 * .. Scalar Arguments ..
99  DOUBLE PRECISION cs, sigma, sn, x, y
100 * ..
101 *
102 * ===================================================================
103 *
104 * .. Parameters ..
105  DOUBLE PRECISION negone, one, zero
106  parameter ( negone = -1.0d0, one = 1.0d0, zero = 0.0d0 )
107 * ..
108 * .. Local Scalars ..
109  DOUBLE PRECISION r, s, thresh, w, z
110 * ..
111 * .. External Functions ..
112  DOUBLE PRECISION dlamch
113  EXTERNAL dlamch
114 * .. Executable Statements ..
115 *
116  thresh = dlamch('E')
117 *
118 * Compute the first column of B**T*B - SIGMA^2*I, up to a scale
119 * factor.
120 *
121  IF( (sigma .EQ. zero .AND. abs(x) .LT. thresh) .OR.
122  $ (abs(x) .EQ. sigma .AND. y .EQ. zero) ) THEN
123  z = zero
124  w = zero
125  ELSE IF( sigma .EQ. zero ) THEN
126  IF( x .GE. zero ) THEN
127  z = x
128  w = y
129  ELSE
130  z = -x
131  w = -y
132  END IF
133  ELSE IF( abs(x) .LT. thresh ) THEN
134  z = -sigma*sigma
135  w = zero
136  ELSE
137  IF( x .GE. zero ) THEN
138  s = one
139  ELSE
140  s = negone
141  END IF
142  z = s * (abs(x)-sigma) * (s+sigma/x)
143  w = s * y
144  END IF
145 *
146 * Generate the rotation.
147 * CALL DLARTGP( Z, W, CS, SN, R ) might seem more natural;
148 * reordering the arguments ensures that if Z = 0 then the rotation
149 * is by PI/2.
150 *
151  CALL dlartgp( w, z, sn, cs, r )
152 *
153  RETURN
154 *
155 * End DLARTGS
156 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:65
subroutine dlartgp(F, G, CS, SN, R)
DLARTGP generates a plane rotation so that the diagonal is nonnegative.
Definition: dlartgp.f:97

Here is the call graph for this function:

Here is the caller graph for this function: