svd_tutorial.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 
41 
42 using namespace std;
43 using namespace Eigen;
44 
46 
47 /* >>> start tutorial code >>> */
48 int main( ){
49 
50 
51 
52  // DEFINE A MATRIX:
53  // ----------------
54  DMatrix A(3,2);
55 
56  A(0,0) = 1.0; A(0,1) = 0.0;
57  A(1,0) = 0.0; A(1,1) = 3.0;
58  A(2,0) = 0.0; A(2,1) = 2.0;
59 
60 
61 // ----------------------------------------------
62 // Compute the singular value decomposition of A:
63 //
64 // A = U D V^T
65 //
66 // where U and V are orthogonal and D a diagonal
67 // matrix.
68 // ----------------------------------------------
69 
71 
72  DMatrix U = svdA.matrixU();
73  DMatrix V = svdA.matrixV();
74  DVector D = svdA.singularValues();
75 
76  cout << "U = " << endl << U << endl;
77  cout << "D = " << endl << D << endl;
78  cout << "V = " << endl << V << endl;
79 
80 
81  // DEFINE ANOTHER MATRIX:
82  // ----------------------
83  DMatrix B(2,3);
84 
85  B(0,0) = 1.0; B(0,1) = 0.0; B(0,2) = 0.0;
86  B(1,0) = 0.0; B(1,1) = 3.0; B(1,2) = 2.0;
87 
88 
89 // ----------------------------------------------
90 // Compute the singular value decomposition of B:
91 //
92 // B = U D V^T
93 //
94 // where U and V are orthogonal and D a diagonal
95 // matrix.
96 // ----------------------------------------------
97 
99 
100  U = svdB.matrixU();
101  V = svdB.matrixV();
102  D = svdB.singularValues();
103 
104  cout << "\n\nSVD of the matrix B: \n";
105 
106  cout << "U = " << endl << U << endl;
107  cout << "D = " << endl << D << endl;
108  cout << "V = " << endl << V << endl;
109 
110  return 0;
111 }
112 /* <<< end tutorial code <<< */
113 
114 
USING_NAMESPACE_ACADO int main()
#define USING_NAMESPACE_ACADO
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: matrix.hpp:471
const SingularValuesType & singularValues() const
Definition: JacobiSVD.h:630
Two-sided Jacobi SVD decomposition of a rectangular matrix.
const MatrixUType & matrixU() const
Definition: JacobiSVD.h:602
const MatrixVType & matrixV() const
Definition: JacobiSVD.h:618


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