18 #include <gtest/gtest.h> 34 const double dat_A[] = {
35 2.8955668335, 2.3041932983, 1.9002381085, 1.7993158652, 1.8456197228,
36 2.9632296740, 1.9368565578, 2.1988923358, 2.0547605617, 2.5655678993,
37 2.3041932983, 3.8406914364, 2.1811218706, 3.2312564555, 2.4736403918,
38 3.4703311380, 1.4874417483, 3.1073538218, 2.1353324397, 2.9541115932,
39 1.9002381085, 2.1811218706, 2.4942067597, 1.6851007198, 1.4585872052,
40 2.3015952197, 1.0955231591, 2.2979627790, 1.3918738834, 2.1854562572,
41 1.7993158652, 3.2312564555, 1.6851007198, 3.1226161015, 1.6779632687,
42 2.7195826381, 1.2397348013, 2.3757864319, 1.6291224768, 2.4463194915,
43 1.8456197228, 2.4736403918, 1.4585872052, 1.6779632687, 2.8123267839,
44 2.5860688816, 1.4131630919, 2.1914803135, 1.5542420639, 2.7170092067,
45 2.9632296740, 3.4703311380, 2.3015952197, 2.7195826381, 2.5860688816,
46 4.1669180394, 2.1145239023, 3.3214801332, 2.6694845663, 3.0742063088,
47 1.9368565578, 1.4874417483, 1.0955231591, 1.2397348013, 1.4131630919,
48 2.1145239023, 1.8928811570, 1.7097998455, 1.7205860530, 1.8710847505,
49 2.1988923358, 3.1073538218, 2.2979627790, 2.3757864319, 2.1914803135,
50 3.3214801332, 1.7097998455, 3.4592638415, 2.1518695071, 2.8907499694,
51 2.0547605617, 2.1353324397, 1.3918738834, 1.6291224768, 1.5542420639,
52 2.6694845663, 1.7205860530, 2.1518695071, 2.1110960664, 1.6731209980,
53 2.5655678993, 2.9541115932, 2.1854562572, 2.4463194915, 2.7170092067,
54 3.0742063088, 1.8710847505, 2.8907499694, 1.6731209980, 3.9093678727};
59 A.meanAndStd(result_mean, result_std);
62 const double dat_good_M[] = {
63 2.246424086, 2.718547419, 1.899166596, 2.192679825, 2.073010093,
64 2.938742050, 1.648159507, 2.570463898, 1.909148862, 2.628699435};
65 const Eigen::Matrix<double, 10, 1> good_M(dat_good_M);
66 const double dat_good_S[] = {
67 0.428901371, 0.720352792, 0.468999497, 0.684910097, 0.546595053,
68 0.604303301, 0.328759015, 0.582584159, 0.382009344, 0.644788760};
69 const Eigen::Matrix<double, 10, 1> good_S(dat_good_S);
71 EXPECT_NEAR((result_mean - good_M).array().abs().
sum(), 0, 1e-4);
72 EXPECT_NEAR((result_std - good_S).array().abs().
sum(), 0, 1e-4);
81 const double dat_A[] = {
82 2.8955668335, 2.3041932983, 1.9002381085, 1.7993158652, 1.8456197228,
83 2.9632296740, 1.9368565578, 2.1988923358, 2.0547605617, 2.5655678993,
84 2.3041932983, 3.8406914364, 2.1811218706, 3.2312564555, 2.4736403918,
85 3.4703311380, 1.4874417483, 3.1073538218, 2.1353324397, 2.9541115932,
86 1.9002381085, 2.1811218706, 2.4942067597, 1.6851007198, 1.4585872052,
87 2.3015952197, 1.0955231591, 2.2979627790, 1.3918738834, 2.1854562572,
88 1.7993158652, 3.2312564555, 1.6851007198, 3.1226161015, 1.6779632687,
89 2.7195826381, 1.2397348013, 2.3757864319, 1.6291224768, 2.4463194915,
90 1.8456197228, 2.4736403918, 1.4585872052, 1.6779632687, 2.8123267839,
91 2.5860688816, 1.4131630919, 2.1914803135, 1.5542420639, 2.7170092067,
92 2.9632296740, 3.4703311380, 2.3015952197, 2.7195826381, 2.5860688816,
93 4.1669180394, 2.1145239023, 3.3214801332, 2.6694845663, 3.0742063088,
94 1.9368565578, 1.4874417483, 1.0955231591, 1.2397348013, 1.4131630919,
95 2.1145239023, 1.8928811570, 1.7097998455, 1.7205860530, 1.8710847505,
96 2.1988923358, 3.1073538218, 2.2979627790, 2.3757864319, 2.1914803135,
97 3.3214801332, 1.7097998455, 3.4592638415, 2.1518695071, 2.8907499694,
98 2.0547605617, 2.1353324397, 1.3918738834, 1.6291224768, 1.5542420639,
99 2.6694845663, 1.7205860530, 2.1518695071, 2.1110960664, 1.6731209980,
100 2.5655678993, 2.9541115932, 2.1854562572, 2.4463194915, 2.7170092067,
101 3.0742063088, 1.8710847505, 2.8907499694, 1.6731209980, 3.9093678727};
105 double result_mean, result_std;
106 A.meanAndStdAll(result_mean, result_std);
109 const double good_M = 2.282504177034;
110 const double good_S = 0.660890754096;
112 EXPECT_NEAR(std::abs(result_mean - good_M), 0, 1e-4);
113 EXPECT_NEAR(std::abs(result_std - good_S), 0, 1e-4);
120 const double W_vals[6 * 6] = {0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0,
121 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
122 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0};
128 const double real_laplacian_vals[6 * 6] = {
129 2, -1, 0, 0, -1, 0, -1, 3, -1, 0, -1, 0, 0, -1, 2, -1, 0, 0,
130 0, 0, -1, 3, -1, -1, -1, -1, 0, -1, 3, 0, 0, 0, 0, -1, 0, 1};
133 EXPECT_NEAR((GT_L - L).array().abs().
sum(), 0, 1e-4);
139 const double dat_C1[] = {13.737245, 10.248641, -5.839599, 11.108320,
140 10.248641, 14.966139, -5.259922, 11.662222,
141 -5.839599, -5.259922, 9.608822, -4.342505,
142 11.108320, 11.662222, -4.342505, 12.121940};
145 const double dat_REAL_EIGVEC[] = {0.54800, 0.57167, -0.29604, 0.53409};
146 const Eigen::Matrix<double, 4, 1> REAL_EIGVEC(dat_REAL_EIGVEC);
150 C1.largestEigenvector(lev, 1e-3, 20);
151 EXPECT_NEAR((REAL_EIGVEC - lev).array().abs().
sum(), 0, 1e-3);
161 std::stringstream
s(s1);
166 M.loadFromTextFile(
s);
169 catch (std::exception& e)
171 std::cerr << e.what() << std::endl;
173 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
174 EXPECT_EQ(M.rows(), 2);
175 EXPECT_EQ(M.cols(), 3);
181 std::stringstream
s(s1);
186 M.loadFromTextFile(
s);
189 catch (std::exception& e)
191 std::cerr << e.what() << std::endl;
193 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
194 EXPECT_EQ(M.rows(), 2);
195 EXPECT_EQ(M.cols(), 2);
199 std::stringstream
s(s1);
204 M.loadFromTextFile(
s);
207 catch (std::exception& e)
209 std::cerr << e.what() << std::endl;
211 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
212 EXPECT_EQ(M.rows(), 1);
213 EXPECT_EQ(M.cols(), 2);
219 std::stringstream
s(s1);
224 M.loadFromTextFile(
s);
227 catch (std::exception& e)
229 std::cerr << e.what() << std::endl;
231 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
232 EXPECT_EQ(M.rows(), 2);
233 EXPECT_EQ(M.cols(), 3);
239 std::stringstream
s(s1);
244 M.loadFromTextFile(
s);
247 catch (std::exception&)
250 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
256 std::stringstream
s(s1);
261 M.loadFromTextFile(
s);
264 catch (std::exception&)
267 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
271 std::stringstream
s(s1);
276 M.loadFromTextFile(
s);
279 catch (std::exception&)
282 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
289 std::stringstream
s(s1);
294 M.loadFromTextFile(
s);
297 catch (std::exception&)
300 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
A namespace of pseudo-random numbers genrators of diferent distributions.
void meanAndStd(VEC &outMeanVector, VEC &outStdVector, const bool unbiased_variance=true) const
Computes a row with the mean values of each column in the matrix and the associated vector with the s...
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
TEST(Matrices, meanAndStd)
EIGEN_STRONG_INLINE void laplacian(Eigen::MatrixBase< OtherDerived > &ret) const
Computes the laplacian of this square graph weight matrix.
A numeric matrix of compile-time fixed size.
This base provides a set of functions for maths stuff.
void largestEigenvector(OUTVECT &x, Scalar resolution=Scalar(0.01), size_t maxIterations=6, int *out_Iterations=nullptr, float *out_estimatedResolution=nullptr) const
Efficiently computes only the biggest eigenvector of the matrix using the Power Method, and returns it in the passed vector "x".
CONTAINER::Scalar sum(const CONTAINER &v)
Computes the sum of all the elements.
GLsizei const GLchar ** string
void meanAndStdAll(double &outMean, double &outStd, const bool unbiased_variance=true) const
Computes the mean and standard deviation of all the elements in the matrix as a whole.
void loadFromTextFile(const std::string &file)
Load matrix from a text file, compatible with MATLAB text format.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.