selfadjoint.cpp
Go to the documentation of this file.
1 // This file is triangularView of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #define TEST_CHECK_STATIC_ASSERTIONS
11 #include "main.h"
12 
13 // This file tests the basic selfadjointView API,
14 // the related products and decompositions are tested in specific files.
15 
16 template<typename MatrixType> void selfadjoint(const MatrixType& m)
17 {
18  typedef typename MatrixType::Scalar Scalar;
19 
20  Index rows = m.rows();
21  Index cols = m.cols();
22 
23  MatrixType m1 = MatrixType::Random(rows, cols),
24  m2 = MatrixType::Random(rows, cols),
25  m3(rows, cols),
26  m4(rows, cols);
27 
28  m1.diagonal() = m1.diagonal().real().template cast<Scalar>();
29 
30  // check selfadjoint to dense
31  m3 = m1.template selfadjointView<Upper>();
32  VERIFY_IS_APPROX(MatrixType(m3.template triangularView<Upper>()), MatrixType(m1.template triangularView<Upper>()));
33  VERIFY_IS_APPROX(m3, m3.adjoint());
34 
35  m3 = m1.template selfadjointView<Lower>();
37  VERIFY_IS_APPROX(m3, m3.adjoint());
38 
39  m3 = m1.template selfadjointView<Upper>();
40  m4 = m2;
41  m4 += m1.template selfadjointView<Upper>();
42  VERIFY_IS_APPROX(m4, m2+m3);
43 
44  m3 = m1.template selfadjointView<Lower>();
45  m4 = m2;
46  m4 -= m1.template selfadjointView<Lower>();
47  VERIFY_IS_APPROX(m4, m2-m3);
48 
49  VERIFY_RAISES_STATIC_ASSERT(m2.template selfadjointView<StrictlyUpper>());
50  VERIFY_RAISES_STATIC_ASSERT(m2.template selfadjointView<UnitLower>());
51 }
52 
53 void bug_159()
54 {
55  Matrix3d m = Matrix3d::Random().selfadjointView<Lower>();
57 }
58 
60 {
61  for(int i = 0; i < g_repeat ; i++)
62  {
63  int s = internal::random<int>(1,EIGEN_TEST_MAX_SIZE);
64 
67  CALL_SUBTEST_3( selfadjoint(Matrix3cf()) );
68  CALL_SUBTEST_4( selfadjoint(MatrixXcd(s,s)) );
70 
72  }
73 
75 }
bug_159
void bug_159()
Definition: selfadjoint.cpp:53
s
RealScalar s
Definition: level1_cplx_impl.h:126
MatrixType
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
selfadjoint
void selfadjoint(const MatrixType &m)
Definition: selfadjoint.cpp:16
m1
Matrix3d m1
Definition: IOFormat.cpp:2
rows
int rows
Definition: Tutorial_commainit_02.cpp:1
CALL_SUBTEST_4
#define CALL_SUBTEST_4(FUNC)
Definition: split_test_helper.h:22
m2
MatrixType m2(n_dims)
CALL_SUBTEST_3
#define CALL_SUBTEST_3(FUNC)
Definition: split_test_helper.h:16
CALL_SUBTEST_1
#define CALL_SUBTEST_1(FUNC)
Definition: split_test_helper.h:4
EIGEN_UNUSED_VARIABLE
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:1076
EIGEN_DECLARE_TEST
EIGEN_DECLARE_TEST(selfadjoint)
Definition: selfadjoint.cpp:59
CALL_SUBTEST_5
#define CALL_SUBTEST_5(FUNC)
Definition: split_test_helper.h:28
Eigen::g_repeat
static int g_repeat
Definition: main.h:169
m
Matrix3f m
Definition: AngleAxis_mimic_euler.cpp:1
VERIFY_RAISES_STATIC_ASSERT
#define VERIFY_RAISES_STATIC_ASSERT(a)
Definition: main.h:344
Eigen::Lower
@ Lower
Definition: Constants.h:209
CALL_SUBTEST_2
#define CALL_SUBTEST_2(FUNC)
Definition: split_test_helper.h:10
VERIFY_IS_APPROX
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:15
m3
static const DiscreteKey m3(M(3), 2)
main.h
EIGEN_TEST_MAX_SIZE
#define EIGEN_TEST_MAX_SIZE
Definition: boostmultiprec.cpp:16
Eigen::Matrix
The matrix class, also used for vectors and row-vectors.
Definition: 3rdparty/Eigen/Eigen/src/Core/Matrix.h:178
cols
int cols
Definition: Tutorial_commainit_02.cpp:1
triangularView< Lower >
A triangularView< Lower >().adjoint().solveInPlace(B)
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
TEST_SET_BUT_UNUSED_VARIABLE
#define TEST_SET_BUT_UNUSED_VARIABLE(X)
Definition: main.h:121
Scalar
SCALAR Scalar
Definition: bench_gemm.cpp:46
Eigen::Index
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74


gtsam
Author(s):
autogenerated on Fri Nov 1 2024 03:35:02