SmallMatrixUnitTest.cpp File Reference
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "Math/SmallMatrix.h"
#include "Math/SmallVector.h"
#include "Logger.h"

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int argc  ,
char **  argv 
)
Todo:
figure out a way to test a LU factorisation
37 {
38  //constructors
39  SmallVector<2> vec0{0., 1.}, vec1{2., 3.}, vec2{4., 5.}, vec3{6., 7.};
41  SmallMatrix<2, 2> A22, count0({vec0, vec1}), count1({vec2, vec3}), copy(count0);
44  SmallMatrix<3, 3> destroy(1);
45  logger.assert_always(destroy.getNumberOfRows() == 3, "Rows in a matrix");
46  logger.assert_always(destroy.getNCols() == 3, "Columns in a matrix");
47  logger.assert_always(destroy.size() == 9, "Size of a matrix");
48  for(std::size_t i = 0; i < destroy.size(); ++i)
49  {
50  logger.assert_always(std::abs(destroy[i] - 1.) < 1e-12, "Entry of a matrix");
51  }
52  for(std::size_t i = 0; i < destroy.getNumberOfRows(); ++i)
53  {
54  for(std::size_t j = 0; j < destroy.getNCols(); ++j)
55  {
56  logger.assert_always(std::abs(destroy(i, j) - 1.) < 1e-12, "Entry of a matrix");
57  }
58  }
59  SmallMatrix<3, 3> moved(std::move(destroy));
60  logger.assert_always(moved.getNumberOfRows() == 3, "Rows in a matrix");
61  logger.assert_always(moved.getNCols() == 3, "Columns in a matrix");
62  logger.assert_always(moved.size() == 9, "Size of a matrix");
63  for(std::size_t i = 0; i < moved.size(); ++i)
64  {
65  logger.assert_always(std::abs(moved[i] - 1.) < 1e-12, "Entry of a matrix");
66  }
67  for(std::size_t i = 0; i < moved.getNumberOfRows(); ++i)
68  {
69  for(std::size_t j = 0; j < moved.getNCols(); ++j)
70  {
71  logger.assert_always(std::abs(moved(i, j) - 1.) < 1e-12, "Entry of a matrix");
72  }
73  }
74  logger.assert_always(A0.getNumberOfRows() == 3, "Rows in a matrix");
75  logger.assert_always(A0.getNCols() == 3, "Columns in a matrix");
76  logger.assert_always(A0.size() == 9, "Size of a matrix");
77  logger.assert_always(A22.getNumberOfRows() == 2, "Rows in a matrix");
78  logger.assert_always(A22.getNCols() == 2, "Columns in a matrix");
79  logger.assert_always(A22.size() == 4, "Size of a matrix");
80  logger.assert_always(A23.getNumberOfRows() == 2, "Rows in a matrix");
81  logger.assert_always(A23.getNCols() == 3, "Columns in a matrix");
82  logger.assert_always(A23.size() == 6, "Size of a matrix");
83  logger.assert_always(A32.getNumberOfRows() == 3, "Rows in a matrix");
84  logger.assert_always(A32.getNCols() == 2, "Columns in a matrix");
85  logger.assert_always(A32.size() == 6, "Size of a matrix");
86  logger.assert_always(count0.getNumberOfRows() == 2, "Rows in a matrix");
87  logger.assert_always(count0.getNCols() == 2, "Columns in a matrix");
88  logger.assert_always(count0.size() == 4, "Size of a matrix");
89  for(std::size_t i = 0; i < count0.size(); ++i)
90  {
91  logger.assert_always(std::abs(count0[i] - i) < 1e-12, "Entry of a matrix");
92  }
93  logger.assert_always(std::abs(count0(0, 0) - 0.) < 1e-12, "Entry of a matrix");
94  logger.assert_always(std::abs(count0(1, 0) - 1.) < 1e-12, "Entry of a matrix");
95  logger.assert_always(std::abs(count0(0, 1) - 2.) < 1e-12, "Entry of a matrix");
96  logger.assert_always(std::abs(count0(1, 1) - 3.) < 1e-12, "Entry of a matrix");
97  logger.assert_always(count1.getNumberOfRows() == 2, "Rows in a matrix");
98  logger.assert_always(count1.getNCols() == 2, "Columns in a matrix");
99  logger.assert_always(count1.size() == 4, "Size of a matrix");
100  for(std::size_t i = 0; i < count1.size(); ++i)
101  {
102  logger.assert_always(std::abs(count1[i] - 4. - i) < 1e-12, "Entry of a matrix");
103  }
104  logger.assert_always(copy.getNumberOfRows() == 2, "Rows in a matrix");
105  logger.assert_always(copy.getNCols() == 2, "Columns in a matrix");
106  logger.assert_always(copy.size() == 4, "Size of a matrix");
107  for(std::size_t i = 0; i < copy.size(); ++i)
108  {
109  logger.assert_always(std::abs(copy[i] - i) < 1e-12, "Entry of a matrix");
110  }
111  A23(0, 0) = 0.0;
112  A23(1, 0) = 0.1;
113  A23(0, 1) = 0.2;
114  A23(1, 1) = 0.3;
115  A23(0, 2) = 0.4;
116  A23(1, 2) = 0.5;
117  A32[0] = 0.0;
118  A32[1] = 0.1;
119  A32[2] = 0.2;
120  A32[3] = 0.3;
121  A32[4] = 0.4;
122  A32[5] = 0.5;
123 
124  //out-of-place operators
125  logger.assert_always(std::abs((count0*count1)(0, 0) - 10.) < 1e-12, "multiply");
126  logger.assert_always(std::abs((count0*count1)(1, 0) - 19.) < 1e-12, "multiply");
127  logger.assert_always(std::abs((count0*count1)(0, 1) - 14.) < 1e-12, "multiply");
128  logger.assert_always(std::abs((count0*count1)(1, 1) - 27.) < 1e-12, "multiply");
129  logger.assert_always(std::abs((count1*count0)(0, 0) - 6.) < 1e-12, "multiply");
130  logger.assert_always(std::abs((count1*count0)(1, 0) - 7.) < 1e-12, "multiply");
131  logger.assert_always(std::abs((count1*count0)(0, 1) - 26.) < 1e-12, "multiply");
132  logger.assert_always(std::abs((count1*count0)(1, 1) - 31.) < 1e-12, "multiply");
133  logger.assert_always(std::abs((count0*A23)(0, 0) - .2) < 1e-12, "multiply");
134  logger.assert_always(std::abs((count0*A23)(1, 0) - .3) < 1e-12, "multiply");
135  logger.assert_always(std::abs((count0*A23)(0, 1) - .6) < 1e-12, "multiply");
136  logger.assert_always(std::abs((count0*A23)(1, 1) - 1.1) < 1e-12, "multiply");
137  logger.assert_always(std::abs((count0*A23)(0, 2) - 1.) < 1e-12, "multiply");
138  logger.assert_always(std::abs((count0*A23)(1, 2) - 1.9) < 1e-12, "multiply");
139  logger.assert_always(std::abs((A32*count0)(0, 0) - .3) < 1e-12, "multiply");
140  logger.assert_always(std::abs((A32*count0)(1, 0) - .4) < 1e-12, "multiply");
141  logger.assert_always(std::abs((A32*count0)(2, 0) - .5) < 1e-12, "multiply");
142  logger.assert_always(std::abs((A32*count0)(0, 1) - .9) < 1e-12, "multiply");
143  logger.assert_always(std::abs((A32*count0)(1, 1) - 1.4) < 1e-12, "multiply");
144  logger.assert_always(std::abs((A32*count0)(2, 1) - 1.9) < 1e-12, "multiply");
145  logger.assert_always(std::abs((A32*A23)(0, 0) - .03) < 1e-12, "multiply");
146  logger.assert_always(std::abs((A32*A23)(1, 0) - .04) < 1e-12, "multiply");
147  logger.assert_always(std::abs((A32*A23)(2, 0) - .05) < 1e-12, "multiply");
148  logger.assert_always(std::abs((A32*A23)(0, 1) - .09) < 1e-12, "multiply");
149  logger.assert_always(std::abs((A32*A23)(1, 1) - .14) < 1e-12, "multiply");
150  logger.assert_always(std::abs((A32*A23)(2, 1) - .19) < 1e-12, "multiply");
151  logger.assert_always(std::abs((A32*A23)(0, 2) - .15) < 1e-12, "multiply");
152  logger.assert_always(std::abs((A32*A23)(1, 2) - .24) < 1e-12, "multiply");
153  logger.assert_always(std::abs((A32*A23)(2, 2) - .33) < 1e-12, "multiply");
154  logger.assert_always(std::abs((A23*A32)(0, 0) - .1) < 1e-12, "multiply");
155  logger.assert_always(std::abs((A23*A32)(1, 0) - .13) < 1e-12, "multiply");
156  logger.assert_always(std::abs((A23*A32)(0, 1) - .28) < 1e-12, "multiply");
157  logger.assert_always(std::abs((A23*A32)(1, 1) - .40) < 1e-12, "multiply");
158  logger.assert_always(std::abs((vec1*count0)*vec1 - 45) < 1e-12, "multiply");
159  logger.assert_always(std::abs(vec1*(count0*vec1) - 45) < 1e-12, "multiply");
160  SmallVector<3> size3 = {{3., 4., 5.}};
161  logger.assert_always(std::abs(size3*(A32*vec0) - 5) < 1e-12, "multiply");
162  logger.assert_always(std::abs((size3*A32)*vec0 - 5) < 1e-12, "multiply");
163  logger.assert_always(std::abs((2*count0*2)(0, 0) - 0.) < 1e-12, "multiply");
164  logger.assert_always(std::abs((2*count0*2)(1, 0) - 4.) < 1e-12, "multiply");
165  logger.assert_always(std::abs((2*count0*2)(0, 1) - 8.) < 1e-12, "multiply");
166  logger.assert_always(std::abs((2*count0*2)(1, 1) - 12.) < 1e-12, "multiply");
167  logger.assert_always(std::abs((count0/2.)(0, 0) - 0.) < 1e-12, "divide");
168  logger.assert_always(std::abs((count0/2.)(1, 0) - .5) < 1e-12, "divide");
169  logger.assert_always(std::abs((count0/2.)(0, 1) - 1.) < 1e-12, "divide");
170  logger.assert_always(std::abs((count0/2.)(1, 1) - 1.5) < 1e-12, "divide");
171  logger.assert_always(std::abs((count0+count1)(0, 0) - 4.) < 1e-12, "add");
172  logger.assert_always(std::abs((count0+count1)(1, 0) - 6.) < 1e-12, "add");
173  logger.assert_always(std::abs((count0+count1)(0, 1) - 8.) < 1e-12, "add");
174  logger.assert_always(std::abs((count0+count1)(1, 1) - 10.) < 1e-12, "add");
175  logger.assert_always(std::abs((count1+count0)(0, 0) - 4.) < 1e-12, "add");
176  logger.assert_always(std::abs((count1+count0)(1, 0) - 6.) < 1e-12, "add");
177  logger.assert_always(std::abs((count1+count0)(0, 1) - 8.) < 1e-12, "add");
178  logger.assert_always(std::abs((count1+count0)(1, 1) - 10.) < 1e-12, "add");
179  logger.assert_always(std::abs((count0-count1)(0, 0) + 4.) < 1e-12, "subtract");
180  logger.assert_always(std::abs((count0-count1)(1, 0) + 4.) < 1e-12, "subtract");
181  logger.assert_always(std::abs((count0-count1)(0, 1) + 4.) < 1e-12, "subtract");
182  logger.assert_always(std::abs((count0-count1)(1, 1) + 4.) < 1e-12, "subtract");
183  logger.assert_always(std::abs((count1-count0)(0, 0) - 4.) < 1e-12, "subtract");
184  logger.assert_always(std::abs((count1-count0)(1, 0) - 4.) < 1e-12, "subtract");
185  logger.assert_always(std::abs((count1-count0)(0, 1) - 4.) < 1e-12, "subtract");
186  logger.assert_always(std::abs((count1-count0)(1, 1) - 4.) < 1e-12, "subtract");
187 
188  //assignent operators
189  SmallMatrix<2, 2> extra = copy;
190  logger.assert_always(extra.getNumberOfRows() == 2, "Rows in a matrix");
191  logger.assert_always(extra.getNCols() == 2, "Columns in a matrix");
192  logger.assert_always(extra.size() == 4, "Size of a matrix");
193  for(std::size_t i = 0; i < extra.size(); ++i)
194  {
195  logger.assert_always(std::abs(extra[i] - i) < 1e-12, "Entry of a matrix");
196  }
197  copy = count1;
198  logger.assert_always(copy.getNumberOfRows() == 2, "Rows in a matrix");
199  logger.assert_always(copy.getNCols() == 2, "Columns in a matrix");
200  logger.assert_always(copy.size() == 4, "Size of a matrix");
201  for(std::size_t i = 0; i < copy.size(); ++i)
202  {
203  logger.assert_always(std::abs(copy[i] - i - 4.) < 1e-12, "Entry of a matrix");
204  }
205  count0*=count1;
206  logger.assert_always(count0.getNumberOfRows() == 2, "Rows in a matrix");
207  logger.assert_always(count0.getNCols() == 2, "Columns in a matrix");
208  logger.assert_always(count0.size() == 4, "Size of a matrix");
209  logger.assert_always(std::abs((count0)(0, 0) - 10.) < 1e-12, "multiply");
210  logger.assert_always(std::abs((count0)(1, 0) - 19.) < 1e-12, "multiply");
211  logger.assert_always(std::abs((count0)(0, 1) - 14.) < 1e-12, "multiply");
212  logger.assert_always(std::abs((count0)(1, 1) - 27.) < 1e-12, "multiply");
213  count0*=4;
214  logger.assert_always(count0.getNumberOfRows() == 2, "Rows in a matrix");
215  logger.assert_always(count0.getNCols() == 2, "Columns in a matrix");
216  logger.assert_always(count0.size() == 4, "Size of a matrix");
217  logger.assert_always(std::abs((count0)(0, 0) - 40.) < 1e-12, "multiply");
218  logger.assert_always(std::abs((count0)(1, 0) - 76.) < 1e-12, "multiply");
219  logger.assert_always(std::abs((count0)(0, 1) - 56.) < 1e-12, "multiply");
220  logger.assert_always(std::abs((count0)(1, 1) - 108.) < 1e-12, "multiply");
221  count0/=2;
222  logger.assert_always(count0.getNumberOfRows() == 2, "Rows in a matrix");
223  logger.assert_always(count0.getNCols() == 2, "Columns in a matrix");
224  logger.assert_always(count0.size() == 4, "Size of a matrix");
225  logger.assert_always(std::abs((count0)(0, 0) - 20.) < 1e-12, "divide");
226  logger.assert_always(std::abs((count0)(1, 0) - 38.) < 1e-12, "divide");
227  logger.assert_always(std::abs((count0)(0, 1) - 28.) < 1e-12, "divide");
228  logger.assert_always(std::abs((count0)(1, 1) - 54.) < 1e-12, "divide");
229  copy+=extra;
230  logger.assert_always(copy.getNumberOfRows() == 2, "Rows in a matrix");
231  logger.assert_always(copy.getNCols() == 2, "Columns in a matrix");
232  logger.assert_always(copy.size() == 4, "Size of a matrix");
233  logger.assert_always(std::abs((copy)(0, 0) - 4.) < 1e-12, "add");
234  logger.assert_always(std::abs((copy)(1, 0) - 6.) < 1e-12, "add");
235  logger.assert_always(std::abs((copy)(0, 1) - 8.) < 1e-12, "add");
236  logger.assert_always(std::abs((copy)(1, 1) - 10.) < 1e-12, "add");
237  extra-=count0;
238  logger.assert_always(extra.getNumberOfRows() == 2, "Rows in a matrix");
239  logger.assert_always(extra.getNCols() == 2, "Columns in a matrix");
240  logger.assert_always(extra.size() == 4, "Size of a matrix");
241  logger.assert_always(std::abs((extra)(0, 0) + 20.) < 1e-12, "subtract");
242  logger.assert_always(std::abs((extra)(1, 0) + 37.) < 1e-12, "subtract");
243  logger.assert_always(std::abs((extra)(0, 1) + 26.) < 1e-12, "subtract");
244  logger.assert_always(std::abs((extra)(1, 1) + 51.) < 1e-12, "subtract");
245  extra.axpy(3., copy);
246  logger.assert_always(extra.getNumberOfRows() == 2, "Rows in a matrix");
247  logger.assert_always(extra.getNCols() == 2, "Columns in a matrix");
248  logger.assert_always(extra.size() == 4, "Size of a matrix");
249  logger.assert_always(std::abs((extra)(0, 0) + 8.) < 1e-12, "ax+y");
250  logger.assert_always(std::abs((extra)(1, 0) + 19.) < 1e-12, "ax+y");
251  logger.assert_always(std::abs((extra)(0, 1) + 2.) < 1e-12, "ax+y");
252  logger.assert_always(std::abs((extra)(1, 1) + 21.) < 1e-12, "ax+y");
253 
254  SmallVector<3> vec3D0{{0., 1., 2.}}, vec3D1{{3., 4., 5.}}, vec3D2{{0., -1., 2.}};
255  SmallVector<4> vec4D0{{0., 1., 2., 3.}}, vec4D1{{4., 5., 6., 7.}}, vec4D2{{0., -1., 2., -3.}}, vec4D3{{0., -1., -2., 3.}};
256 
257  logger.assert_always(SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(0).size() == 3, "getColumn");
258  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(0)) - vec3D0)[0]) < 1e-12, "getColumn");
259  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(0)) - vec3D0)[1]) < 1e-12, "getColumn");
260  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(0)) - vec3D0)[2]) < 1e-12, "getColumn");
261  logger.assert_always(SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(1).size() == 3, "getColumn");
262  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(1)) - vec3D1)[0]) < 1e-12, "getColumn");
263  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(1)) - vec3D1)[1]) < 1e-12, "getColumn");
264  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getColumn(1)) - vec3D1)[2]) < 1e-12, "getColumn");
265  logger.assert_always(SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(0).size() == 2, "getRow");
266  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(0)))[0] - 0.) < 1e-12, "getRow");
267  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(0)))[1] - 3.) < 1e-12, "getRow");
268  logger.assert_always(SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(1).size() == 2, "getRow");
269  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(1)))[0] - 1.) < 1e-12, "getRow");
270  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(1)))[1] - 4.) < 1e-12, "getRow");
271  logger.assert_always(SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(2).size() == 2, "getRow");
272  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(2)))[0] - 2.) < 1e-12, "getRow");
273  logger.assert_always(std::abs(((SmallMatrix<3, 2>({vec3D0, vec3D1}).getRow(2)))[1] - 5.) < 1e-12, "getRow");
274 
276 
277  SmallVector<2> duplicate = vec2;
278  count0.solve(vec2);
279  logger.assert_always(std::abs((vec2 - count0.inverse() * duplicate)[0]) < 1e-12, "inverse and solve");
280  logger.assert_always(std::abs((vec2 - count0.inverse() * duplicate)[1]) < 1e-12, "inverse and solve");
281  logger.assert_always(std::abs((count0 - count0.inverse().inverse())[0]) < 1e-12, "inverse");
282  logger.assert_always(std::abs((count0 - count0.inverse().inverse())[1]) < 1e-12, "inverse");
283  logger.assert_always(std::abs((count0 - count0.inverse().inverse())[2]) < 1e-12, "inverse");
284  logger.assert_always(std::abs((count0 - count0.inverse().inverse())[3]) < 1e-12, "inverse");
285  logger.assert_always(std::abs((count0 - count0.transpose().transpose())[0]) < 1e-12, "transpose");
286  logger.assert_always(std::abs((count0 - count0.transpose().transpose())[1]) < 1e-12, "transpose");
287  logger.assert_always(std::abs((count0 - count0.transpose().transpose())[2]) < 1e-12, "transpose");
288  logger.assert_always(std::abs((count0 - count0.transpose().transpose())[3]) < 1e-12, "transpose");
289  logger.assert_always(std::abs(A23(0, 0) - A23.transpose()(0, 0)) < 1e-12, "transpose");
290  logger.assert_always(std::abs(A23(1, 0) - A23.transpose()(0, 1)) < 1e-12, "transpose");
291  logger.assert_always(std::abs(A23(0, 1) - A23.transpose()(1, 0)) < 1e-12, "transpose");
292  logger.assert_always(std::abs(A23(1, 1) - A23.transpose()(1, 1)) < 1e-12, "transpose");
293  logger.assert_always(std::abs(A23(0, 2) - A23.transpose()(2, 0)) < 1e-12, "transpose");
294  logger.assert_always(std::abs(A23(1, 2) - A23.transpose()(2, 1)) < 1e-12, "transpose");
295 
296  auto data = A23.data();
297  logger.assert_always(std::abs(data[0] - A23[0]) < 1e-12, "data");
298  logger.assert_always(std::abs(data[1] - A23[1]) < 1e-12, "data");
299  logger.assert_always(std::abs(data[2] - A23[2]) < 1e-12, "data");
300  logger.assert_always(std::abs(data[3] - A23[3]) < 1e-12, "data");
301  logger.assert_always(std::abs(data[4] - A23[4]) < 1e-12, "data");
302  logger.assert_always(std::abs(data[5] - A23[5]) < 1e-12, "data");
303  data[2] = 17.3;
304  logger.assert_always(std::abs(A23[2] - 17.3) < 1e-12, "data");
305 
306  logger(INFO, "%", A23);
307 
308  return 0;
309 }
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
int data[]
Definition: Map_placement_new.cpp:1
RowVectorXd vec1(3)
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
Data type for small dense matrix.
Definition: SmallMatrix.h:48
unsigned int getNCols() const
Definition: SmallMatrix.h:278
unsigned int size() const
Get total number of Matrix entries.
Definition: SmallMatrix.h:255
unsigned int getNumberOfRows() const
Get the number of rows.
Definition: SmallMatrix.h:261
void axpy(Mdouble a, const SmallMatrix &x)
Applies the matrix y=ax + y, where x is another matrix and a is a scalar.
Definition: SmallMatrix.h:246
Definition: SmallVector.h:42
EIGEN_BLAS_FUNC() copy(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_impl.h:32
#define INFO(i)
Definition: mumps_solver.h:54
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References abs(), SmallMatrix< numberOfRows, numberOfColumns >::axpy(), copy(), SmallMatrix< numberOfRows, numberOfColumns >::data(), data, e(), SmallMatrix< numberOfRows, numberOfColumns >::getNCols(), SmallMatrix< numberOfRows, numberOfColumns >::getNumberOfRows(), i, INFO, SmallMatrix< numberOfRows, numberOfColumns >::inverse(), j, logger, size, SmallMatrix< numberOfRows, numberOfColumns >::size(), SmallMatrix< numberOfRows, numberOfColumns >::solve(), SmallMatrix< numberOfRows, numberOfColumns >::transpose(), and vec1().