diff options
Diffstat (limited to 'src/lib/lapack/dgeequ.f')
-rw-r--r-- | src/lib/lapack/dgeequ.f | 225 |
1 files changed, 0 insertions, 225 deletions
diff --git a/src/lib/lapack/dgeequ.f b/src/lib/lapack/dgeequ.f deleted file mode 100644 index b703116e..00000000 --- a/src/lib/lapack/dgeequ.f +++ /dev/null @@ -1,225 +0,0 @@ - SUBROUTINE DGEEQU( M, N, A, LDA, R, C, ROWCND, COLCND, AMAX, - $ INFO ) -* -* -- LAPACK routine (version 3.1) -- -* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. -* November 2006 -* -* .. Scalar Arguments .. - INTEGER INFO, LDA, M, N - DOUBLE PRECISION AMAX, COLCND, ROWCND -* .. -* .. Array Arguments .. - DOUBLE PRECISION A( LDA, * ), C( * ), R( * ) -* .. -* -* Purpose -* ======= -* -* DGEEQU computes row and column scalings intended to equilibrate an -* M-by-N matrix A and reduce its condition number. R returns the row -* scale factors and C the column scale factors, chosen to try to make -* the largest element in each row and column of the matrix B with -* elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1. -* -* R(i) and C(j) are restricted to be between SMLNUM = smallest safe -* number and BIGNUM = largest safe number. Use of these scaling -* factors is not guaranteed to reduce the condition number of A but -* works well in practice. -* -* Arguments -* ========= -* -* M (input) INTEGER -* The number of rows of the matrix A. M >= 0. -* -* N (input) INTEGER -* The number of columns of the matrix A. N >= 0. -* -* A (input) DOUBLE PRECISION array, dimension (LDA,N) -* The M-by-N matrix whose equilibration factors are -* to be computed. -* -* LDA (input) INTEGER -* The leading dimension of the array A. LDA >= max(1,M). -* -* R (output) DOUBLE PRECISION array, dimension (M) -* If INFO = 0 or INFO > M, R contains the row scale factors -* for A. -* -* C (output) DOUBLE PRECISION array, dimension (N) -* If INFO = 0, C contains the column scale factors for A. -* -* ROWCND (output) DOUBLE PRECISION -* If INFO = 0 or INFO > M, ROWCND contains the ratio of the -* smallest R(i) to the largest R(i). If ROWCND >= 0.1 and -* AMAX is neither too large nor too small, it is not worth -* scaling by R. -* -* COLCND (output) DOUBLE PRECISION -* If INFO = 0, COLCND contains the ratio of the smallest -* C(i) to the largest C(i). If COLCND >= 0.1, it is not -* worth scaling by C. -* -* AMAX (output) DOUBLE PRECISION -* Absolute value of largest matrix element. If AMAX is very -* close to overflow or very close to underflow, the matrix -* should be scaled. -* -* INFO (output) INTEGER -* = 0: successful exit -* < 0: if INFO = -i, the i-th argument had an illegal value -* > 0: if INFO = i, and i is -* <= M: the i-th row of A is exactly zero -* > M: the (i-M)-th column of A is exactly zero -* -* ===================================================================== -* -* .. Parameters .. - DOUBLE PRECISION ONE, ZERO - PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) -* .. -* .. Local Scalars .. - INTEGER I, J - DOUBLE PRECISION BIGNUM, RCMAX, RCMIN, SMLNUM -* .. -* .. External Functions .. - DOUBLE PRECISION DLAMCH - EXTERNAL DLAMCH -* .. -* .. External Subroutines .. - EXTERNAL XERBLA -* .. -* .. Intrinsic Functions .. - INTRINSIC ABS, MAX, MIN -* .. -* .. Executable Statements .. -* -* Test the input parameters. -* - INFO = 0 - IF( M.LT.0 ) THEN - INFO = -1 - ELSE IF( N.LT.0 ) THEN - INFO = -2 - ELSE IF( LDA.LT.MAX( 1, M ) ) THEN - INFO = -4 - END IF - IF( INFO.NE.0 ) THEN - CALL XERBLA( 'DGEEQU', -INFO ) - RETURN - END IF -* -* Quick return if possible -* - IF( M.EQ.0 .OR. N.EQ.0 ) THEN - ROWCND = ONE - COLCND = ONE - AMAX = ZERO - RETURN - END IF -* -* Get machine constants. -* - SMLNUM = DLAMCH( 'S' ) - BIGNUM = ONE / SMLNUM -* -* Compute row scale factors. -* - DO 10 I = 1, M - R( I ) = ZERO - 10 CONTINUE -* -* Find the maximum element in each row. -* - DO 30 J = 1, N - DO 20 I = 1, M - R( I ) = MAX( R( I ), ABS( A( I, J ) ) ) - 20 CONTINUE - 30 CONTINUE -* -* Find the maximum and minimum scale factors. -* - RCMIN = BIGNUM - RCMAX = ZERO - DO 40 I = 1, M - RCMAX = MAX( RCMAX, R( I ) ) - RCMIN = MIN( RCMIN, R( I ) ) - 40 CONTINUE - AMAX = RCMAX -* - IF( RCMIN.EQ.ZERO ) THEN -* -* Find the first zero scale factor and return an error code. -* - DO 50 I = 1, M - IF( R( I ).EQ.ZERO ) THEN - INFO = I - RETURN - END IF - 50 CONTINUE - ELSE -* -* Invert the scale factors. -* - DO 60 I = 1, M - R( I ) = ONE / MIN( MAX( R( I ), SMLNUM ), BIGNUM ) - 60 CONTINUE -* -* Compute ROWCND = min(R(I)) / max(R(I)) -* - ROWCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM ) - END IF -* -* Compute column scale factors -* - DO 70 J = 1, N - C( J ) = ZERO - 70 CONTINUE -* -* Find the maximum element in each column, -* assuming the row scaling computed above. -* - DO 90 J = 1, N - DO 80 I = 1, M - C( J ) = MAX( C( J ), ABS( A( I, J ) )*R( I ) ) - 80 CONTINUE - 90 CONTINUE -* -* Find the maximum and minimum scale factors. -* - RCMIN = BIGNUM - RCMAX = ZERO - DO 100 J = 1, N - RCMIN = MIN( RCMIN, C( J ) ) - RCMAX = MAX( RCMAX, C( J ) ) - 100 CONTINUE -* - IF( RCMIN.EQ.ZERO ) THEN -* -* Find the first zero scale factor and return an error code. -* - DO 110 J = 1, N - IF( C( J ).EQ.ZERO ) THEN - INFO = M + J - RETURN - END IF - 110 CONTINUE - ELSE -* -* Invert the scale factors. -* - DO 120 J = 1, N - C( J ) = ONE / MIN( MAX( C( J ), SMLNUM ), BIGNUM ) - 120 CONTINUE -* -* Compute COLCND = min(C(J)) / max(C(J)) -* - COLCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM ) - END IF -* - RETURN -* -* End of DGEEQU -* - END |