Dear All,
in my Quest in using Eigen for own types, I realized, that
Eigen::AutoDiff should posses the same difficulties.
Sadly, I can't get even a simple case working.
#include <complex>
#include <Eigen/Dense>
#include <unsupported/Eigen/AutoDiff>
typedef Eigen::AutoDiffScalar<Eigen::Vector2cd> TpFloat;
typedef Eigen::AutoDiffScalar<Eigen::Vector2d> TpRFloat;
int main( const int argc, const char *argv[] )
{
TpRFloat x(3.0) ; // o.k.
TpFloat z; // not o.k.
return 0;
}
Eigen::AutoDiffScalar doesn't compile for complex types. Since the type
definitions are within nested traits,
I couldn't spot a solution immediately.
As note, the doc may clarify, that "the vector type used to
store/represent the derivatives",
means first-order derivatives, or gradients. I was first confused by
assuming it would represent a Taylor
expansion.
Best regards,
Peter
__________________
$ g++ -std=c++11 -DNDEBUG -O2 TestAutoDiff.C -I $HOME/Eigen/eigen -o
DiffPC 2>&1 | tee Err.txt | more
In file included from
/home/peter/Eigen/eigen/unsupported/Eigen/AutoDiff:32:0,
from TestAutoDiff.C:5:
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:
In instantiation of 'struct
Eigen::internal::auto_diff_special_op<Eigen::Matrix<std::complex<double>, 2,
1>, true>':
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:67:7:
required from 'class
Eigen::AutoDiffScalar<Eigen::Matrix<std::complex<double>, 2, 1> >'
TestAutoDiff.C:18:10: required from here
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:424:3:
error: no type named 'Type' in 'class
Eigen::CwiseUnaryOp<Eigen::internal::bind2nd_op<Eigen::internal::scalar_product_op<std::comp
lex<double>, double> >, Eigen::Matrix<std::complex<double>, 2, 1> >'
operator*(const Real& other) const
^
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:432:3:
error: no type named 'DerType' in 'class
Eigen::CwiseUnaryOp<Eigen::internal::bind1st_op<Eigen::internal::scalar_product_op<double
, std::complex<double> > >, Eigen::Matrix<std::complex<double>, 2, 1> >'
operator*(const Real& other, const AutoDiffScalar<_DerType>& a)
^
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:
In instantiation of 'class
Eigen::AutoDiffScalar<Eigen::Matrix<std::complex<double>, 2, 1> >':
TestAutoDiff.C:18:10: required from here
/home/peter/Eigen/eigen/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:81:25:
error: no members matching
'Eigen::AutoDiffScalar<Eigen::Matrix<std::complex<double>, 2, 1> >::Base
{aka Eigen::internal::auto_dif
f_special_op<Eigen::Matrix<std::complex<double>, 2, 1>,
true>}::operator*' in
'Eigen::AutoDiffScalar<Eigen::Matrix<std::complex<double>, 2, 1> >::Base
{aka struct Eigen::internal::auto_diff_special_op<Eigen::M
atrix<std::complex<double>, 2, 1>, true>}'
using Base::operator*;
^