source: trunk/test_more/zdouble.cpp @ 3788

Last change on this file since 3788 was 3788, checked in by bradbell, 4 years ago

merge to branch: trunk
from repository: https://github.com/coin-or/CppAD
start hash code: c4559d5e01e1b0f09943490dd84449557eced25d
end hash code: 431e0a227dbfe6172d265d9d79a2b5b258c5bc18

commit 431e0a227dbfe6172d265d9d79a2b5b258c5bc18
Author: Brad Bell <bradbell@…>
Date: Tue Feb 9 07:41:29 2016 -0700

  1. Change package.sh to automatically update version on (master branch only).
  2. Change version.sh copy to check and change.

commit a14455414810cfe3c3e4bca90090defc2528a353
Author: Brad Bell <bradbell@…>
Date: Tue Feb 9 06:19:54 2016 -0700

Change check_verbatim to check_srcfile
because all but one of the verbatim commands were changed to srcfile commands.


check_include_omh.sh: old check that file names did not change case (for cygwin development).

commit 4ce45b796b57629332ab46d8ae6df94e0a1ed998
Author: Brad Bell <bradbell@…>
Date: Tue Feb 9 06:04:57 2016 -0700

batch_edit.sh to change $verbatim and $codep to $srcfile and $srccode.


det_by_minor.c: remove some invisible white space.

commit 56553b88c9623c30d2222425a9640b95ce4c8281
Author: Brad Bell <bradbell@…>
Date: Mon Feb 8 18:01:49 2016 -0700

check_jenkins.sh: jenkins.sh no longer takes an argument.
jenkins.sh: fix name of script in error message.

commit 3b8a208cfc7e8ef3c928c17eb291aa3b90ff0050
Author: Brad Bell <bradbell@…>
Date: Mon Feb 8 07:57:02 2016 -0700

new_release.sh: track branches in comments, back to master at OK end, first check of response.

commit 442b7cbc45c022776e8257d3c3404dccdd06c420
Author: Brad Bell <bradbell@…>
Date: Mon Feb 8 06:01:11 2016 -0700

  1. Advance to release 20160000.1.
  2. Check using master version of new_release.sh.
  3. Make sure auto-tools version up to date.
  4. Ask user if doing further testing before commiting new release.

commit f7bdd1f48e72feb05d604da63914022809f45c28
Author: Brad Bell <bradbell@…>
Date: Sun Feb 7 07:59:41 2016 -0700

Add shared library version number to cppad_lib; i.e., cppad_lib.yyyy.mmdd.rel

commit a4c716552e3ad05b337aea58b643c9ad1cbcd4ac
Author: Brad Bell <bradbell@…>
Date: Sun Feb 7 05:25:39 2016 -0700

Make cppad_lib libarary conditional on colpack_prefix being specified.

commit 5e8890eb8de8b0cde146a6ed59c391d7c355ff24
Author: Brad Bell <bradbell@…>
Date: Tue Jan 26 10:49:37 2016 -0700

vector.hpp: fix The -> This.

commit e4e5442b069d7b00e197c31616da32eee20460b3
Merge: c4559d5 ed28b89
Author: Brad Bell <bradbell@…>
Date: Tue Jan 26 09:47:58 2016 -0700

Merge pull request #14 from barak/master


fix spelling in description of cppad_profile_flag on cmake command line

commit ed28b899c9fedab52a578aa7dd73818638081fe6
Author: Barak A. Pearlmutter <barak+git@…>
Date: Tue Jan 26 16:24:32 2016 +0000

typo

File size: 2.9 KB
Line 
1// $Id$
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 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/*
14$begin zdouble.cpp$$
15$spell
16        zdouble
17$$
18
19$section zdouble: Example and Test$$
20
21$code
22$srcfile%test_more/zdouble.cpp%0%// BEGIN C++%// END C++%1%$$
23$$
24
25$end
26*/
27// BEGIN C++
28# include <cppad/cppad.hpp>
29
30namespace {
31        template <class Base> bool test(bool is_double)
32        {       bool ok = true;
33                Base eps = 10. * std::numeric_limits<double>::epsilon();
34
35                typedef CppAD::AD<Base>   a1type;
36                typedef CppAD::AD<a1type> a2type;
37
38                // value during taping
39                size_t n = 2;
40                CPPAD_TESTVECTOR(Base) x(n);
41                x[0] = 0.0;
42                x[1] = 0.0;
43
44                // declare independent variable
45                CPPAD_TESTVECTOR(a2type) a2x(n);
46                for (size_t j = 0; j < n; j++)
47                        a2x[j] = a2type( a1type(x[j]) );
48                Independent(a2x);
49
50                // zero and one as a2type values
51                a2type a2zero = a2type(0.0);
52                a2type a2one  = a2type(1.0);
53
54                // h(x) = x[0] / x[1] if x[1] > x[0] else 1.0
55                a2type h_x = CondExpGt(a2x[1], a2x[0], a2x[0] / a2x[1], a2one);
56
57                // f(x) = h(x) if x[0] > 0.0 else 0.0
58                //      = x[0] / x[1] if x[1] > x[0]  and x[0] > 0.0
59                //      = 1.0         if x[0] >= x[1] and x[0] > 0.0
60                //      = 0.0         if x[0] <= 0.0
61                a2type f_x = CondExpGt(a2x[0], a2zero, h_x, a2one);
62
63                // define the function f(x)
64                size_t m = 1;
65                CPPAD_TESTVECTOR(a2type) a2y(m);
66                a2y[0] = f_x;
67                CppAD::ADFun<a1type> af1;
68                af1.Dependent(a2x, a2y);
69
70                // Define function g(x) = gradient of f(x)
71                CPPAD_TESTVECTOR(a1type) a1x(n), a1z(n), a1w(m);
72                for (size_t j = 0; j < n; j++)
73                        a1x[j] = a1type(x[j]);
74                a1w[0] = a1type(1.0);
75                Independent(a1x);
76                af1.Forward(0, a1x);
77                a1z = af1.Reverse(1, a1w);
78                CppAD::ADFun<Base> g;
79                g.Dependent(a1x, a1z);
80
81                // check result for a case where f(x) = 0.0;
82                CPPAD_TESTVECTOR(Base) z(2);
83                x[0] = 0.0;
84                x[1] = 0.0;
85                z    = g.Forward(0, x);
86                ok &= z[0] == 0.0;
87                ok &= z[1] == 0.0;
88
89                // check result for a case where f(x) = 1.0;
90                x[0] = 1.0;
91                x[1] = 0.5;
92                z    = g.Forward(0, x);
93                ok &= z[0] == 0.0;
94                ok &= z[1] == 0.0;
95
96                // check result for a case where f(x) = x[0] / x[1];
97                x[0] = 1.0;
98                x[1] = 2.0;
99                z    = g.Forward(0, x);
100                ok &= CppAD::NearEqual(z[0], 1.0/x[1], eps, eps);
101                ok &= CppAD::NearEqual(z[1], - x[0]/(x[1]*x[1]), eps, eps);
102
103                return ok;
104        }
105}
106
107bool zdouble(void)
108{       bool ok = true;
109        using CppAD::AD;
110        using CppAD::NearEqual;
111        using CppAD::zdouble;
112        //
113        bool is_double = false;
114        ok &= test<zdouble>(is_double);
115        //
116        is_double = true;
117        ok &= test<double>(is_double);
118        //
119        return ok;
120}
121
122// END C++
Note: See TracBrowser for help on using the repository browser.