You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

sla_lin_berr.f 4.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. *> \brief \b SLA_LIN_BERR computes a component-wise relative backward error.
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. *> \htmlonly
  9. *> Download SLA_LIN_BERR + dependencies
  10. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/sla_lin_berr.f">
  11. *> [TGZ]</a>
  12. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/sla_lin_berr.f">
  13. *> [ZIP]</a>
  14. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sla_lin_berr.f">
  15. *> [TXT]</a>
  16. *> \endhtmlonly
  17. *
  18. * Definition:
  19. * ===========
  20. *
  21. * SUBROUTINE SLA_LIN_BERR ( N, NZ, NRHS, RES, AYB, BERR )
  22. *
  23. * .. Scalar Arguments ..
  24. * INTEGER N, NZ, NRHS
  25. * ..
  26. * .. Array Arguments ..
  27. * REAL AYB( N, NRHS ), BERR( NRHS )
  28. * REAL RES( N, NRHS )
  29. * ..
  30. *
  31. *
  32. *> \par Purpose:
  33. * =============
  34. *>
  35. *> \verbatim
  36. *>
  37. *> SLA_LIN_BERR computes componentwise relative backward error from
  38. *> the formula
  39. *> max(i) ( abs(R(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
  40. *> where abs(Z) is the componentwise absolute value of the matrix
  41. *> or vector Z.
  42. *> \endverbatim
  43. *
  44. * Arguments:
  45. * ==========
  46. *
  47. *> \param[in] N
  48. *> \verbatim
  49. *> N is INTEGER
  50. *> The number of linear equations, i.e., the order of the
  51. *> matrix A. N >= 0.
  52. *> \endverbatim
  53. *>
  54. *> \param[in] NZ
  55. *> \verbatim
  56. *> NZ is INTEGER
  57. *> We add (NZ+1)*SLAMCH( 'Safe minimum' ) to R(i) in the numerator to
  58. *> guard against spuriously zero residuals. Default value is N.
  59. *> \endverbatim
  60. *>
  61. *> \param[in] NRHS
  62. *> \verbatim
  63. *> NRHS is INTEGER
  64. *> The number of right hand sides, i.e., the number of columns
  65. *> of the matrices AYB, RES, and BERR. NRHS >= 0.
  66. *> \endverbatim
  67. *>
  68. *> \param[in] RES
  69. *> \verbatim
  70. *> RES is REAL array, dimension (N,NRHS)
  71. *> The residual matrix, i.e., the matrix R in the relative backward
  72. *> error formula above.
  73. *> \endverbatim
  74. *>
  75. *> \param[in] AYB
  76. *> \verbatim
  77. *> AYB is REAL array, dimension (N, NRHS)
  78. *> The denominator in the relative backward error formula above, i.e.,
  79. *> the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
  80. *> are from iterative refinement (see sla_gerfsx_extended.f).
  81. *> \endverbatim
  82. *>
  83. *> \param[out] BERR
  84. *> \verbatim
  85. *> BERR is REAL array, dimension (NRHS)
  86. *> The componentwise relative backward error from the formula above.
  87. *> \endverbatim
  88. *
  89. * Authors:
  90. * ========
  91. *
  92. *> \author Univ. of Tennessee
  93. *> \author Univ. of California Berkeley
  94. *> \author Univ. of Colorado Denver
  95. *> \author NAG Ltd.
  96. *
  97. *> \date December 2016
  98. *
  99. *> \ingroup realOTHERcomputational
  100. *
  101. * =====================================================================
  102. SUBROUTINE SLA_LIN_BERR ( N, NZ, NRHS, RES, AYB, BERR )
  103. *
  104. * -- LAPACK computational routine (version 3.7.0) --
  105. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  106. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  107. * December 2016
  108. *
  109. * .. Scalar Arguments ..
  110. INTEGER N, NZ, NRHS
  111. * ..
  112. * .. Array Arguments ..
  113. REAL AYB( N, NRHS ), BERR( NRHS )
  114. REAL RES( N, NRHS )
  115. * ..
  116. *
  117. * =====================================================================
  118. *
  119. * .. Local Scalars ..
  120. REAL TMP
  121. INTEGER I, J
  122. * ..
  123. * .. Intrinsic Functions ..
  124. INTRINSIC ABS, MAX
  125. * ..
  126. * .. External Functions ..
  127. EXTERNAL SLAMCH
  128. REAL SLAMCH
  129. REAL SAFE1
  130. * ..
  131. * .. Executable Statements ..
  132. *
  133. * Adding SAFE1 to the numerator guards against spuriously zero
  134. * residuals. A similar safeguard is in the SLA_yyAMV routine used
  135. * to compute AYB.
  136. *
  137. SAFE1 = SLAMCH( 'Safe minimum' )
  138. SAFE1 = (NZ+1)*SAFE1
  139. DO J = 1, NRHS
  140. BERR(J) = 0.0
  141. DO I = 1, N
  142. IF (AYB(I,J) .NE. 0.0) THEN
  143. TMP = (SAFE1+ABS(RES(I,J)))/AYB(I,J)
  144. BERR(J) = MAX( BERR(J), TMP )
  145. END IF
  146. *
  147. * If AYB is exactly 0.0 (and if computed by SLA_yyAMV), then we know
  148. * the true residual also must be exactly 0.0.
  149. *
  150. END DO
  151. END DO
  152. END