1*> \brief \b CGET04 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE CGET04( N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID ) 12* 13* .. Scalar Arguments .. 14* INTEGER LDX, LDXACT, N, NRHS 15* REAL RCOND, RESID 16* .. 17* .. Array Arguments .. 18* COMPLEX X( LDX, * ), XACT( LDXACT, * ) 19* .. 20* 21* 22*> \par Purpose: 23* ============= 24*> 25*> \verbatim 26*> 27*> CGET04 computes the difference between a computed solution and the 28*> true solution to a system of linear equations. 29*> 30*> RESID = ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ), 31*> where RCOND is the reciprocal of the condition number and EPS is the 32*> machine epsilon. 33*> \endverbatim 34* 35* Arguments: 36* ========== 37* 38*> \param[in] N 39*> \verbatim 40*> N is INTEGER 41*> The number of rows of the matrices X and XACT. N >= 0. 42*> \endverbatim 43*> 44*> \param[in] NRHS 45*> \verbatim 46*> NRHS is INTEGER 47*> The number of columns of the matrices X and XACT. NRHS >= 0. 48*> \endverbatim 49*> 50*> \param[in] X 51*> \verbatim 52*> X is COMPLEX array, dimension (LDX,NRHS) 53*> The computed solution vectors. Each vector is stored as a 54*> column of the matrix X. 55*> \endverbatim 56*> 57*> \param[in] LDX 58*> \verbatim 59*> LDX is INTEGER 60*> The leading dimension of the array X. LDX >= max(1,N). 61*> \endverbatim 62*> 63*> \param[in] XACT 64*> \verbatim 65*> XACT is COMPLEX array, dimension (LDX,NRHS) 66*> The exact solution vectors. Each vector is stored as a 67*> column of the matrix XACT. 68*> \endverbatim 69*> 70*> \param[in] LDXACT 71*> \verbatim 72*> LDXACT is INTEGER 73*> The leading dimension of the array XACT. LDXACT >= max(1,N). 74*> \endverbatim 75*> 76*> \param[in] RCOND 77*> \verbatim 78*> RCOND is REAL 79*> The reciprocal of the condition number of the coefficient 80*> matrix in the system of equations. 81*> \endverbatim 82*> 83*> \param[out] RESID 84*> \verbatim 85*> RESID is REAL 86*> The maximum over the NRHS solution vectors of 87*> ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ) 88*> \endverbatim 89* 90* Authors: 91* ======== 92* 93*> \author Univ. of Tennessee 94*> \author Univ. of California Berkeley 95*> \author Univ. of Colorado Denver 96*> \author NAG Ltd. 97* 98*> \date December 2016 99* 100*> \ingroup complex_lin 101* 102* ===================================================================== 103 SUBROUTINE CGET04( N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID ) 104* 105* -- LAPACK test routine (version 3.7.0) -- 106* -- LAPACK is a software package provided by Univ. of Tennessee, -- 107* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 108* December 2016 109* 110* .. Scalar Arguments .. 111 INTEGER LDX, LDXACT, N, NRHS 112 REAL RCOND, RESID 113* .. 114* .. Array Arguments .. 115 COMPLEX X( LDX, * ), XACT( LDXACT, * ) 116* .. 117* 118* ===================================================================== 119* 120* .. Parameters .. 121 REAL ZERO 122 PARAMETER ( ZERO = 0.0E+0 ) 123* .. 124* .. Local Scalars .. 125 INTEGER I, IX, J 126 REAL DIFFNM, EPS, XNORM 127 COMPLEX ZDUM 128* .. 129* .. External Functions .. 130 INTEGER ICAMAX 131 REAL SLAMCH 132 EXTERNAL ICAMAX, SLAMCH 133* .. 134* .. Intrinsic Functions .. 135 INTRINSIC ABS, AIMAG, MAX, REAL 136* .. 137* .. Statement Functions .. 138 REAL CABS1 139* .. 140* .. Statement Function definitions .. 141 CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) ) 142* .. 143* .. Executable Statements .. 144* 145* Quick exit if N = 0 or NRHS = 0. 146* 147 IF( N.LE.0 .OR. NRHS.LE.0 ) THEN 148 RESID = ZERO 149 RETURN 150 END IF 151* 152* Exit with RESID = 1/EPS if RCOND is invalid. 153* 154 EPS = SLAMCH( 'Epsilon' ) 155 IF( RCOND.LT.ZERO ) THEN 156 RESID = 1.0 / EPS 157 RETURN 158 END IF 159* 160* Compute the maximum of 161* norm(X - XACT) / ( norm(XACT) * EPS ) 162* over all the vectors X and XACT . 163* 164 RESID = ZERO 165 DO 20 J = 1, NRHS 166 IX = ICAMAX( N, XACT( 1, J ), 1 ) 167 XNORM = CABS1( XACT( IX, J ) ) 168 DIFFNM = ZERO 169 DO 10 I = 1, N 170 DIFFNM = MAX( DIFFNM, CABS1( X( I, J )-XACT( I, J ) ) ) 171 10 CONTINUE 172 IF( XNORM.LE.ZERO ) THEN 173 IF( DIFFNM.GT.ZERO ) 174 $ RESID = 1.0 / EPS 175 ELSE 176 RESID = MAX( RESID, ( DIFFNM / XNORM )*RCOND ) 177 END IF 178 20 CONTINUE 179 IF( RESID*EPS.LT.1.0 ) 180 $ RESID = RESID / EPS 181* 182 RETURN 183* 184* End of CGET04 185* 186 END 187