source: trunk/test_more/vec_unary.cpp @ 1627

Last change on this file since 1627 was 1370, checked in by bradbell, 11 years ago

trunk: Fix svn_add_id.sh and use it set Id property for some missed files.

  • Property svn:keywords set to Id
File size: 2.1 KB
Line 
1/* $Id: vec_unary.cpp 1370 2009-05-31 05:31:50Z bradbell $ */
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-07 Bradley M. Bell
4
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Common 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 VecADelem with unary operators
15*/
16
17# include <cppad/cppad.hpp>
18
19
20bool VecUnary(void)
21{       
22        using namespace CppAD;
23        using CppAD::abs;
24        using CppAD::sin;
25        using CppAD::atan;
26        using CppAD::cos;
27        using CppAD::exp;
28        using CppAD::log;
29        using CppAD::sqrt;
30
31        bool ok  = true;
32        size_t n = 8;
33        size_t i;
34
35        CPPAD_TEST_VECTOR< AD<double> > X(n);
36        VecAD<double>             Y(n);
37        CPPAD_TEST_VECTOR< AD<double> > Z(n);
38
39
40        for(i = 0; i < n; i++)
41                X[i] = int(i);  // some compilers require the int here
42        Independent(X);
43
44        AD<double> j;
45
46        j    = 0.;
47        Y[j] = X[0]; 
48        Z[0] = -Y[j];
49
50        j    = 1.;
51        Y[j] = X[1]; 
52        Z[1] = sin( Y[j] );
53
54        j    = 2.;
55        Y[j] = X[2]; 
56        Z[2] = abs( Y[j] );
57
58        j    = 3.;
59        Y[j] = X[3]; 
60        Z[3] = atan( Y[j] );
61
62        j    = 4.;
63        Y[j] = X[4]; 
64        Z[4] = cos( Y[j] );
65
66        j    = 5.;
67        Y[j] = X[5]; 
68        Z[5] = exp( Y[j] );
69
70        j    = 6.;
71        Y[j] = X[6]; 
72        Z[6] = log( Y[j] );
73
74        j    = 7.;
75        Y[j] = X[7]; 
76        Z[7] = sqrt( Y[j] );
77
78       
79        ADFun<double> f(X, Z);
80        CPPAD_TEST_VECTOR<double> x(n);
81        CPPAD_TEST_VECTOR<double> z(n);
82
83        for(i = 0; i < n; i++)
84                x[i] = 2. / double(i + 1);
85        x[7] = abs( x[7] );
86
87        z    = f.Forward(0, x);
88
89        ok  &= NearEqual(z[0],      - x[0],  1e-10, 1e-10);
90        ok  &= NearEqual(z[1], sin( x[1] ),  1e-10, 1e-10);
91        ok  &= NearEqual(z[2], abs( x[2] ),  1e-10, 1e-10);
92        ok  &= NearEqual(z[3], atan(x[3] ),  1e-10, 1e-10);
93        ok  &= NearEqual(z[4], cos( x[4] ),  1e-10, 1e-10);
94        ok  &= NearEqual(z[5], exp( x[5] ),  1e-10, 1e-10);
95        ok  &= NearEqual(z[6], log( x[6] ),  1e-10, 1e-10);
96        ok  &= NearEqual(z[7], sqrt(x[7] ),  1e-10, 1e-10);
97
98        return ok;
99}
Note: See TracBrowser for help on using the repository browser.