LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ zlaqge()

subroutine zlaqge ( integer  M,
integer  N,
complex*16, dimension( lda, * )  A,
integer  LDA,
double precision, dimension( * )  R,
double precision, dimension( * )  C,
double precision  ROWCND,
double precision  COLCND,
double precision  AMAX,
character  EQUED 
)

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

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

Purpose:
 ZLAQGE 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*16 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 DOUBLE PRECISION array, dimension (M)
          The row scale factors for A.
[in]C
          C is DOUBLE PRECISION array, dimension (N)
          The column scale factors for A.
[in]ROWCND
          ROWCND is DOUBLE PRECISION
          Ratio of the smallest R(i) to the largest R(i).
[in]COLCND
          COLCND is DOUBLE PRECISION
          Ratio of the smallest C(i) to the largest C(i).
[in]AMAX
          AMAX is DOUBLE PRECISION
          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 zlaqge.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  DOUBLE PRECISION AMAX, COLCND, ROWCND
152 * ..
153 * .. Array Arguments ..
154  DOUBLE PRECISION C( * ), R( * )
155  COMPLEX*16 A( LDA, * )
156 * ..
157 *
158 * =====================================================================
159 *
160 * .. Parameters ..
161  DOUBLE PRECISION ONE, THRESH
162  parameter( one = 1.0d+0, thresh = 0.1d+0 )
163 * ..
164 * .. Local Scalars ..
165  INTEGER I, J
166  DOUBLE PRECISION CJ, LARGE, SMALL
167 * ..
168 * .. External Functions ..
169  DOUBLE PRECISION DLAMCH
170  EXTERNAL dlamch
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 = dlamch( 'Safe minimum' ) / dlamch( '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 ZLAQGE
234 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
Here is the caller graph for this function: