Changeset 1595


Ignore:
Timestamp:
Nov 28, 2009 1:44:35 PM (11 years ago)
Author:
bradbell
Message:

trunk: Fix bug in optimize.hpp when operating on VecAD objects.

optimize.cpp: new test that demonstrates the bug.
whats_new_09.omh: user's view of the changes.
optimize.hpp: fix the bug.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/cppad/local/optimize.hpp

    r1591 r1595  
    399399        {       // length of this VecAD
    400400                size_t length = play->GetVecInd(j);
    401                 if( connected[i] )
     401                if( vecad_connected[i] )
    402402                {       // Put this VecAD vector in new recording
    403403                        CPPAD_ASSERT_UNKNOWN(length < num_vecad_ind);
  • trunk/omh/whats_new_09.omh

    r1591 r1595  
    5959trying to read and understand the CppAD source code.)
    6060
     61$head 11-28$$
     62Fix bug in tape optimization with $cref/VecAD/$$ objects.
     63
    6164$head 11-27$$
    6265Remove duplicate expressions for the commutative binary operators; i.e.,
  • trunk/test_more/optimize.cpp

    r1591 r1595  
    147147                CPPAD_TEST_VECTOR< AD<double> > Y(m);
    148148
    149                 CppAD::VecAD<double> U(n);
    150                 CppAD::VecAD<double> V(m);
    151                 for(j = 0; j < n; j++)
    152                         U[j] = 0;
    153                 for(i = 0; i < m; i++)
    154                         V[i] = 0;
     149                CppAD::VecAD<double> U(m);
     150                CppAD::VecAD<double> V(n);
     151                for(i = 0; i < m; i++)
     152                        U[i] = 0;
     153                for(j = 0; j < n; j++)
     154                        V[j] = 0;
    155155       
    156156                // declare independent variables and start tape recording
    157157                CppAD::Independent(X);
    158158
    159                 // make U a variable
     159                // first vecad vector that is a variable
    160160                U[ X[0] ] = X[1];
    161161
    162                 // make V a variable
     162                // second vecad vector that is a variable
    163163                V[ X[0] ] = X[1];
    164164
    165                 // Y only depend on V (and not on U)
     165                // Make dependency for vecad vectors different that for
     166                // variables because original code used worng dependency info.
     167                // Y does not depend on the first variable in the tape; i.e.
     168                // the one corresponding to the BeginOp. So make it depend
     169                // on the first vecad vector in the tape.
    166170                for(i = 0; i < m; i++)
    167171                {       AD<double> I(i);
    168                         Y[i] = V[I];
     172                        Y[i] = U[I];
    169173                }
    170174       
Note: See TracChangeset for help on using the changeset viewer.