<div dir="ltr"><div style="font-size:12.800000190734863px">I figured out the following. I hope it is internally consistent and would</div><div style="font-size:12.800000190734863px">not spoil for more complicated situations.</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">typedef Matrix<CppAD::AD<double>, Dynamic, Dynamic> MatrixXdAD;</div><div style="font-size:12.800000190734863px">namespace {</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>using CppAD::AD;</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>class FG_eval {</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>public:</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">               </span>typedef CPPAD_TESTVECTOR( AD<double> ) ADvector;</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">                </span>void operator()(ADvector& fg, const ADvector& x)</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>{</div><span class="gmail-im" style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>  AD<double> x1 = x[0];</span><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>  MatrixXdAD m(2,2);</div><span class="gmail-im" style="font-size:12.800000190734863px"><div><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>  m(0,0)=x1*x1;</div><div><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>  m(0,1)= x1;</div><div><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">                </span>  m(1,0)= 1.0;</div><div><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">               </span>  m(1,1)= x1+x1*x1-1.0;  </div></span><div style="font-size:12.800000190734863px"><div>          EigenSolver<MatrixXdAD> es(m);</div><div>          AD<double> y1=es.eigenvalues().real()[0];</div><div>          AD<double> y2=es.eigenvalues().real()[1];</div></div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>  // f(x)</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>  fg[0] = y1+y2;</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>   //</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">               </span>  return;</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>}</div><div style="font-size:12.800000190734863px"><span class="gmail-m_1958629233887069161gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>};</div><div style="font-size:12.800000190734863px">}</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">Regards,</div><div style="font-size:12.800000190734863px">Jyotiranjan</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 21, 2017 at 6:10 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"><div><div><div><div>Dear All,<br><br></div>I am trying to use CppAD along with Ipopt. However, my function<br></div>depends on eigenvalues and for that I am trying to use Eigen.<br><br>A snippet of the code for a simple case is as follows:<br><br><b><span style="font-family:monospace,monospace">          AD<double> x1 = x[0];  <br>          MatrixXd m(2,2);<br>          m(0,0)=x1*x1;<br>          m(0,1)= x1;<br>          m(1,0)= 1.0;<br>          m(1,1)= x1+x1*x1-1.0;<br>          EigenSolver<MatrixXd> es(m);<br>          AD<double> y=es.eigenvalues();<br>          // f(x)<br>          fg[0] = y[0]+y[1];  </span></b><br><br></div>I get following error.<br><b><span style="font-family:monospace,monospace"><br>error: cannot convert ‘CppAD::AD<double>’ to ‘Eigen::DenseCoeffsBase<Eigen:</span></b><b><span style="font-family:monospace,monospace"><wbr>:Matrix<double, -1, -1>, 1>::Scalar {aka double}’ in assignment<br><br>myTest.cpp:31:36: error: conversion from ‘const EigenvalueType {aka const Eigen::Matrix<std::complex<<wbr>double>, -1, 1>}’ to non-scalar type ‘CppAD::AD<double>’ requested<br>       AD<double>  y=es.eigenvalues();<br>                              <wbr>      ^<br>myTest.cpp:33:15: error: no match for call to ‘(CppAD::AD<double>) (int)’<br>    fg[0] = y(0)+y(1);<br><br><br></span></b></div><div><span style="font-family:monospace,monospace"><font face="arial,helvetica,sans-serif">Can anyone help?<br><br></font></span></div><div><span style="font-family:monospace,monospace"><font face="arial,helvetica,sans-serif">Regards,<br></font></span></div><b><span style="font-family:monospace,monospace"></span></b></div>
</blockquote></div><br>
</div></div>