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