[CppAD] Discrete AD functions and linear interpolation

Brad Bell bradbell at seanet.com
Sat Sep 15 08:26:33 EDT 2007


In an attempt to make the purpose of the discrete functions clearer, I 
have split the previous piecewise wise linear interpolation into two cases.

In the first case,
    http://www.coin-or.org/CppAD/Doc/interp_onetape.cpp.xml
discrete functions are used to avoid the need to retape when the 
argument values change.

In the second case,
    http://www.coin-or.org/CppAD/Doc/interp_retape.cpp.xml
discrete functions are not used and a new tape is recorded each time the 
argument values change.

Brad Bell wrote:
>
> The interval corresponding to an interpolation may depend on the value 
> of the independent variables. In this case, the the discrete AD 
> function macro
>     http://www.coin-or.org/CppAD/Doc/discrete.xml
> can be used to compute the interpolation so that one need not retape 
> the operation sequence for the new value of the independent variables 
> before taking derivatives.
>
> On the other hand, there may be other decision variables in the code 
> that cause the operation sequence to change (for different values of 
> the independent variables). For example, the operation sequence 
> corresponding to
>     http://www.coin-or.org/CppAD/Doc/exp_eps.hpp.xml
> depends on the value of x and epsilon; see the heading Comparisons in
>     http://www.coin-or.org/CppAD/Doc/exp_eps_for0.xml
>
> It is always simpler (but perhaps slower) to "retape" the operation 
> sequence for each value of the independent variables. Thus, I would 
> suggest that you start with this approach.
>
> P.S.
> I agree that global variables should be avoided. If you do end up 
> using a discrete function and need data attached to it, I suggest 
> using a C++ function object. The constructor for the function object 
> could contain the data. This would avoid any global variables. Perhaps 
> the example
>     http://www.coin-or.org/CppAD/Doc/piecewise.cpp.xml
> should be changed to use this approach ?
>
>
>
> On Thu, 13 Sep 2007, herve.martin.sc at libertysurf.fr wrote:
>
>> Hi,
>>
>> I would like to rewrite a big simulation code to use CppAD. However, 
>> I run into a problem with the discrete functions. My code uses a lot 
>> of lookup tables with linear/spline interpolation. So it seems to me 
>> that the natural choice in CppAD is to perform the linear 
>> interpolation with discrete functions declared with the 
>> CPPAD_DISCRETE_FUNCTION macro.
>>
>> The problem is that the interface of this function does not allow to 
>> pass additional data to compute the needed values, just a double 
>> argument. So for each set of data, a new set of functions has to be 
>> defined. More, in the example Piecewise.cpp, the lookup tables are 
>> global variables. But my tables are read at runtime in many files. 
>> How can I specify to CppAD which table to use in my code, so that the 
>> correct table is chosen during a sweep of the tape ? I absolutely 
>> want to avoid static / global variables to avoid reentrancy problems...
>>
>> I hope I was clear enough...
>> Thanks in advance for any help.
>>
>> Hervé Martin
>>
>>
>> ------------------------ ALICE C'EST ENCORE MIEUX AVEC CANAL+ LE 
>> BOUQUET ! ---------------
>> Découvrez vite l'offre exclusive ALICEBOX et CANAL+ LE BOUQUET, en 
>> cliquant ici http://alicebox.fr
>> Soumis à conditions.
>>
>>
>>
>> _______________________________________________
>> CppAD mailing list
>> CppAD at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/cppad
>>
> ------------------------------------------------------------------------
>
> _______________________________________________
> CppAD mailing list
> CppAD at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/cppad
>   



More information about the CppAD mailing list