1 #ifndef _VIENNACL_LINALG_DETAIL_BISECT_GERSCHORIN_HPP_
2 #define _VIENNACL_LINALG_DETAIL_BISECT_GERSCHORIN_HPP_
53 template<
typename NumericT>
58 for (
unsigned int i = 1; i < (n - 1); ++i)
62 NumericT sum_abs_ni = fabsf(s[i]) + fabsf(s[i + 1]);
64 lg =
min(lg, d[i] - sum_abs_ni);
65 ug =
max(ug, d[i] + sum_abs_ni);
71 lg =
min(lg, d[0] - fabsf(s[1]));
72 ug =
max(ug, d[0] + fabsf(s[1]));
75 lg =
min(lg, d[n-1] - fabsf(s[n-1]));
76 ug =
max(ug, d[n-1] + fabsf(s[n-1]));
83 NumericT psi_0 = 11 * FLT_EPSILON * bnorm;
84 NumericT psi_n = 11 * FLT_EPSILON * bnorm;
86 lg = lg - bnorm * 2 *
static_cast<NumericT>(n) * FLT_EPSILON - psi_0;
87 ug = ug + bnorm * 2 *
static_cast<NumericT>(n) * FLT_EPSILON + psi_n;
94 #endif // _VIENNACL_LINALG_DETAIL_GERSCHORIN_H_
void computeGerschgorin(std::vector< NumericT > &d, std::vector< NumericT > &s, unsigned int n, NumericT &lg, NumericT &ug)
T max(const T &lhs, const T &rhs)
Maximum.
Main namespace in ViennaCL. Holds all the basic types such as vector, matrix, etc. and defines operations upon them.
The vector type with operator-overloads and proxy classes is defined here. Linear algebra operations ...
T min(const T &lhs, const T &rhs)
Minimum.