Re: [eigen] problem with selfadjointView

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


indeed, this is not implemented yet because use cases are pretty
uncommon. I think that supporting a new kind of product requires about
one full day of work (to cover all possibilities, to add unit tests,
etc.) but Eigen is developed on our free time....

gael

On Tue, Aug 31, 2010 at 5:44 AM, Ben Goodrich <bgokgm@xxxxxxxxxxxxxx> wrote:
> Hi,
>
> As far as I can tell, multiplying a selfadjointView by another
> selfadjointView is not implemented (and similarly for triangularView
> by triangularView, triangularView by selfadjointView, etc.) Is this by
> design?
>
> Thanks,
> Ben
>
> goodrich@X41Laptop:/tmp$ cat test.cc
> #include "/tmp/eigen/Eigen/Eigen"
> #include <iostream>
> using namespace Eigen;
>
> int main() {
>        MatrixXd A(5,5);
>        A.setRandom();
>        A = A * A.transpose();
>        A = A.selfadjointView<Lower>() * A.transpose().selfadjointView<Upper>();
>        std::cout << A << std::endl;
>        return 0;
> }
>
> goodrich@X41Laptop:/tmp$ g++-4.5 -O2 -msse2 -DDEBUG -Wall test.cc -o test..o
> test.cc: In function ‘int main()’:
> test.cc:9:72: error: no match for ‘operator*’ in
> ‘((Eigen::MatrixBase<Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001> >*)(&
> A))->Eigen::MatrixBase<Derived>::selfadjointView [with unsigned int
> UpLo = 1u, Derived = Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001>]() *
> ((Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> >
>>*)(&((Eigen::DenseBase<Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001> >*)(& A))->Eigen::DenseBase<Derived>::transpose
> [with Derived = Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001>]()))->Eigen::MatrixBase<Derived>::selfadjointView
> [with unsigned int UpLo = 2u, Derived =
> Eigen::Transpose<Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001> >]()’
> /tmp/eigen/Eigen/src/Core/../plugins/CommonCwiseUnaryOps.h:95:1: note:
> candidates are: const
> Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple2_op<double,
> std::complex<double> >, Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001> > Eigen::operator*(const std::complex<double>&,
> const Eigen::MatrixBase<Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001> >::StorageBaseType&)
> /tmp/eigen/Eigen/src/Core/../plugins/CommonCwiseUnaryOps.h:91:1: note:
>                const Eigen::MatrixBase<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001>
>>::ScalarMultipleReturnType Eigen::operator*(const
> Eigen::MatrixBase<Eigen::Matrix<double, -0x00000000000000001,
> -0x00000000000000001, 0, -0x00000000000000001, -0x00000000000000001>
>>::Scalar&, const Eigen::MatrixBase<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> >::StorageBaseType&)
> /tmp/eigen/Eigen/src/Core/../plugins/CommonCwiseUnaryOps.h:95:1: note:
>                const
> Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple2_op<double,
> std::complex<double> >, Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> > > Eigen::operator*(const
> std::complex<double>&, const
> Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> > >::StorageBaseType&)
> /tmp/eigen/Eigen/src/Core/../plugins/CommonCwiseUnaryOps.h:91:1: note:
>                const
> Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> >
>>::ScalarMultipleReturnType Eigen::operator*(const
> Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001, 0, -0x00000000000000001,
> -0x00000000000000001> > >::Scalar&, const
> Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<double,
> -0x00000000000000001, -0x00000000000000001> > >::StorageBaseType&)
>
>
>



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