LAPACK  3.10.1
LAPACK: Linear Algebra PACKage

◆ dlartgs()

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.

Definition at line 89 of file dlartgs.f.

90 *
91 * -- LAPACK computational routine --
92 * -- LAPACK is a software package provided by Univ. of Tennessee, --
93 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
94 *
95 * .. Scalar Arguments ..
96  DOUBLE PRECISION CS, SIGMA, SN, X, Y
97 * ..
98 *
99 * ===================================================================
100 *
101 * .. Parameters ..
102  DOUBLE PRECISION NEGONE, ONE, ZERO
103  parameter( negone = -1.0d0, one = 1.0d0, zero = 0.0d0 )
104 * ..
105 * .. Local Scalars ..
106  DOUBLE PRECISION R, S, THRESH, W, Z
107 * ..
108 * .. External Subroutines ..
109  EXTERNAL dlartgp
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:69
subroutine dlartgp(F, G, CS, SN, R)
DLARTGP generates a plane rotation so that the diagonal is nonnegative.
Definition: dlartgp.f:95
Here is the call graph for this function:
Here is the caller graph for this function: