Re: [eigen] discrepancy in (triangular view + transpose) and self-adjointness

[ Thread Index | Date Index | More Archives ]

Christoph Hertzberg wrote:
Manoj Rajagopalan wrote:
But, the following code produces a discrepancy:

    MatrixXi B(N,N);
    C1 = A.selfadjointView<Lower>() * B;
    C2 = (A_l * B)   +   (A_zl.transpose() * B);
    assert(C1 == C2); // <--------  FALSE!

seems like A_zl.transpose() * B ignores the ZeroDiag flag.
replacing (A_zl.transpose() * B) by
(A_zl.transpose().toDenseMatrix() * B)
makes it working ...
I can't tell where exactly the error happens

damn, thats hard to debug.
It seems that the Problem is that in /Eigen/src/Core/products/TriangularMatrixMatrix.h:90

// implements col-major += alpha * op(triangular) * op(general)
template <typename Scalar, typename Index, int Mode,
          int LhsStorageOrder, bool ConjugateLhs,
          int RhsStorageOrder, bool ConjugateRhs>
struct ei_product_triangular_matrix_matrix<Scalar,Index,Mode,true,

does check for UnitDiag, but never checks for ZeroDiag.

Can't help with fixing, though ...

Dipl.-Inf. Christoph Hertzberg
Cartesium 0.051
Universität Bremen
Enrique-Schmidt-Straße 5
28359 Bremen

Tel: (+49) 421-218-64252

Mail converted by MHonArc 2.6.19+