00001 /* 00002 * This file is part of ACADO Toolkit. 00003 * 00004 * ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization. 00005 * Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau, 00006 * Milan Vukov, Rien Quirynen, KU Leuven. 00007 * Developed within the Optimization in Engineering Center (OPTEC) 00008 * under supervision of Moritz Diehl. All rights reserved. 00009 * 00010 * ACADO Toolkit is free software; you can redistribute it and/or 00011 * modify it under the terms of the GNU Lesser General Public 00012 * License as published by the Free Software Foundation; either 00013 * version 3 of the License, or (at your option) any later version. 00014 * 00015 * ACADO Toolkit is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 * Lesser General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU Lesser General Public 00021 * License along with ACADO Toolkit; if not, write to the Free Software 00022 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 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 /* >>> start tutorial code >>> */ 00044 int main( ) 00045 { 00046 int i; 00047 00048 // DEFINE VALRIABLES: 00049 // --------------------------- 00050 DMatrix A(3,3); 00051 DVector b(3); 00052 DifferentialState x("", 3, 1); 00053 DifferentialState y; 00054 Function f[7]; 00055 00056 // DEFINE THE VECTOR AND MATRIX ENTRIES: 00057 // ------------------------------------- 00058 A.setZero() ; 00059 A(0,0) = 1.0; A(1,1) = 2.0; A(2,2) = 3.0; 00060 b(0) = 1.0; b(1) = 1.0; b(2) = 1.0; 00061 00062 00063 // DEFINE TEST FUNCTIONS: 00064 // ----------------------- 00065 f[0] << A*x + b; 00066 f[1] << y + euclidean_norm(A*x + b); 00067 f[2] << y*y; 00068 f[3] << square(y); 00069 f[4] << 5.0*log_sum_exp( x ); 00070 // f[5] << entropy( y ); 00071 f[6] << -sum_square( x ); 00072 00073 for (i = 0; i < 7; i++) 00074 { 00075 if (f[i].isConvex() == BT_TRUE) 00076 cout << "f[" << i << "] is convex" << endl; 00077 00078 else 00079 { 00080 if (f[i].isConcave() == BT_TRUE) 00081 cout << "f[" << i << "] is concave" << endl; 00082 else 00083 cout << "f[" << i << "] is neither convex nor concave" << endl; 00084 } 00085 } 00086 00087 return 0; 00088 } 00089 /* <<< end tutorial code <<< */