source: trunk/ADOL-C/examples/additional_examples/timing/sfunc_griewank.cpp @ 42

Last change on this file since 42 was 42, checked in by awalther, 10 years ago

set svn keywords property

  • Property svn:keywords set to Author Date Id Revision
File size: 4.7 KB
Line 
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File:     sfunc_griewank.cpp
4 Revision: $Id: sfunc_griewank.cpp 42 2009-07-15 18:37:17Z awalther $
5 Contents: function module containing  Griewanks function
6
7   Each << function module >> contains:
8         
9     (1) const char* const controlFileName
10     (2) int indepDim;
11     (3) void initProblemParameters( void )
12     (4) void initIndependents( double* indeps )
13     (5) double originalScalarFunction( double* indeps )
14     (6) double tapingScalarFunction( int tag, double* indeps )   
15 
16 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
17               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
18 
19 This file is part of ADOL-C. This software is provided as open source.
20 Any use, reproduction, or distribution of the software constitutes
21 recipient's acceptance of the terms of the accompanying license file.
22 
23---------------------------------------------------------------------------*/
24#define _SFUNC_GRIEWANK_C_
25
26
27/****************************************************************************/
28/*                                                                 INCLUDES */
29#include <adolc.h>
30
31#include <cmath>
32
33
34/****************************************************************************/
35/*                                                         GLOBAL VARIABLES */
36
37/*--------------------------------------------------------------------------*/
38/*                                                        Control file name */
39const char* controlFileName = "griewankexam.ctrl";
40
41/*--------------------------------------------------------------------------*/
42/*                                                               Dimensions */
43int indepDim;
44
45/*--------------------------------------------------------------------------*/
46/*                                       Other problem dependent parameters */
47const double D = 4000.0;
48
49
50/****************************************************************************/
51/*                                                  INIT PROBLEM PARAMETERS */
52void initProblemParameters( void ) {
53    fprintf(stdout,"GRIEWANKs FUNCTION (ADOL-C Example)\n\n");
54    if (indepDim <= 0) {
55        fprintf(stdout,"    number of independent variables = ? ");
56        fscanf(stdin,"%d",&indepDim);
57        fprintf(stdout,"\n");
58    }
59}
60
61
62/****************************************************************************/
63/*                                                        INITIALIZE INDEPs */
64void initIndependents( double* indeps ) {
65    int i;
66    for (i=0; i<indepDim; i++)
67        indeps[i] = 600.0*(i+1.0)/(2.0+i);
68}
69
70
71/****************************************************************************/
72/*                                                 ORIGINAL SCALAR FUNCTION */
73
74/*--------------------------------------------------------------------------*/
75/*                                                       Griewanks function */
76double griewank( int dim, double* indeps ) {
77    int i;
78    double Val1,
79    Val2,
80    tmp;
81
82    for (Val1 = 0.0, Val2 = 1.0, i = 0; i < dim; i++) {
83        tmp   = indeps[i]-100.0;
84        Val1 += tmp * tmp;
85        Val2 *= cos(tmp / sqrt((double) (i + 1)) );
86    }
87
88    return Val1 / D - Val2 + 1.0;
89}
90
91/*--------------------------------------------------------------------------*/
92/*                                                   The interface function */
93double originalScalarFunction( double* indeps ) {
94    return griewank(indepDim, indeps);
95}
96
97
98/****************************************************************************/
99/*                                                   TAPING SCALAR FUNCTION */
100
101/*--------------------------------------------------------------------------*/
102/*                                                active Griewnaks function */
103adouble activeGriewank( int dim, adouble* indeps ) {
104    int i;
105    adouble Val1,
106    Val2,
107    tmp;
108
109    for (Val1 = 0.0, Val2 = 1.0, i = 0; i < dim; i++) {
110        tmp   = indeps[i]-100.0;
111        Val1 += tmp * tmp;
112        Val2 *= cos(tmp / sqrt((double) (i + 1)) );
113    }
114
115    return Val1 / D - Val2 + 1.0;
116}
117
118/*--------------------------------------------------------------------------*/
119/*                                                   The interface function */
120double tapingScalarFunction( int tag, double* indeps ) {
121    int i;
122    trace_on(tag);
123    adouble* activeIndeps = new adouble[indepDim];
124    adouble* aIP = activeIndeps;
125    double*  iP  = indeps;
126    for (i=0; i<indepDim; i++)
127        *aIP++ <<= *iP++;
128    adouble ares = activeGriewank(indepDim, activeIndeps);
129    double res = 0;
130    ares >>= res;
131    trace_off();
132    return res;
133}
134
135#undef _SFUNC_GRIEWANK_C_
136
137
138
139
140
Note: See TracBrowser for help on using the repository browser.