source: trunk/test_more/add_zero.cpp @ 2506

Last change on this file since 2506 was 2506, checked in by bradbell, 8 years ago

Change Licenses: CPL-1.0 -> EPL-1.0, GPL-2.0->GPL-3.0

  • Property svn:keywords set to Id
File size: 1.8 KB
Line 
1/* $Id: add_zero.cpp 2506 2012-10-24 19:36:49Z bradbell $ */
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 Bradley M. Bell
4
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Eclipse Public License Version 1.0.
8
9A copy of this license is included in the COPYING file of this distribution.
10Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
11-------------------------------------------------------------------------- */
12
13/*
14Test the use of the special parameters zero and one with the multiply operator
15*/
16
17# include <cppad/cppad.hpp>
18
19typedef CppAD::AD<double>      ADdouble;
20typedef CppAD::AD< ADdouble > ADDdouble;
21
22bool AddZero(void)
23{       
24        using namespace CppAD;
25
26        bool ok = true;
27
28        size_t i;
29        for(i = 0; i < 2; i++)
30        {       // run through the cases x = 0, 1
31
32                size_t j;
33                for(j = 0; j < 2; j++)
34                {       // run through the cases y = 0, 1
35
36                        CPPAD_TESTVECTOR( ADdouble ) x(1);
37                        x[0] = double(i);
38                        Independent(x);
39
40                        CPPAD_TESTVECTOR( ADDdouble ) y(1);
41                        y[0] = ADDdouble(j);
42                        Independent(y);
43
44                        CPPAD_TESTVECTOR( ADDdouble ) z(2);
45                        z[0]  = x[0] + y[0];
46                        z[1]  = y[0] + x[0];
47                        z[1] += x[0];
48
49                        // f(y) = z = { x + y , y + x + x }
50                        ADFun< ADdouble > f(y, z);
51                        CPPAD_TESTVECTOR( ADdouble ) u( f.Domain() );
52                        CPPAD_TESTVECTOR( ADdouble ) v( f.Range() );
53
54                        // v = f(y)
55                        u[0] = ADdouble(j);
56                        v = f.Forward(0, u);
57
58                        // check value of f
59                        ok &= v[0] == x[0] + ADdouble(j);
60                        ok &= v[1] == ADdouble(j) + x[0] + x[0];
61
62                        // g(x) = f(y) = {x + y , y + x + x}
63                        ADFun<double> g(x, v);
64                        CPPAD_TESTVECTOR( double ) a( g.Domain() );
65                        CPPAD_TESTVECTOR( double ) b( g.Range() );
66
67                        // b = g'(x)
68                        a[0] = 1.;
69                        b = g.Forward(1, a);
70
71                        // check derivatives of g
72                        ok &= (b[0] == 1.);
73                        ok &= (b[1] == 2.);
74
75                }
76        }
77
78        return ok;
79}
Note: See TracBrowser for help on using the repository browser.