Prev Next

Second Order Exponential Approximation

Syntax
# include "exp_2.hpp"
y = exp_2(x)

Purpose
This is a simple example algorithm that is used to demonstrate Algorithmic Differentiation (see exp_eps for a more complex example).

Mathematical Form
The exponential function can be defined by  \[
     \exp (x) = 1 + x^1 / 1 ! + x^2 / 2 ! + \cdots 
\] 
The second order approximation for the exponential function is  \[
{\rm exp\_2} (x) =  1 + x + x^2 / 2 
\] 


include
The include command in the syntax is relative to
     cppad-
yy-mm-dd/introduction/exp_apx
where cppad-yy-mm-dd is the distribution directory created during the beginning steps of the installation of CppAD.

x
The argument x has prototype
     const 
Type &x
(see Type below). It specifies the point at which to evaluate the approximation for the second order exponential approximation.

y
The result y has prototype
     
Type y
It is the value of the exponential function approximation defined above.

Type
If u and v are Type objects and i is an int:
Operation Result Type Description
Type(i) Type object with value equal to i
u = v Type new u (and result) is value of v
u * v Type result is value of  u * v
u / v Type result is value of  u / v
u + v Type result is value of  u + v

Contents
exp_2.hppexp_2: Implementation
exp_2.cppexp_2: Test
exp_2_for0exp_2: Operation Sequence and Zero Order Forward Mode
exp_2_for1exp_2: First Order Forward Mode
exp_2_rev1exp_2: First Order Reverse Mode
exp_2_for2exp_2: Second Order Forward Mode
exp_2_rev2exp_2: Second Order Reverse Mode
exp_2_cppadexp_2: CppAD Forward and Reverse Sweeps

Implementation
The file exp_2.hpp contains a C++ implementation of this function.

Test
The file exp_2.cpp contains a test of this implementation. It returns true for success and false for failure.

Exercises
  1. Suppose that we make the call
         double x = .1;
         double y = exp_2(x);
    What is the value assigned to v1, v2, ... ,v5 in exp_2.hpp ?
  2. Extend the routine exp_2.hpp to a routine exp_3.hpp that computes  \[
         1 + x^2 / 2 ! + x^3 / 3 !
    \] 
    Do this in a way that only assigns one value to each variable (as exp_2 does).
  3. Suppose that we make the call
         double x = .5;
         double y = exp_3(x);
    using exp_3 created in the previous problem. What is the value assigned to the new variables in exp_3 (variables that are in exp_3 and not in exp_2) ?

Input File: introduction/exp_apx/exp_2.hpp