Re: [eigen] problem with selfadjointView

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


indeed this is not implemented for a vector on the lhs yet.... I'll do it asap

gael

On Thu, Aug 19, 2010 at 5:30 AM, Ben Goodrich <bgokgm@xxxxxxxxxxxxxx> wrote:
> Hi guys,
>
> I have gotten sidetracked from the stuff I promised to do to add
> non-pivoting LDL' to eigen3, but since we decided to just add a new
> class for it, is that still fine to go in this week or next?
>
> My unrelated question is that I wanted to compare the speed of
>
> double foo(const VectorXd &x, const MatrixXd &A) {
>  return ((x.transpose() * A * x).eval())(0,0);
> }
>
> with
>
> double bar(const VectorXd &x, const MatrixXd &A) {
>  return ((x.transpose() * A.selfadjointView<Lower>() * x).eval())(0,0);
> }
>
> but g++ does not like x.transpose() * A.selfadjointView<Lower>()
> although it likes A.selfadjointView<Lower>() * x. The compiler error
> below is not very informative to me, but maybe someone else
> understands it. I guess x.transpose() is not yet a matrix so it does
> not understand how to multiply it by a selfadjointView?
>
> Ben
>
> bgoodrich@Room320:/tmp$ g++ -O2 -DNDEBUG benchmark.cc -o benchmark.o
> benchmark.cc: In function ‘double bar(const Eigen::VectorXd&, const
> Eigen::MatrixXd&)’:
> benchmark.cc:33: error: invalid use of incomplete type ‘struct
> Eigen::SelfadjointProductMatrix<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, 1, 0, -0x00000000000000001, 1> >, 0, true,
> Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001, 0,
> -0x00000000000000001, -0x00000000000000001>, 17, false>’
> /tmp/eigen/Eigen/src/Core/SelfAdjointView.h:59: error: declaration of
> ‘struct Eigen::SelfadjointProductMatrix<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, 1, 0, -0x00000000000000001, 1> >, 0, true,
> Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001, 0,
> -0x00000000000000001, -0x00000000000000001>, 17, false>’
> In file included from /tmp/eigen/Eigen/Core:288,
>                from /tmp/eigen/Eigen/Dense:1,
>                from benchmark.cc:1:
> /tmp/eigen/Eigen/src/Core/SelfAdjointView.h: In function
> ‘Eigen::SelfadjointProductMatrix<OtherDerived, 0,
> OtherDerived::IsVectorAtCompileTime, MatrixType,
> Eigen::SelfAdjointView<MatrixType, Mode>::Mode, false>
> Eigen::operator*(const Eigen::MatrixBase<OtherDerived>&, const
> Eigen::SelfAdjointView<MatrixType, Mode>&) [with OtherDerived =
> Eigen::Transpose<Eigen::Matrix<double, -0x00000000000000001, 1, 0,
> -0x00000000000000001, 1> >, MatrixType = Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001, 0, -0x00000000000000001,
> -0x00000000000000001>, unsigned int UpLo = 1u]’:
> benchmark.cc:33:   instantiated from here
> /tmp/eigen/Eigen/src/Core/SelfAdjointView.h:124: error: return type
> ‘struct Eigen::SelfadjointProductMatrix<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, 1, 0, -0x00000000000000001, 1> >, 0, true,
> Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001, 0,
> -0x00000000000000001, -0x00000000000000001>, 17, false>’ is incomplete
> /tmp/eigen/Eigen/src/Core/SelfAdjointView.h:128: error: invalid use of
> incomplete type ‘struct
> Eigen::SelfadjointProductMatrix<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, 1, 0, -0x00000000000000001, 1> >, 0, true,
> Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001, 0,
> -0x00000000000000001, -0x00000000000000001>, 17, false>’
> /tmp/eigen/Eigen/src/Core/SelfAdjointView.h:59: error: declaration of
> ‘struct Eigen::SelfadjointProductMatrix<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, 1, 0, -0x00000000000000001, 1> >, 0, true,
> Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001, 0,
> -0x00000000000000001, -0x00000000000000001>, 17, false>’
>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/