17 #include <gtest/gtest.h> 30 const double dat_A[] = {
31 2.8955668335, 2.3041932983, 1.9002381085, 1.7993158652, 1.8456197228,
32 2.9632296740, 1.9368565578, 2.1988923358, 2.0547605617, 2.5655678993,
33 2.3041932983, 3.8406914364, 2.1811218706, 3.2312564555, 2.4736403918,
34 3.4703311380, 1.4874417483, 3.1073538218, 2.1353324397, 2.9541115932,
35 1.9002381085, 2.1811218706, 2.4942067597, 1.6851007198, 1.4585872052,
36 2.3015952197, 1.0955231591, 2.2979627790, 1.3918738834, 2.1854562572,
37 1.7993158652, 3.2312564555, 1.6851007198, 3.1226161015, 1.6779632687,
38 2.7195826381, 1.2397348013, 2.3757864319, 1.6291224768, 2.4463194915,
39 1.8456197228, 2.4736403918, 1.4585872052, 1.6779632687, 2.8123267839,
40 2.5860688816, 1.4131630919, 2.1914803135, 1.5542420639, 2.7170092067,
41 2.9632296740, 3.4703311380, 2.3015952197, 2.7195826381, 2.5860688816,
42 4.1669180394, 2.1145239023, 3.3214801332, 2.6694845663, 3.0742063088,
43 1.9368565578, 1.4874417483, 1.0955231591, 1.2397348013, 1.4131630919,
44 2.1145239023, 1.8928811570, 1.7097998455, 1.7205860530, 1.8710847505,
45 2.1988923358, 3.1073538218, 2.2979627790, 2.3757864319, 2.1914803135,
46 3.3214801332, 1.7097998455, 3.4592638415, 2.1518695071, 2.8907499694,
47 2.0547605617, 2.1353324397, 1.3918738834, 1.6291224768, 1.5542420639,
48 2.6694845663, 1.7205860530, 2.1518695071, 2.1110960664, 1.6731209980,
49 2.5655678993, 2.9541115932, 2.1854562572, 2.4463194915, 2.7170092067,
50 3.0742063088, 1.8710847505, 2.8907499694, 1.6731209980, 3.9093678727};
55 A.meanAndStd(result_mean, result_std);
58 const double dat_good_M[] = {
59 2.246424086, 2.718547419, 1.899166596, 2.192679825, 2.073010093,
60 2.938742050, 1.648159507, 2.570463898, 1.909148862, 2.628699435};
61 const Eigen::Matrix<double, 10, 1> good_M(dat_good_M);
62 const double dat_good_S[] = {
63 0.428901371, 0.720352792, 0.468999497, 0.684910097, 0.546595053,
64 0.604303301, 0.328759015, 0.582584159, 0.382009344, 0.644788760};
65 const Eigen::Matrix<double, 10, 1> good_S(dat_good_S);
67 EXPECT_NEAR((result_mean - good_M).array().abs().
sum(), 0, 1e-4);
68 EXPECT_NEAR((result_std - good_S).array().abs().
sum(), 0, 1e-4);
77 const double dat_A[] = {
78 2.8955668335, 2.3041932983, 1.9002381085, 1.7993158652, 1.8456197228,
79 2.9632296740, 1.9368565578, 2.1988923358, 2.0547605617, 2.5655678993,
80 2.3041932983, 3.8406914364, 2.1811218706, 3.2312564555, 2.4736403918,
81 3.4703311380, 1.4874417483, 3.1073538218, 2.1353324397, 2.9541115932,
82 1.9002381085, 2.1811218706, 2.4942067597, 1.6851007198, 1.4585872052,
83 2.3015952197, 1.0955231591, 2.2979627790, 1.3918738834, 2.1854562572,
84 1.7993158652, 3.2312564555, 1.6851007198, 3.1226161015, 1.6779632687,
85 2.7195826381, 1.2397348013, 2.3757864319, 1.6291224768, 2.4463194915,
86 1.8456197228, 2.4736403918, 1.4585872052, 1.6779632687, 2.8123267839,
87 2.5860688816, 1.4131630919, 2.1914803135, 1.5542420639, 2.7170092067,
88 2.9632296740, 3.4703311380, 2.3015952197, 2.7195826381, 2.5860688816,
89 4.1669180394, 2.1145239023, 3.3214801332, 2.6694845663, 3.0742063088,
90 1.9368565578, 1.4874417483, 1.0955231591, 1.2397348013, 1.4131630919,
91 2.1145239023, 1.8928811570, 1.7097998455, 1.7205860530, 1.8710847505,
92 2.1988923358, 3.1073538218, 2.2979627790, 2.3757864319, 2.1914803135,
93 3.3214801332, 1.7097998455, 3.4592638415, 2.1518695071, 2.8907499694,
94 2.0547605617, 2.1353324397, 1.3918738834, 1.6291224768, 1.5542420639,
95 2.6694845663, 1.7205860530, 2.1518695071, 2.1110960664, 1.6731209980,
96 2.5655678993, 2.9541115932, 2.1854562572, 2.4463194915, 2.7170092067,
97 3.0742063088, 1.8710847505, 2.8907499694, 1.6731209980, 3.9093678727};
101 double result_mean, result_std;
102 A.meanAndStdAll(result_mean, result_std);
105 const double good_M = 2.282504177034;
106 const double good_S = 0.660890754096;
108 EXPECT_NEAR(std::abs(result_mean - good_M), 0, 1e-4);
109 EXPECT_NEAR(std::abs(result_std - good_S), 0, 1e-4);
116 const double W_vals[6 * 6] = {0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0,
117 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
118 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0};
124 const double real_laplacian_vals[6 * 6] = {
125 2, -1, 0, 0, -1, 0, -1, 3, -1, 0, -1, 0, 0, -1, 2, -1, 0, 0,
126 0, 0, -1, 3, -1, -1, -1, -1, 0, -1, 3, 0, 0, 0, 0, -1, 0, 1};
129 EXPECT_NEAR((GT_L - L).array().abs().
sum(), 0, 1e-4);
135 const double dat_C1[] = {13.737245, 10.248641, -5.839599, 11.108320,
136 10.248641, 14.966139, -5.259922, 11.662222,
137 -5.839599, -5.259922, 9.608822, -4.342505,
138 11.108320, 11.662222, -4.342505, 12.121940};
141 const double dat_REAL_EIGVEC[] = {0.54800, 0.57167, -0.29604, 0.53409};
142 const Eigen::Matrix<double, 4, 1> REAL_EIGVEC(dat_REAL_EIGVEC);
146 C1.largestEigenvector(lev, 1e-3, 20);
147 EXPECT_NEAR((REAL_EIGVEC - lev).array().abs().
sum(), 0, 1e-3);
157 std::stringstream
s(s1);
162 M.loadFromTextFile(
s);
165 catch (std::exception& e)
167 std::cerr << e.what() << std::endl;
169 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
170 EXPECT_EQ(M.rows(), 2);
171 EXPECT_EQ(M.cols(), 3);
177 std::stringstream
s(s1);
182 M.loadFromTextFile(
s);
185 catch (std::exception& e)
187 std::cerr << e.what() << std::endl;
189 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
190 EXPECT_EQ(M.rows(), 2);
191 EXPECT_EQ(M.cols(), 2);
195 std::stringstream
s(s1);
200 M.loadFromTextFile(
s);
203 catch (std::exception& e)
205 std::cerr << e.what() << std::endl;
207 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
208 EXPECT_EQ(M.rows(), 1);
209 EXPECT_EQ(M.cols(), 2);
215 std::stringstream
s(s1);
220 M.loadFromTextFile(
s);
223 catch (std::exception& e)
225 std::cerr << e.what() << std::endl;
227 EXPECT_TRUE(retval) <<
"string:\n" << s1 << endl;
228 EXPECT_EQ(M.rows(), 2);
229 EXPECT_EQ(M.cols(), 3);
235 std::stringstream
s(s1);
240 M.loadFromTextFile(
s);
243 catch (std::exception&)
246 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
252 std::stringstream
s(s1);
257 M.loadFromTextFile(
s);
260 catch (std::exception&)
263 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
267 std::stringstream
s(s1);
272 M.loadFromTextFile(
s);
275 catch (std::exception&)
278 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
285 std::stringstream
s(s1);
290 M.loadFromTextFile(
s);
293 catch (std::exception&)
296 EXPECT_FALSE(retval) <<
"string:\n" << s1 << endl;
A namespace of pseudo-random numbers generators of diferent distributions.
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.
void meanAndStd(const VECTORLIKE &v, double &out_mean, double &out_std, bool unbiased=true)
Computes the standard deviation of a vector.