bandmatrix.cpp File Reference
#include "main.h"

Functions

template<typename MatrixType >
void bandmatrix (const MatrixType &_m)
 
 EIGEN_DECLARE_TEST (bandmatrix)
 

Function Documentation

◆ bandmatrix()

template<typename MatrixType >
void bandmatrix ( const MatrixType _m)
13  {
14  typedef typename MatrixType::Scalar Scalar;
15  typedef typename NumTraits<Scalar>::Real RealScalar;
16  typedef Matrix<Scalar, Dynamic, Dynamic> DenseMatrixType;
17 
18  Index rows = _m.rows();
19  Index cols = _m.cols();
20  Index supers = _m.supers();
21  Index subs = _m.subs();
22 
23  MatrixType m(rows, cols, supers, subs);
24 
25  DenseMatrixType dm1(rows, cols);
26  dm1.setZero();
27 
28  m.diagonal().setConstant(123);
29  dm1.diagonal().setConstant(123);
30  for (int i = 1; i <= m.supers(); ++i) {
31  m.diagonal(i).setConstant(static_cast<RealScalar>(i));
32  dm1.diagonal(i).setConstant(static_cast<RealScalar>(i));
33  }
34  for (int i = 1; i <= m.subs(); ++i) {
35  m.diagonal(-i).setConstant(-static_cast<RealScalar>(i));
36  dm1.diagonal(-i).setConstant(-static_cast<RealScalar>(i));
37  }
38  // std::cerr << m.m_data << "\n\n" << m.toDense() << "\n\n" << dm1 << "\n\n\n\n";
39  VERIFY_IS_APPROX(dm1, m.toDenseMatrix());
40 
41  for (int i = 0; i < cols; ++i) {
42  m.col(i).setConstant(static_cast<RealScalar>(i + 1));
43  dm1.col(i).setConstant(static_cast<RealScalar>(i + 1));
44  }
45  Index d = (std::min)(rows, cols);
46  Index a = std::max<Index>(0, cols - d - supers);
47  Index b = std::max<Index>(0, rows - d - subs);
48  if (a > 0) dm1.block(0, d + supers, rows, a).setZero();
49  dm1.block(0, supers + 1, cols - supers - 1 - a, cols - supers - 1 - a).template triangularView<Upper>().setZero();
50  dm1.block(subs + 1, 0, rows - subs - 1 - b, rows - subs - 1 - b).template triangularView<Lower>().setZero();
51  if (b > 0) dm1.block(d + subs, 0, b, cols).setZero();
52  // std::cerr << m.m_data << "\n\n" << m.toDense() << "\n\n" << dm1 << "\n\n";
53  VERIFY_IS_APPROX(dm1, m.toDenseMatrix());
54 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
#define min(a, b)
Definition: datatypes.h:22
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
const Scalar * a
Definition: level2_cplx_impl.h:32
int * m
Definition: level2_cplx_impl.h:294
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217

References a, b, cols, i, m, min, rows, and VERIFY_IS_APPROX.

Referenced by EIGEN_DECLARE_TEST().

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( bandmatrix  )
58  {
59  for (int i = 0; i < 10 * g_repeat; i++) {
60  Index rows = internal::random<Index>(1, 10);
61  Index cols = internal::random<Index>(1, 10);
62  Index sups = internal::random<Index>(0, cols - 1);
63  Index subs = internal::random<Index>(0, rows - 1);
65  }
66 }
void bandmatrix(const MatrixType &_m)
Definition: bandmatrix.cpp:13
Represents a rectangular matrix with a banded storage.
Definition: BandMatrix.h:193
#define CALL_SUBTEST(FUNC)
Definition: main.h:382
static int g_repeat
Definition: main.h:191

References bandmatrix(), CALL_SUBTEST, cols, Eigen::g_repeat, i, and rows.