LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ dlaqsp()

subroutine dlaqsp ( character uplo,
integer n,
double precision, dimension( * ) ap,
double precision, dimension( * ) s,
double precision scond,
double precision amax,
character equed )

DLAQSP scales a symmetric/Hermitian matrix in packed storage, using scaling factors computed by sppequ.

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

Purpose:
!>
!> DLAQSP equilibrates a symmetric matrix A using the scaling factors
!> in the vector S.
!> 
Parameters
[in]UPLO
!>          UPLO is CHARACTER*1
!>          Specifies whether the upper or lower triangular part of the
!>          symmetric matrix A is stored.
!>          = 'U':  Upper triangular
!>          = 'L':  Lower triangular
!> 
[in]N
!>          N is INTEGER
!>          The order of the matrix A.  N >= 0.
!> 
[in,out]AP
!>          AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
!>          On entry, the upper or lower triangle of the symmetric matrix
!>          A, packed columnwise in a linear array.  The j-th column of A
!>          is stored in the array AP as follows:
!>          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
!>          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
!>
!>          On exit, the equilibrated matrix:  diag(S) * A * diag(S), in
!>          the same storage format as A.
!> 
[in]S
!>          S is DOUBLE PRECISION array, dimension (N)
!>          The scale factors for A.
!> 
[in]SCOND
!>          SCOND is DOUBLE PRECISION
!>          Ratio of the smallest S(i) to the largest S(i).
!> 
[in]AMAX
!>          AMAX is DOUBLE PRECISION
!>          Absolute value of largest matrix entry.
!> 
[out]EQUED
!>          EQUED is CHARACTER*1
!>          Specifies whether or not equilibration was done.
!>          = 'N':  No equilibration.
!>          = 'Y':  Equilibration was done, i.e., A has been replaced by
!>                  diag(S) * A * diag(S).
!> 
Internal Parameters:
!>  THRESH is a threshold value used to decide if scaling should be done
!>  based on the ratio of the scaling factors.  If SCOND < THRESH,
!>  scaling is done.
!>
!>  LARGE and SMALL are threshold values used to decide if scaling should
!>  be done based on the absolute size of the largest matrix element.
!>  If AMAX > LARGE or AMAX < SMALL, scaling is done.
!> 
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 122 of file dlaqsp.f.

123*
124* -- LAPACK auxiliary routine --
125* -- LAPACK is a software package provided by Univ. of Tennessee, --
126* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
127*
128* .. Scalar Arguments ..
129 CHARACTER EQUED, UPLO
130 INTEGER N
131 DOUBLE PRECISION AMAX, SCOND
132* ..
133* .. Array Arguments ..
134 DOUBLE PRECISION AP( * ), S( * )
135* ..
136*
137* =====================================================================
138*
139* .. Parameters ..
140 DOUBLE PRECISION ONE, THRESH
141 parameter( one = 1.0d+0, thresh = 0.1d+0 )
142* ..
143* .. Local Scalars ..
144 INTEGER I, J, JC
145 DOUBLE PRECISION CJ, LARGE, SMALL
146* ..
147* .. External Functions ..
148 LOGICAL LSAME
149 DOUBLE PRECISION DLAMCH
150 EXTERNAL lsame, dlamch
151* ..
152* .. Executable Statements ..
153*
154* Quick return if possible
155*
156 IF( n.LE.0 ) THEN
157 equed = 'N'
158 RETURN
159 END IF
160*
161* Initialize LARGE and SMALL.
162*
163 small = dlamch( 'Safe minimum' ) / dlamch( 'Precision' )
164 large = one / small
165*
166 IF( scond.GE.thresh .AND. amax.GE.small .AND. amax.LE.large ) THEN
167*
168* No equilibration
169*
170 equed = 'N'
171 ELSE
172*
173* Replace A by diag(S) * A * diag(S).
174*
175 IF( lsame( uplo, 'U' ) ) THEN
176*
177* Upper triangle of A is stored.
178*
179 jc = 1
180 DO 20 j = 1, n
181 cj = s( j )
182 DO 10 i = 1, j
183 ap( jc+i-1 ) = cj*s( i )*ap( jc+i-1 )
184 10 CONTINUE
185 jc = jc + j
186 20 CONTINUE
187 ELSE
188*
189* Lower triangle of A is stored.
190*
191 jc = 1
192 DO 40 j = 1, n
193 cj = s( j )
194 DO 30 i = j, n
195 ap( jc+i-j ) = cj*s( i )*ap( jc+i-j )
196 30 CONTINUE
197 jc = jc + n - j + 1
198 40 CONTINUE
199 END IF
200 equed = 'Y'
201 END IF
202*
203 RETURN
204*
205* End of DLAQSP
206*
double precision function dlamch(cmach)
DLAMCH
Definition dlamch.f:69
logical function lsame(ca, cb)
LSAME
Definition lsame.f:48
Here is the caller graph for this function: