[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