[CppAD] Eigen value problem in CppAD with Eigen

Jyotiranjan Beuria jyotiranjan.beuria at gmail.com
Sun Aug 6 04:08:19 EDT 2017


I found a strange work around. If I change

Eigen::EigenSolver to  Eigen::SelfAdjointEigenSolver or
 Eigen::ComplexEigenSolver,

I get correct result. Do you have any clue if this has origin in CppAD or
Eigen.

On Sat, Aug 5, 2017 at 7:50 PM, Jyotiranjan Beuria <
jyotiranjan.beuria at gmail.com> wrote:

> I am trying to get derivatives of a function that depends on eigenvalues.
> It turns out that it prints only derivative wrt first element.
> The code is as follows.
>
> #include <cppad/cppad.hpp>
> #include <cppad/example/cppad_eigen.hpp>
> #include <Eigen/Eigenvalues>
>
> template <class T>
> Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
> GetEigenValues ( Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>&  m)
> {
>   Eigen::EigenSolver< Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> >
> es(m,false);
>   return es.eigenvalues().real();
> }
>
> int main() {
>    typedef double Scalar;
>    typedef CppAD::AD<Scalar> AD;
>    typedef CppAD::AD<Scalar> AD;
>    // independent variable vector
>    Eigen::Matrix<AD,Eigen::Dynamic,1> x(4);
>    CppAD::Independent(x);
>    // dependent variable vector
>    Eigen::Matrix<AD,Eigen::Dynamic,1> y(4);
>
>    Eigen::Matrix<AD,Eigen::Dynamic,Eigen::Dynamic> m(4,4);
>    m.setIdentity();
>    m(0,0)=x[0]*x[0];
>    m(1,1)=x[1]*x[0];
>    m(2,2)=x[2]*x[0];
>    m(3,3)=x[0]*x[3];
>    y=GetEigenValues(m);
>
>    CppAD::ADFun<Scalar> fun(x, y);
>    Eigen::Matrix<Scalar,Eigen::Dynamic,1> xx(4);
>    xx<<2.,1.,10.,4.;
>
>    Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> jac;
>    jac=fun.Jacobian(xx);
>
>    std::cout<<" Now the jacobian is: "<<std::endl;
>    std::cout<<jac<<std::endl;
> }
>
> Could anyone help me resolve this issue.
>



-- 
Jyotiranjan Beuria
Ph.D Student, HRI Allahabad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cppad/attachments/20170806/f08f4e26/attachment.html>


More information about the CppAD mailing list