[CppAD] Eigen value problem in CppAD with Eigen

Jyotiranjan Beuria jyotiranjan.beuria at gmail.com
Sat Aug 5 10:20:24 EDT 2017


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cppad/attachments/20170805/c6839079/attachment.html>


More information about the CppAD mailing list