LAPACK  3.10.0
LAPACK: Linear Algebra PACKage
slaqge.f
Go to the documentation of this file.
1 *> \brief \b SLAQGE scales a general rectangular matrix, using row and column scaling factors computed by sgeequ.
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 *> \htmlonly
9 *> Download SLAQGE + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slaqge.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slaqge.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqge.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * SUBROUTINE SLAQGE( M, N, A, LDA, R, C, ROWCND, COLCND, AMAX,
22 * EQUED )
23 *
24 * .. Scalar Arguments ..
25 * CHARACTER EQUED
26 * INTEGER LDA, M, N
27 * REAL AMAX, COLCND, ROWCND
28 * ..
29 * .. Array Arguments ..
30 * REAL A( LDA, * ), C( * ), R( * )
31 * ..
32 *
33 *
34 *> \par Purpose:
35 * =============
36 *>
37 *> \verbatim
38 *>
39 *> SLAQGE equilibrates a general M by N matrix A using the row and
40 *> column scaling factors in the vectors R and C.
41 *> \endverbatim
42 *
43 * Arguments:
44 * ==========
45 *
46 *> \param[in] M
47 *> \verbatim
48 *> M is INTEGER
49 *> The number of rows of the matrix A. M >= 0.
50 *> \endverbatim
51 *>
52 *> \param[in] N
53 *> \verbatim
54 *> N is INTEGER
55 *> The number of columns of the matrix A. N >= 0.
56 *> \endverbatim
57 *>
58 *> \param[in,out] A
59 *> \verbatim
60 *> A is REAL array, dimension (LDA,N)
61 *> On entry, the M by N matrix A.
62 *> On exit, the equilibrated matrix. See EQUED for the form of
63 *> the equilibrated matrix.
64 *> \endverbatim
65 *>
66 *> \param[in] LDA
67 *> \verbatim
68 *> LDA is INTEGER
69 *> The leading dimension of the array A. LDA >= max(M,1).
70 *> \endverbatim
71 *>
72 *> \param[in] R
73 *> \verbatim
74 *> R is REAL array, dimension (M)
75 *> The row scale factors for A.
76 *> \endverbatim
77 *>
78 *> \param[in] C
79 *> \verbatim
80 *> C is REAL array, dimension (N)
81 *> The column scale factors for A.
82 *> \endverbatim
83 *>
84 *> \param[in] ROWCND
85 *> \verbatim
86 *> ROWCND is REAL
87 *> Ratio of the smallest R(i) to the largest R(i).
88 *> \endverbatim
89 *>
90 *> \param[in] COLCND
91 *> \verbatim
92 *> COLCND is REAL
93 *> Ratio of the smallest C(i) to the largest C(i).
94 *> \endverbatim
95 *>
96 *> \param[in] AMAX
97 *> \verbatim
98 *> AMAX is REAL
99 *> Absolute value of largest matrix entry.
100 *> \endverbatim
101 *>
102 *> \param[out] EQUED
103 *> \verbatim
104 *> EQUED is CHARACTER*1
105 *> Specifies the form of equilibration that was done.
106 *> = 'N': No equilibration
107 *> = 'R': Row equilibration, i.e., A has been premultiplied by
108 *> diag(R).
109 *> = 'C': Column equilibration, i.e., A has been postmultiplied
110 *> by diag(C).
111 *> = 'B': Both row and column equilibration, i.e., A has been
112 *> replaced by diag(R) * A * diag(C).
113 *> \endverbatim
114 *
115 *> \par Internal Parameters:
116 * =========================
117 *>
118 *> \verbatim
119 *> THRESH is a threshold value used to decide if row or column scaling
120 *> should be done based on the ratio of the row or column scaling
121 *> factors. If ROWCND < THRESH, row scaling is done, and if
122 *> COLCND < THRESH, column scaling is done.
123 *>
124 *> LARGE and SMALL are threshold values used to decide if row scaling
125 *> should be done based on the absolute size of the largest matrix
126 *> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
127 *> \endverbatim
128 *
129 * Authors:
130 * ========
131 *
132 *> \author Univ. of Tennessee
133 *> \author Univ. of California Berkeley
134 *> \author Univ. of Colorado Denver
135 *> \author NAG Ltd.
136 *
137 *> \ingroup realGEauxiliary
138 *
139 * =====================================================================
140  SUBROUTINE slaqge( M, N, A, LDA, R, C, ROWCND, COLCND, AMAX,
141  $ EQUED )
142 *
143 * -- LAPACK auxiliary routine --
144 * -- LAPACK is a software package provided by Univ. of Tennessee, --
145 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
146 *
147 * .. Scalar Arguments ..
148  CHARACTER EQUED
149  INTEGER LDA, M, N
150  REAL AMAX, COLCND, ROWCND
151 * ..
152 * .. Array Arguments ..
153  REAL A( LDA, * ), C( * ), R( * )
154 * ..
155 *
156 * =====================================================================
157 *
158 * .. Parameters ..
159  REAL ONE, THRESH
160  parameter( one = 1.0e+0, thresh = 0.1e+0 )
161 * ..
162 * .. Local Scalars ..
163  INTEGER I, J
164  REAL CJ, LARGE, SMALL
165 * ..
166 * .. External Functions ..
167  REAL SLAMCH
168  EXTERNAL slamch
169 * ..
170 * .. Executable Statements ..
171 *
172 * Quick return if possible
173 *
174  IF( m.LE.0 .OR. n.LE.0 ) THEN
175  equed = 'N'
176  RETURN
177  END IF
178 *
179 * Initialize LARGE and SMALL.
180 *
181  small = slamch( 'Safe minimum' ) / slamch( 'Precision' )
182  large = one / small
183 *
184  IF( rowcnd.GE.thresh .AND. amax.GE.small .AND. amax.LE.large )
185  $ THEN
186 *
187 * No row scaling
188 *
189  IF( colcnd.GE.thresh ) THEN
190 *
191 * No column scaling
192 *
193  equed = 'N'
194  ELSE
195 *
196 * Column scaling
197 *
198  DO 20 j = 1, n
199  cj = c( j )
200  DO 10 i = 1, m
201  a( i, j ) = cj*a( i, j )
202  10 CONTINUE
203  20 CONTINUE
204  equed = 'C'
205  END IF
206  ELSE IF( colcnd.GE.thresh ) THEN
207 *
208 * Row scaling, no column scaling
209 *
210  DO 40 j = 1, n
211  DO 30 i = 1, m
212  a( i, j ) = r( i )*a( i, j )
213  30 CONTINUE
214  40 CONTINUE
215  equed = 'R'
216  ELSE
217 *
218 * Row and column scaling
219 *
220  DO 60 j = 1, n
221  cj = c( j )
222  DO 50 i = 1, m
223  a( i, j ) = cj*r( i )*a( i, j )
224  50 CONTINUE
225  60 CONTINUE
226  equed = 'B'
227  END IF
228 *
229  RETURN
230 *
231 * End of SLAQGE
232 *
233  END
subroutine slaqge(M, N, A, LDA, R, C, ROWCND, COLCND, AMAX, EQUED)
SLAQGE scales a general rectangular matrix, using row and column scaling factors computed by sgeequ.
Definition: slaqge.f:142