Codebase list cppad / debian/2017.00.00.8-1 doc / mul.cpp.xml
debian/2017.00.00.8-1

Tree @debian/2017.00.00.8-1 (Download .tar.gz)

mul.cpp.xml @debian/2017.00.00.8-1raw · history · blame

<?xml version='1.0'?>
<html xmlns='http://www.w3.org/1999/xhtml'
      xmlns:math='http://www.w3.org/1998/Math/MathML'
>
<head>
<title>AD Binary Multiplication: Example and Test</title>
<meta http-equiv='Content-Type' content='text/html' charset='utf-8'/>
<meta name="description" id="description" content="AD Binary Multiplication: Example and Test"/>
<meta name="keywords" id="keywords" content=" ad binary multiplication: example test * multiply times "/>
<style type='text/css'>
body { color : black }
body { background-color : white }
A:link { color : blue }
A:visited { color : purple }
A:active { color : purple }
</style>
<script type='text/javascript' language='JavaScript' src='_mul.cpp_xml.js'>
</script>
</head>
<body>
<table><tr>
<td>
<a href="http://www.coin-or.org/CppAD/" target="_top"><img border="0" src="_image.gif"/></a>
</td>
<td><a href="sub.cpp.xml" target="_top">Prev</a>
</td><td><a href="div.cpp.xml" target="_top">Next</a>
</td><td>
<select onchange='choose_across0(this)'>
<option>Index-&gt;</option>
<option>contents</option>
<option>reference</option>
<option>index</option>
<option>search</option>
<option>external</option>
</select>
</td>
<td>
<select onchange='choose_up0(this)'>
<option>Up-&gt;</option>
<option>CppAD</option>
<option>AD</option>
<option>ADValued</option>
<option>Arithmetic</option>
<option>ad_binary</option>
<option>mul.cpp</option>
</select>
</td>
<td>
<select onchange='choose_down3(this)'>
<option>ADValued-&gt;</option>
<option>Arithmetic</option>
<option>unary_standard_math</option>
<option>binary_math</option>
<option>CondExp</option>
<option>Discrete</option>
<option>numeric_limits</option>
<option>atomic</option>
</select>
</td>
<td>
<select onchange='choose_down2(this)'>
<option>Arithmetic-&gt;</option>
<option>UnaryPlus</option>
<option>UnaryMinus</option>
<option>ad_binary</option>
<option>compute_assign</option>
</select>
</td>
<td>
<select onchange='choose_down1(this)'>
<option>ad_binary-&gt;</option>
<option>add.cpp</option>
<option>sub.cpp</option>
<option>mul.cpp</option>
<option>div.cpp</option>
</select>
</td>
<td>mul.cpp</td>
<td>Headings</td>
</tr></table><br/>
<center><b><big><big>AD Binary Multiplication: Example and Test</big></big></b></center>
<code><font color="blue"><pre><tt><span style="font-weight: bold"><span style="color: #000080"># include</span></span> <span style="color: #FF0000">&lt;cppad/cppad.hpp&gt;</span>

