![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b ZGET10 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 * Definition: 00009 * =========== 00010 * 00011 * SUBROUTINE ZGET10( M, N, A, LDA, B, LDB, WORK, RWORK, RESULT ) 00012 * 00013 * .. Scalar Arguments .. 00014 * INTEGER LDA, LDB, M, N 00015 * DOUBLE PRECISION RESULT 00016 * .. 00017 * .. Array Arguments .. 00018 * DOUBLE PRECISION RWORK( * ) 00019 * COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * ) 00020 * .. 00021 * 00022 * 00023 *> \par Purpose: 00024 * ============= 00025 *> 00026 *> \verbatim 00027 *> 00028 *> ZGET10 compares two matrices A and B and computes the ratio 00029 *> RESULT = norm( A - B ) / ( norm(A) * M * EPS ) 00030 *> \endverbatim 00031 * 00032 * Arguments: 00033 * ========== 00034 * 00035 *> \param[in] M 00036 *> \verbatim 00037 *> M is INTEGER 00038 *> The number of rows of the matrices A and B. 00039 *> \endverbatim 00040 *> 00041 *> \param[in] N 00042 *> \verbatim 00043 *> N is INTEGER 00044 *> The number of columns of the matrices A and B. 00045 *> \endverbatim 00046 *> 00047 *> \param[in] A 00048 *> \verbatim 00049 *> A is COMPLEX*16 array, dimension (LDA,N) 00050 *> The m by n matrix A. 00051 *> \endverbatim 00052 *> 00053 *> \param[in] LDA 00054 *> \verbatim 00055 *> LDA is INTEGER 00056 *> The leading dimension of the array A. LDA >= max(1,M). 00057 *> \endverbatim 00058 *> 00059 *> \param[in] B 00060 *> \verbatim 00061 *> B is COMPLEX*16 array, dimension (LDB,N) 00062 *> The m by n matrix B. 00063 *> \endverbatim 00064 *> 00065 *> \param[in] LDB 00066 *> \verbatim 00067 *> LDB is INTEGER 00068 *> The leading dimension of the array B. LDB >= max(1,M). 00069 *> \endverbatim 00070 *> 00071 *> \param[out] WORK 00072 *> \verbatim 00073 *> WORK is COMPLEX*16 array, dimension (M) 00074 *> \endverbatim 00075 *> 00076 *> \param[out] RWORK 00077 *> \verbatim 00078 *> RWORK is COMPLEX*16 array, dimension (M) 00079 *> \endverbatim 00080 *> 00081 *> \param[out] RESULT 00082 *> \verbatim 00083 *> RESULT is DOUBLE PRECISION 00084 *> RESULT = norm( A - B ) / ( norm(A) * M * EPS ) 00085 *> \endverbatim 00086 * 00087 * Authors: 00088 * ======== 00089 * 00090 *> \author Univ. of Tennessee 00091 *> \author Univ. of California Berkeley 00092 *> \author Univ. of Colorado Denver 00093 *> \author NAG Ltd. 00094 * 00095 *> \date November 2011 00096 * 00097 *> \ingroup complex16_eig 00098 * 00099 * ===================================================================== 00100 SUBROUTINE ZGET10( M, N, A, LDA, B, LDB, WORK, RWORK, RESULT ) 00101 * 00102 * -- LAPACK test routine (version 3.4.0) -- 00103 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00104 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00105 * November 2011 00106 * 00107 * .. Scalar Arguments .. 00108 INTEGER LDA, LDB, M, N 00109 DOUBLE PRECISION RESULT 00110 * .. 00111 * .. Array Arguments .. 00112 DOUBLE PRECISION RWORK( * ) 00113 COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * ) 00114 * .. 00115 * 00116 * ===================================================================== 00117 * 00118 * .. Parameters .. 00119 DOUBLE PRECISION ONE, ZERO 00120 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) 00121 * .. 00122 * .. Local Scalars .. 00123 INTEGER J 00124 DOUBLE PRECISION ANORM, EPS, UNFL, WNORM 00125 * .. 00126 * .. External Functions .. 00127 DOUBLE PRECISION DLAMCH, DZASUM, ZLANGE 00128 EXTERNAL DLAMCH, DZASUM, ZLANGE 00129 * .. 00130 * .. External Subroutines .. 00131 EXTERNAL ZAXPY, ZCOPY 00132 * .. 00133 * .. Intrinsic Functions .. 00134 INTRINSIC DBLE, DCMPLX, MAX, MIN 00135 * .. 00136 * .. Executable Statements .. 00137 * 00138 * Quick return if possible 00139 * 00140 IF( M.LE.0 .OR. N.LE.0 ) THEN 00141 RESULT = ZERO 00142 RETURN 00143 END IF 00144 * 00145 UNFL = DLAMCH( 'Safe minimum' ) 00146 EPS = DLAMCH( 'Precision' ) 00147 * 00148 WNORM = ZERO 00149 DO 10 J = 1, N 00150 CALL ZCOPY( M, A( 1, J ), 1, WORK, 1 ) 00151 CALL ZAXPY( M, DCMPLX( -ONE ), B( 1, J ), 1, WORK, 1 ) 00152 WNORM = MAX( WNORM, DZASUM( N, WORK, 1 ) ) 00153 10 CONTINUE 00154 * 00155 ANORM = MAX( ZLANGE( '1', M, N, A, LDA, RWORK ), UNFL ) 00156 * 00157 IF( ANORM.GT.WNORM ) THEN 00158 RESULT = ( WNORM / ANORM ) / ( M*EPS ) 00159 ELSE 00160 IF( ANORM.LT.ONE ) THEN 00161 RESULT = ( MIN( WNORM, M*ANORM ) / ANORM ) / ( M*EPS ) 00162 ELSE 00163 RESULT = MIN( WNORM / ANORM, DBLE( M ) ) / ( M*EPS ) 00164 END IF 00165 END IF 00166 * 00167 RETURN 00168 * 00169 * End of ZGET10 00170 * 00171 END