mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-12 17:33:15 +08:00
Fix LeastSquareDiagonalPreconditioner for complexes (issue introduced in previous commit)
This commit is contained in:
parent
498aa95a8b
commit
a7be4cd1b1
@ -158,18 +158,18 @@ class LeastSquareDiagonalPreconditioner : public DiagonalPreconditioner<_Scalar>
|
|||||||
for(Index j=0; j<mat.outerSize(); ++j)
|
for(Index j=0; j<mat.outerSize(); ++j)
|
||||||
{
|
{
|
||||||
for(typename MatType::InnerIterator it(mat,j); it; ++it)
|
for(typename MatType::InnerIterator it(mat,j); it; ++it)
|
||||||
m_invdiag(it.index()) += it.value();
|
m_invdiag(it.index()) += numext::abs2(it.value());
|
||||||
}
|
}
|
||||||
for(Index j=0; j<mat.cols(); ++j)
|
for(Index j=0; j<mat.cols(); ++j)
|
||||||
if(m_invdiag(j)>0)
|
if(numext::real(m_invdiag(j))>RealScalar(0))
|
||||||
m_invdiag(j) = RealScalar(1)/m_invdiag(j);
|
m_invdiag(j) = RealScalar(1)/numext::real(m_invdiag(j));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for(Index j=0; j<mat.outerSize(); ++j)
|
for(Index j=0; j<mat.outerSize(); ++j)
|
||||||
{
|
{
|
||||||
RealScalar sum = mat.innerVector(j).squaredNorm();
|
RealScalar sum = mat.innerVector(j).squaredNorm();
|
||||||
if(sum>0)
|
if(sum>RealScalar(0))
|
||||||
m_invdiag(j) = RealScalar(1)/sum;
|
m_invdiag(j) = RealScalar(1)/sum;
|
||||||
else
|
else
|
||||||
m_invdiag(j) = RealScalar(1);
|
m_invdiag(j) = RealScalar(1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user