disciplined_convex_programming1.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ACADO Toolkit.
3  *
4  * ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
5  * Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
6  * Milan Vukov, Rien Quirynen, KU Leuven.
7  * Developed within the Optimization in Engineering Center (OPTEC)
8  * under supervision of Moritz Diehl. All rights reserved.
9  *
10  * ACADO Toolkit is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 3 of the License, or (at your option) any later version.
14  *
15  * ACADO Toolkit is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with ACADO Toolkit; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  *
24  */
25 
26 
27 
38 
39 using namespace std;
40 
42 
43 /* >>> start tutorial code >>> */
44 int main( )
45 {
46  int i;
47 
48  // DEFINE VALRIABLES:
49  // ---------------------------
50  DMatrix A(3,3);
51  DVector b(3);
52  DifferentialState x("", 3, 1);
54  Function f[7];
55 
56  // DEFINE THE VECTOR AND MATRIX ENTRIES:
57  // -------------------------------------
58  A.setZero() ;
59  A(0,0) = 1.0; A(1,1) = 2.0; A(2,2) = 3.0;
60  b(0) = 1.0; b(1) = 1.0; b(2) = 1.0;
61 
62 
63  // DEFINE TEST FUNCTIONS:
64  // -----------------------
65  f[0] << A*x + b;
66  f[1] << y + euclidean_norm(A*x + b);
67  f[2] << y*y;
68  f[3] << square(y);
69  f[4] << 5.0*log_sum_exp( x );
70 // f[5] << entropy( y );
71  f[6] << -sum_square( x );
72 
73  for (i = 0; i < 7; i++)
74  {
75  if (f[i].isConvex() == BT_TRUE)
76  cout << "f[" << i << "] is convex" << endl;
77 
78  else
79  {
80  if (f[i].isConcave() == BT_TRUE)
81  cout << "f[" << i << "] is concave" << endl;
82  else
83  cout << "f[" << i << "] is neither convex nor concave" << endl;
84  }
85  }
86 
87  return 0;
88 }
89 /* <<< end tutorial code <<< */
Allows to setup and evaluate a general function based on SymbolicExpressions.
Definition: function_.hpp:59
#define USING_NAMESPACE_ACADO
IntermediateState log_sum_exp(const Expression &arg)
IntermediateState sum_square(const Expression &arg)
IntermediateState euclidean_norm(const Expression &arg)
USING_NAMESPACE_ACADO int main()
IntermediateState square(const Expression &arg)
Derived & setZero(Index size)
#define BT_TRUE
Definition: acado_types.hpp:47


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Mon Jun 10 2019 12:34:32