Add short-circuit to avoid calling matrix norm for empty matrix.

This commit is contained in:
Rasmus Munk Larsen 2016-04-09 15:29:56 -07:00
parent 4a92b590a0
commit 096e355f8e

View File

@ -65,6 +65,7 @@ typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
const Decomposition& dec) { const Decomposition& dec) {
eigen_assert(matrix.rows() == dec.rows()); eigen_assert(matrix.rows() == dec.rows());
eigen_assert(matrix.cols() == dec.cols()); eigen_assert(matrix.cols() == dec.cols());
if (dec.rows() == 0) return typename Decomposition::RealScalar(1);
return ReciprocalConditionNumberEstimate(MatrixL1Norm(matrix), dec); return ReciprocalConditionNumberEstimate(MatrixL1Norm(matrix), dec);
} }
@ -89,15 +90,9 @@ typename Decomposition::RealScalar ReciprocalConditionNumberEstimate(
typename Decomposition::RealScalar matrix_norm, const Decomposition& dec) { typename Decomposition::RealScalar matrix_norm, const Decomposition& dec) {
typedef typename Decomposition::RealScalar RealScalar; typedef typename Decomposition::RealScalar RealScalar;
eigen_assert(dec.rows() == dec.cols()); eigen_assert(dec.rows() == dec.cols());
if (dec.rows() == 0) { if (dec.rows() == 0) return RealScalar(1);
return RealScalar(1); if (matrix_norm == RealScalar(0)) return RealScalar(0);
} if (dec.rows() == 1) return RealScalar(1);
if (matrix_norm == RealScalar(0)) {
return RealScalar(0);
}
if (dec.rows() == 1) {
return RealScalar(1);
}
const typename Decomposition::RealScalar inverse_matrix_norm = const typename Decomposition::RealScalar inverse_matrix_norm =
InverseMatrixL1NormEstimate(dec); InverseMatrixL1NormEstimate(dec);
return (inverse_matrix_norm == RealScalar(0) return (inverse_matrix_norm == RealScalar(0)