<div dir="ltr">I found a strange work around. If I change <div><br><div><span style="font-size:12.800000190734863px">Eigen::EigenSolver</span> <span style="font-size:12.800000190734863px">to  </span>Eigen::SelfAdjointEigenSolver or  Eigen::ComplexEigenSolver,</div><div><br></div><div>I get correct result. Do you have any clue if this has origin in CppAD or Eigen.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 5, 2017 at 7:50 PM, Jyotiranjan Beuria <span dir="ltr"><<a href="mailto:jyotiranjan.beuria@gmail.com" target="_blank">jyotiranjan.beuria@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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.<wbr>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::<wbr>Dynamic,1> x(4);</div><div>   CppAD::Independent(x);  </div><div>   // dependent variable vector </div><div>   Eigen::Matrix<AD,Eigen::<wbr>Dynamic,1> y(4);</div><div><br></div><div>   Eigen::Matrix<AD,Eigen::<wbr>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::<wbr>Dynamic,1> xx(4);</div><div>   xx<<2.,1.,10.,4.;</div><div>   </div><div>   Eigen::Matrix<Scalar,Eigen::<wbr>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>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Jyotiranjan Beuria<br>Ph.D Student, HRI Allahabad<br></div>
</div>