aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/ConditionEstimator.h
diff options
context:
space:
mode:
authorGravatar Rasmus Munk Larsen <rmlarsen@google.com>2016-04-07 16:28:44 -0700
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2016-04-07 16:28:44 -0700
commitfd872aefb3a9a0e4be08e66671494babdb921c2b (patch)
tree57ff6f1fd30796c3d7b109b81a6d052347cc6204 /Eigen/src/Core/ConditionEstimator.h
parent0b5546d182928acb428daba0787755180da4b3fc (diff)
Remove transpose() method from LLT and LDLT classes as it would imply conjugation.
Explicitly cast constants to RealScalar in ConditionEstimator.h.
Diffstat (limited to 'Eigen/src/Core/ConditionEstimator.h')
-rw-r--r--Eigen/src/Core/ConditionEstimator.h31
1 files changed, 20 insertions, 11 deletions
diff --git a/Eigen/src/Core/ConditionEstimator.h b/Eigen/src/Core/ConditionEstimator.h
index 9027aa2f7..19c6102f7 100644
--- a/Eigen/src/Core/ConditionEstimator.h
+++ b/Eigen/src/Core/ConditionEstimator.h
@@ -27,7 +27,8 @@ template <typename Vector, typename RealVector, bool IsComplex>
struct SignOrUnity {
static inline Vector run(const Vector& v) {
const RealVector v_abs = v.cwiseAbs();
- return (v_abs.array() == 0).select(Vector::Ones(v.size()), v.cwiseQuotient(v_abs));
+ return (v_abs.array() == static_cast<typename Vector::RealScalar>(0))
+ .select(Vector::Ones(v.size()), v.cwiseQuotient(v_abs));
}
};
@@ -35,7 +36,8 @@ struct SignOrUnity {
template <typename Vector>
struct SignOrUnity<Vector, Vector, false> {
static inline Vector run(const Vector& v) {
- return (v.array() < 0).select(-Vector::Ones(v.size()), Vector::Ones(v.size()));
+ return (v.array() < static_cast<typename Vector::RealScalar>(0))
+ .select(-Vector::Ones(v.size()), Vector::Ones(v.size()));
}
};
@@ -65,7 +67,7 @@ typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
eigen_assert(matrix.cols() == dec.cols());
eigen_assert(matrix.rows() == matrix.cols());
if (dec.rows() == 0) {
- return Decomposition::RealScalar(1);
+ return static_cast<typename Decomposition::RealScalar>(1);
}
return ReciprocalConditionNumberEstimate(MatrixL1Norm(matrix), dec);
}
@@ -89,15 +91,20 @@ typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
template <typename Decomposition>
typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
typename Decomposition::RealScalar matrix_norm, const Decomposition& dec) {
+ typedef typename Decomposition::RealScalar RealScalar;
eigen_assert(dec.rows() == dec.cols());
if (dec.rows() == 0) {
- return 1;
+ return static_cast<RealScalar>(1);
}
- if (matrix_norm == 0) {
- return 0;
+ if (matrix_norm == static_cast<RealScalar>(0)) {
+ return static_cast<RealScalar>(0);
}
- const typename Decomposition::RealScalar inverse_matrix_norm = InverseMatrixL1NormEstimate(dec);
- return inverse_matrix_norm == 0 ? 0 : (1 / inverse_matrix_norm) / matrix_norm;
+ const typename Decomposition::RealScalar inverse_matrix_norm =
+ InverseMatrixL1NormEstimate(dec);
+ return (inverse_matrix_norm == static_cast<RealScalar>(0)
+ ? static_cast<RealScalar>(0)
+ : (static_cast<RealScalar>(1) / inverse_matrix_norm) /
+ matrix_norm);
}
/**
@@ -115,7 +122,8 @@ typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
* ||matrix||_1 * ||inv(matrix)||_1. The first term ||matrix||_1 can be
* computed directly in O(n^2) operations.
*
- * Supports the following decompositions: FullPivLU, PartialPivLU, LDLT, and LLT.
+ * Supports the following decompositions: FullPivLU, PartialPivLU, LDLT, and
+ * LLT.
*
* \sa FullPivLU, PartialPivLU, LDLT, LLT.
*/
@@ -126,7 +134,8 @@ typename Decomposition::RealScalar InverseMatrixL1NormEstimate(
typedef typename Decomposition::Scalar Scalar;
typedef typename Decomposition::RealScalar RealScalar;
typedef typename internal::plain_col_type<MatrixType>::type Vector;
- typedef typename internal::plain_col_type<MatrixType, RealScalar>::type RealVector;
+ typedef typename internal::plain_col_type<MatrixType, RealScalar>::type
+ RealVector;
const bool is_complex = (NumTraits<Scalar>::IsComplex != 0);
eigen_assert(dec.rows() == dec.cols());
@@ -188,7 +197,7 @@ typename Decomposition::RealScalar InverseMatrixL1NormEstimate(
// exact cancellation (especially when op and op_adjoint correspond to a
// sequence of backsubstitutions and permutations), which could cause
// Hager's algorithm to vastly underestimate ||matrix||_1.
- Scalar alternating_sign = 1;
+ Scalar alternating_sign(static_cast<RealScalar>(1));
for (int i = 0; i < n; ++i) {
v[i] = alternating_sign *
(static_cast<RealScalar>(1) +