fix warning in EigenSolver::pseudoEigenvalueMatrix()

This commit is contained in:
Charles Schlosser 2024-09-24 17:23:58 +00:00 committed by Rasmus Munk Larsen
parent 3ffb4e50df
commit ba5183f98c
2 changed files with 15 additions and 8 deletions

View File

@ -319,17 +319,24 @@ template <typename MatrixType>
MatrixType EigenSolver<MatrixType>::pseudoEigenvalueMatrix() const {
eigen_assert(m_isInitialized && "EigenSolver is not initialized.");
const RealScalar precision = RealScalar(2) * NumTraits<RealScalar>::epsilon();
Index n = m_eivalues.rows();
const Index n = m_eivalues.rows();
MatrixType matD = MatrixType::Zero(n, n);
for (Index i = 0; i < n; ++i) {
if (internal::isMuchSmallerThan(numext::imag(m_eivalues.coeff(i)), numext::real(m_eivalues.coeff(i)), precision))
matD.coeffRef(i, i) = numext::real(m_eivalues.coeff(i));
else {
matD.template block<2, 2>(i, i) << numext::real(m_eivalues.coeff(i)), numext::imag(m_eivalues.coeff(i)),
-numext::imag(m_eivalues.coeff(i)), numext::real(m_eivalues.coeff(i));
Index i = 0;
for (; i < n - 1; ++i) {
RealScalar real = numext::real(m_eivalues.coeff(i));
RealScalar imag = numext::imag(m_eivalues.coeff(i));
matD.coeffRef(i, i) = real;
if (!internal::isMuchSmallerThan(imag, real, precision)) {
matD.coeffRef(i, i + 1) = imag;
matD.coeffRef(i + 1, i) = -imag;
matD.coeffRef(i + 1, i + 1) = real;
++i;
}
}
if (i == n - 1) {
matD.coeffRef(i, i) = numext::real(m_eivalues.coeff(i));
}
return matD;
}

View File

@ -177,7 +177,7 @@ struct TensorEvaluator<const TensorChippingOp<DimId, ArgType>, Device> {
// Check if chipping is effectively inner or outer: products of dimensions
// before or after the chipped dimension is `1`.
Index after_chipped_dim_product = 1;
for (int i = static_cast<int>(m_dim.actualDim()) + 1; i < NumInputDims; ++i) {
for (int i = m_dim.actualDim() + 1; i < NumInputDims; ++i) {
after_chipped_dim_product *= input_dims[i];
}