Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00034 #include <acado/utils/acado_utils.hpp>
00035 #include <acado/user_interaction/user_interaction.hpp>
00036 #include <acado/symbolic_expression/symbolic_expression.hpp>
00037 #include <acado/function/function.hpp>
00038 
00039 using namespace std;
00040 
00041 USING_NAMESPACE_ACADO
00042 
00043 
00044 void my_function( double *x_, double *f, void *user_data ){
00045 
00046 
00047     double          x =  x_[ 1];    
00048     double          y =  x_[ 2];    
00049 
00050     f[0] = x*x + pow(y,3);
00051 }
00052 
00053 int main( )
00054 {
00055         DifferentialState a, b;
00056         TIME t;
00057 
00058         CFunction myFunction(1, my_function);
00059 
00060         IntermediateState x(3);
00061 
00062         return 0;
00063 
00064         x(0) = t;
00065         x(1) = a;
00066         x(2) = b;
00067 
00068         Function f;
00069         f << myFunction(x);
00070 
00071         
00072         
00073         int x_index, y_index;
00074 
00075         x_index = f.index(VT_DIFFERENTIAL_STATE, 0);
00076         y_index = f.index(VT_DIFFERENTIAL_STATE, 1);
00077 
00078         double *xx = new double[f.getNumberOfVariables() + 1];
00079         double *seed = new double[f.getNumberOfVariables() + 1];
00080         double *ff = new double[f.getDim()];
00081         double *df = new double[f.getDim()];
00082 
00083         xx[x_index] = 1.0;
00084         xx[y_index] = 1.0;
00085 
00086         seed[x_index] = 0.5;
00087         seed[y_index] = 0.5;
00088 
00089         
00090         
00091         f.evaluate(0, xx, ff);
00092         f.AD_forward(0, seed, df);
00093 
00094         
00095         
00096         cout << scientific
00097                  << "     x = " << xx[x_index] << endl
00098                  << "     y = " << xx[y_index] << endl
00099                  << "seed_x = " << seed[x_index] << endl
00100                  << "seed_y = " << seed[y_index] << endl
00101                  << "     f = " << ff[0] << endl
00102                  << "    df = " << df[0] << endl;
00103 
00104         delete[] xx;
00105         delete[] seed;
00106         delete[] ff;
00107         delete[] df;
00108 
00109         return 0;
00110 }
00111 
00112 
00113