RFFGen
 All Classes Namespaces Files Functions Typedefs Enumerations Groups
unitMatrix.hh
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the C++-library RFFGen. */
4 /* Copyright 2015 Lars Lubkoll */
5 /* */
6 /* RFFGen is free software: you can redistribute it and/or modify */
7 /* it under the terms of the GNU General Public License as published by */
8 /* the Free Software Foundation, either version 3 of the License, or */
9 /* (at your option) any later version. */
10 /* */
11 /* RFFGen is distributed in the hope that it will be useful, */
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14 /* GNU General Public License for more details. */
15 /* */
16 /* You should have received a copy of the GNU General Public License */
17 /* along with RFFGen. If not, see <http://www.gnu.org/licenses/>. */
18 /* */
19 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
20 
21 #ifndef RFFGEN_LINEAR_ALGEBRA_UNIT_MATRIX_HH
22 #define RFFGEN_LINEAR_ALGEBRA_UNIT_MATRIX_HH
23 
24 #include "../Util/at.hh"
25 #include "../Util/voider.hh"
26 #include "../Util/zero.hh"
27 #include "dimension.hh"
28 #include "extractRowsAndCols.hh"
29 
30 namespace RFFGen
31 {
32  namespace LinearAlgebra
33  {
38  template <class Matrix, class = std::enable_if_t<Checks::isConstantSizeMatrix<Matrix>()> >
39  Matrix unitMatrix()
40  {
41  Matrix A = zero<Matrix>();
42  for(int i=0; i<dimension<Matrix>(); ++i) at(A,i,i) = 1;
43  return A;
44  }
45 
50  template <class Matrix, class = std::enable_if_t<!Checks::isConstantSizeMatrix<Matrix>()> >
51  Matrix unitMatrix(int rows)
52  {
53  Matrix A = zero<Matrix>(rows,rows);
54  for(int i=0; i<rows; ++i) at(A,i,i) = 1;
55  return A;
56  }
57  }
58 }
59 
60 #endif // RFFGEN_LINEAR_ALGEBRA_UNIT_MATRIX_HH
Matrix unitMatrix(int rows)
Compute unit matrix for the specified dynamic size matrix type. This requires that a corresponding sp...
Definition: unitMatrix.hh:51