10 #ifndef EIGEN_CONDITIONESTIMATOR_H
11 #define EIGEN_CONDITIONESTIMATOR_H
20 template <
typename Vector,
typename RealVector,
bool IsComplex>
23 const RealVector v_abs =
v.cwiseAbs();
25 .select(Vector::Ones(
v.size()),
v.cwiseQuotient(v_abs));
30 template <
typename Vector>
34 .select(-Vector::Ones(
v.size()), Vector::Ones(
v.size()));
58 template <
typename Decomposition>
68 const Index n = dec.rows();
72 #ifdef __INTEL_COMPILER
74 #pragma warning(disable : 2259)
77 #ifdef __INTEL_COMPILER
86 if (
n == 1)
return lower_bound;
94 Index v_max_abs_index = -1;
95 Index old_v_max_abs_index = v_max_abs_index;
96 for (
int k = 0;
k < 4; ++
k) {
98 if (
k > 0 && !is_complex && sign_vector == old_sign_vector) {
103 v = dec.adjoint().solve(sign_vector);
104 v.real().cwiseAbs().maxCoeff(&v_max_abs_index);
105 if (v_max_abs_index == old_v_max_abs_index) {
110 v = dec.solve(Vector::Unit(
n, v_max_abs_index));
111 lower_bound =
v.template lpNorm<1>();
112 if (lower_bound <= old_lower_bound) {
117 old_sign_vector = sign_vector;
119 old_v_max_abs_index = v_max_abs_index;
120 old_lower_bound = lower_bound;
136 alternating_sign = -alternating_sign;
140 return numext::maxi(lower_bound, alternate_lower_bound);
156 template <
typename Decomposition>
158 const Decomposition& dec) {
166 : (
RealScalar(1) / inverse_matrix_norm) / matrix_norm);
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
#define eigen_assert(x)
Definition: Macros.h:910
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
NumTraits< Scalar >::Real RealScalar
Definition: PlainObjectBase.h:130
Matrix< Type, Size, 1 > Vector
\cpp11 SizeĆ1 vector of type Type.
Definition: Eigen/Eigen/src/Core/Matrix.h:515
char char char int int * k
Definition: level2_impl.h:374
Decomposition::RealScalar rcond_invmatrix_L1_norm_estimate(const Decomposition &dec)
Definition: ConditionEstimator.h:59
Decomposition::RealScalar rcond_estimate_helper(typename Decomposition::RealScalar matrix_norm, const Decomposition &dec)
Reciprocal condition number estimator.
Definition: ConditionEstimator.h:157
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X &x)
Definition: Meta.h:592
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Definition: Eigen_Colamd.h:49
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
std::conditional_t< is_same< typename traits< ExpressionType >::XprKind, MatrixXpr >::value, MatrixColType, ArrayColType > type
Definition: XprHelper.h:782
static Vector run(const Vector &v)
Definition: ConditionEstimator.h:32
Definition: ConditionEstimator.h:21
static Vector run(const Vector &v)
Definition: ConditionEstimator.h:22