<span style="color: #009900">bool</span> <span style="font-weight: bold"><span style="color: #000000">Mul</span></span><span style="color: #990000">(</span><span style="color: #009900">void</span><span style="color: #990000">)</span>
<span style="color: #FF0000">{</span>     <span style="color: #009900">bool</span> ok <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #0000FF">true</span></span><span style="color: #990000">;</span>
     <span style="font-weight: bold"><span style="color: #0000FF">using</span></span> CppAD<span style="color: #990000">::</span>AD<span style="color: #990000">;</span>
     <span style="font-weight: bold"><span style="color: #0000FF">using</span></span> CppAD<span style="color: #990000">::</span>NearEqual<span style="color: #990000">;</span>

     <span style="font-style: italic"><span style="color: #9A1900">// domain space vector</span></span>
     <span style="color: #008080">size_t</span> n  <span style="color: #990000">=</span> <span style="color: #993399">1</span><span style="color: #990000">;</span>
     <span style="color: #009900">double</span> x0 <span style="color: #990000">=</span> <span style="color: #990000">.</span><span style="color: #993399">5</span><span style="color: #990000">;</span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span>AD<span style="color: #990000">&lt;</span><span style="color: #009900">double</span><span style="color: #990000">&gt;)</span> <span style="font-weight: bold"><span style="color: #000000">x</span></span><span style="color: #990000">(</span>n<span style="color: #990000">);</span>
     x<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span>      <span style="color: #990000">=</span> x0<span style="color: #990000">;</span>

     <span style="font-style: italic"><span style="color: #9A1900">// declare independent variables and start tape recording</span></span>
     CppAD<span style="color: #990000">::</span><span style="font-weight: bold"><span style="color: #000000">Independent</span></span><span style="color: #990000">(</span>x<span style="color: #990000">);</span>

     <span style="font-style: italic"><span style="color: #9A1900">// some binary multiplication operations</span></span>
     <span style="color: #008080">AD&lt;double&gt;</span> a <span style="color: #990000">=</span> x<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span> <span style="color: #990000">*</span> <span style="color: #993399">1</span><span style="color: #990000">.;</span> <span style="font-style: italic"><span style="color: #9A1900">// AD&lt;double&gt; * double</span></span>
     <span style="color: #008080">AD&lt;double&gt;</span> b <span style="color: #990000">=</span> a    <span style="color: #990000">*</span> <span style="color: #993399">2</span><span style="color: #990000">;</span>  <span style="font-style: italic"><span style="color: #9A1900">// AD&lt;double&gt; * int</span></span>
     <span style="color: #008080">AD&lt;double&gt;</span> c <span style="color: #990000">=</span> <span style="color: #993399">3</span><span style="color: #990000">.</span>   <span style="color: #990000">*</span> b<span style="color: #990000">;</span>  <span style="font-style: italic"><span style="color: #9A1900">// double     * AD&lt;double&gt;</span></span>
     <span style="color: #008080">AD&lt;double&gt;</span> d <span style="color: #990000">=</span> <span style="color: #993399">4</span>    <span style="color: #990000">*</span> c<span style="color: #990000">;</span>  <span style="font-style: italic"><span style="color: #9A1900">// int        * AD&lt;double&gt;</span></span>

     <span style="font-style: italic"><span style="color: #9A1900">// range space vector</span></span>
     <span style="color: #008080">size_t</span> m <span style="color: #990000">=</span> <span style="color: #993399">1</span><span style="color: #990000">;</span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span>AD<span style="color: #990000">&lt;</span><span style="color: #009900">double</span><span style="color: #990000">&gt;)</span> <span style="font-weight: bold"><span style="color: #000000">y</span></span><span style="color: #990000">(</span>m<span style="color: #990000">);</span>
     y<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span> <span style="color: #990000">=</span> x<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span> <span style="color: #990000">*</span> d<span style="color: #990000">;</span>          <span style="font-style: italic"><span style="color: #9A1900">// AD&lt;double&gt; * AD&lt;double&gt;</span></span>

     <span style="font-style: italic"><span style="color: #9A1900">// create f: x -&gt; y and stop tape recording</span></span>
     CppAD<span style="color: #990000">::</span><span style="color: #008080">ADFun&lt;double&gt;</span> <span style="font-weight: bold"><span style="color: #000000">f</span></span><span style="color: #990000">(</span>x<span style="color: #990000">,</span> y<span style="color: #990000">);</span>

     <span style="font-style: italic"><span style="color: #9A1900">// check value</span></span>
     ok <span style="color: #990000">&amp;=</span> <span style="font-weight: bold"><span style="color: #000000">NearEqual</span></span><span style="color: #990000">(</span>y<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span> <span style="color: #990000">,</span> x0<span style="color: #990000">*(</span><span style="color: #993399">4</span><span style="color: #990000">.*</span><span style="color: #993399">3</span><span style="color: #990000">.*</span><span style="color: #993399">2</span><span style="color: #990000">.*</span><span style="color: #993399">1</span><span style="color: #990000">.)*</span>x0<span style="color: #990000">,</span>  <span style="color: #993399">1e-10</span> <span style="color: #990000">,</span> <span style="color: #993399">1e-10</span><span style="color: #990000">);</span>

     <span style="font-style: italic"><span style="color: #9A1900">// forward computation of partials w.r.t. x[0]</span></span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span><span style="color: #009900">double</span><span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">dx</span></span><span style="color: #990000">(</span>n<span style="color: #990000">);</span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span><span style="color: #009900">double</span><span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">dy</span></span><span style="color: #990000">(</span>m<span style="color: #990000">);</span>
     dx<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span> <span style="color: #990000">=</span> <span style="color: #993399">1</span><span style="color: #990000">.;</span>
     dy    <span style="color: #990000">=</span> f<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">Forward</span></span><span style="color: #990000">(</span><span style="color: #993399">1</span><span style="color: #990000">,</span> dx<span style="color: #990000">);</span>
     ok   <span style="color: #990000">&amp;=</span> <span style="font-weight: bold"><span style="color: #000000">NearEqual</span></span><span style="color: #990000">(</span>dy<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">],</span> <span style="color: #990000">(</span><span style="color: #993399">4</span><span style="color: #990000">.*</span><span style="color: #993399">3</span><span style="color: #990000">.*</span><span style="color: #993399">2</span><span style="color: #990000">.*</span><span style="color: #993399">1</span><span style="color: #990000">.)*</span><span style="color: #993399">2</span><span style="color: #990000">.*</span>x0<span style="color: #990000">,</span> <span style="color: #993399">1e-10</span> <span style="color: #990000">,</span> <span style="color: #993399">1e-10</span><span style="color: #990000">);</span>

     <span style="font-style: italic"><span style="color: #9A1900">// reverse computation of derivative of y[0]</span></span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span><span style="color: #009900">double</span><span style="color: #990000">)</span>  <span style="font-weight: bold"><span style="color: #000000">w</span></span><span style="color: #990000">(</span>m<span style="color: #990000">);</span>
     <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span><span style="color: #009900">double</span><span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">dw</span></span><span style="color: #990000">(</span>n<span style="color: #990000">);</span>
     w<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">]</span>  <span style="color: #990000">=</span> <span style="color: #993399">1</span><span style="color: #990000">.;</span>
     dw    <span style="color: #990000">=</span> f<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">Reverse</span></span><span style="color: #990000">(</span><span style="color: #993399">1</span><span style="color: #990000">,</span> w<span style="color: #990000">);</span>
     ok   <span style="color: #990000">&amp;=</span> <span style="font-weight: bold"><span style="color: #000000">NearEqual</span></span><span style="color: #990000">(</span>dw<span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">],</span> <span style="color: #990000">(</span><span style="color: #993399">4</span><span style="color: #990000">.*</span><span style="color: #993399">3</span><span style="color: #990000">.*</span><span style="color: #993399">2</span><span style="color: #990000">.*</span><span style="color: #993399">1</span><span style="color: #990000">.)*</span><span style="color: #993399">2</span><span style="color: #990000">.*</span>x0<span style="color: #990000">,</span> <span style="color: #993399">1e-10</span> <span style="color: #990000">,</span> <span style="color: #993399">1e-10</span><span style="color: #990000">);</span>

     <span style="font-style: italic"><span style="color: #9A1900">// use a VecAD&lt;Base&gt;::reference object with multiplication</span></span>
     CppAD<span style="color: #990000">::</span><span style="color: #008080">VecAD&lt;double&gt;</span> <span style="font-weight: bold"><span style="color: #000000">v</span></span><span style="color: #990000">(</span><span style="color: #993399">1</span><span style="color: #990000">);</span>
     <span style="color: #008080">AD&lt;double&gt;</span> <span style="font-weight: bold"><span style="color: #000000">zero</span></span><span style="color: #990000">(</span><span style="color: #993399">0</span><span style="color: #990000">);</span>
     v<span style="color: #990000">[</span>zero<span style="color: #990000">]</span> <span style="color: #990000">=</span> c<span style="color: #990000">;</span>
     <span style="color: #008080">AD&lt;double&gt;</span> result <span style="color: #990000">=</span> <span style="color: #993399">4</span> <span style="color: #990000">*</span> v<span style="color: #990000">[</span>zero<span style="color: #990000">];</span>
     ok     <span style="color: #990000">&amp;=</span> <span style="color: #990000">(</span>result <span style="color: #990000">==</span> d<span style="color: #990000">);</span>

     <span style="font-weight: bold"><span style="color: #0000FF">return</span></span> ok<span style="color: #990000">;</span>
<span style="color: #FF0000">}</span>
</tt></pre>
</font></code>
<hr/>Input File: example/mul.cpp

</body>
</html>