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

◆ claqge()

subroutine claqge ( integer  m,
integer  n,
complex, dimension( lda, * )  a,
integer  lda,
real, dimension( * )  r,
real, dimension( * )  c,
real  rowcnd,
real  colcnd,
real  amax,
character  equed 
)

CLAQGE scales a general rectangular matrix, using row and column scaling factors computed by sgeequ.

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

Purpose:
 CLAQGE equilibrates a general M by N matrix A using the row and
 column scaling factors in the vectors R and C.
Parameters
[in]M
          M is INTEGER
          The number of rows of the matrix A.  M >= 0.
[in]N
          N is INTEGER
          The number of columns of the matrix A.  N >= 0.
[in,out]A
          A is COMPLEX array, dimension (LDA,N)
          On entry, the M by N matrix A.
          On exit, the equilibrated matrix.  See EQUED for the form of
          the equilibrated matrix.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A.  LDA >= max(M,1).
[in]R
          R is REAL array, dimension (M)
          The row scale factors for A.
[in]C
          C is REAL array, dimension (N)
          The column scale factors for A.
[in]ROWCND
          ROWCND is REAL
          Ratio of the smallest R(i) to the largest R(i).
[in]COLCND
          COLCND is REAL
          Ratio of the smallest C(i) to the largest C(i).
[in]AMAX
          AMAX is REAL
          Absolute value of largest matrix entry.
[out]EQUED
          EQUED is CHARACTER*1
          Specifies the form of equilibration that was done.
          = 'N':  No equilibration
          = 'R':  Row equilibration, i.e., A has been premultiplied by
                  diag(R).
          = 'C':  Column equilibration, i.e., A has been postmultiplied
                  by diag(C).
          = 'B':  Both row and column equilibration, i.e., A has been
                  replaced by diag(R) * A * diag(C).
Internal Parameters:
  THRESH is a threshold value used to decide if row or column scaling
  should be done based on the ratio of the row or column scaling
  factors.  If ROWCND < THRESH, row scaling is done, and if
  COLCND < THRESH, column scaling is done.

  LARGE and SMALL are threshold values used to decide if row scaling
  should be done based on the absolute size of the largest matrix
  element.  If AMAX > LARGE or AMAX < SMALL, row scaling is done.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 141 of file claqge.f.

143*
144* -- LAPACK auxiliary routine --
145* -- LAPACK is a software package provided by Univ. of Tennessee, --
146* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
147*
148* .. Scalar Arguments ..
149 CHARACTER EQUED
150 INTEGER LDA, M, N
151 REAL AMAX, COLCND, ROWCND
152* ..
153* .. Array Arguments ..
154 REAL C( * ), R( * )
155 COMPLEX A( LDA, * )
156* ..
157*
158* =====================================================================
159*
160* .. Parameters ..
161 REAL ONE, THRESH
162 parameter( one = 1.0e+0, thresh = 0.1e+0 )
163* ..
164* .. Local Scalars ..
165 INTEGER I, J
166 REAL CJ, LARGE, SMALL
167* ..
168* .. External Functions ..
169 REAL SLAMCH
170 EXTERNAL slamch
171* ..
172* .. Executable Statements ..
173*
174* Quick return if possible
175*
176 IF( m.LE.0 .OR. n.LE.0 ) THEN
177 equed = 'N'
178 RETURN
179 END IF
180*
181* Initialize LARGE and SMALL.
182*
183 small = slamch( 'Safe minimum' ) / slamch( 'Precision' )
184 large = one / small
185*
186 IF( rowcnd.GE.thresh .AND. amax.GE.small .AND. amax.LE.large )
187 $ THEN
188*
189* No row scaling
190*
191 IF( colcnd.GE.thresh ) THEN
192*
193* No column scaling
194*
195 equed = 'N'
196 ELSE
197*
198* Column scaling
199*
200 DO 20 j = 1, n
201 cj = c( j )
202 DO 10 i = 1, m
203 a( i, j ) = cj*a( i, j )
204 10 CONTINUE
205 20 CONTINUE
206 equed = 'C'
207 END IF
208 ELSE IF( colcnd.GE.thresh ) THEN
209*
210* Row scaling, no column scaling
211*
212 DO 40 j = 1, n
213 DO 30 i = 1, m
214 a( i, j ) = r( i )*a( i, j )
215 30 CONTINUE
216 40 CONTINUE
217 equed = 'R'
218 ELSE
219*
220* Row and column scaling
221*
222 DO 60 j = 1, n
223 cj = c( j )
224 DO 50 i = 1, m
225 a( i, j ) = cj*r( i )*a( i, j )
226 50 CONTINUE
227 60 CONTINUE
228 equed = 'B'
229 END IF
230*
231 RETURN
232*
233* End of CLAQGE
234*
real function slamch(cmach)
SLAMCH
Definition slamch.f:68
Here is the caller graph for this function: