6 #ifndef MYRAMATH_DENSE_MATRIX_H 7 #define MYRAMATH_DENSE_MATRIX_H 14 #include <myramath/utility/detail/LIBPUBLIC.h> 23 #ifdef MYRAMATH_ENABLE_CPP11 24 #include <initializer_list> 33 template<
int Arity,
class Number>
class Expression;
34 template<
class Number>
class Matrix;
35 template<
class T>
class Array1;
36 template<
class T>
class Array2;
39 template<
class Number>
class LIBPUBLIC Matrix
53 explicit Matrix(
int I,
int J);
55 explicit Matrix(std::pair<int,int> IJ);
67 #ifdef MYRAMATH_ENABLE_CPP11 93 std::pair<int,int> size()
const;
96 uint64_t n_words()
const;
131 const Number& operator () (
int i,
int j)
const;
133 Number& operator () (
int i,
int j) ;
137 const Number& at(
int i,
int j)
const;
139 Number& at(
int i,
int j) ;
175 CPair split_top(
int i)
const;
177 Pair split_top(
int i) ;
193 CPair split_bottom(
int i)
const;
195 Pair split_bottom(
int i) ;
231 CPair split_left(
int j)
const;
233 Pair split_left(
int j) ;
249 CPair split_right(
int j)
const;
251 Pair split_right(
int j) ;
258 template<
class Functor>
void transform(
const Functor& f)
259 { this->range().transform(f); }
264 { this->range().transform_triangle(f,uplo); }
269 { this->range().transform_diagonal(f); }
297 void operator *= (Number alpha);
300 void operator /= (Number alpha);
322 #ifdef MYRAMATH_ENABLE_CPP11 323 static Matrix<Number> fill_cmajor(
int I,
int J, std::initializer_list<Number> list);
325 static Matrix<Number> fill_rmajor(
int I,
int J, std::initializer_list<Number> list);
334 void initialize(
int in_I,
int in_J);
337 size_t offset(
int i,
int j)
const;
344 typedef std::vector<Number> Contents;
351 {
public:
typedef Number type; };
Container of values, allows random (i,j) access.
Definition: Array2.h:30
Number random()
Generate random real/complex Numbers, uniformly distributed over [-1,1].
Reflects Number trait for a Container, containers of Numbers (Matrix's, Vector's, etc) should special...
Definition: Number.h:55
void transform(const Functor &f)
Overwrites every A(i,j) in this Matrix with f(A(i,j)).
Definition: Matrix.h:258
Interface class for representing subranges of dense Matrix's.
Interface class for representing subranges of dense Vector's.
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
Represents a mutable VectorRange.
Definition: axpy.h:21
void transform_triangle(const Functor &f, char uplo)
Overwrites every A(i,j) in the 'U'pper or 'L'ower triangle of this Matrix with f(A(i,j)).
Definition: Matrix.h:263
Represents a const MatrixRange.
Definition: bothcat.h:22
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Various utility functions/classes related to scalar Number types.
std::pair< MatrixRange< Number >, MatrixRange< Number > > Pair
Useful typedefs.
Definition: Matrix.h:44
Represents a mutable MatrixRange.
Definition: conjugate.h:26
void transform_diagonal(const Functor &f)
Overwrites every A(ij,ij) on the diagonal of this Matrix with f(A(ij,ij)).
Definition: Matrix.h:268
Represents a const VectorRange.
Definition: axpy.h:20
Container of values, allows random (i) access.
Definition: Array1.h:32
Expression< 1, NumberC > make_complex(const Expression< 1, NumberS > &A)
Promotes a real Expression into a complex one.
Definition: functions_complex.cpp:122
Given an index (i,j,etc), returns a value.
Definition: arithmetic.h:19
Represents a const intRange.
Definition: intRange.h:142
float NumberS
Useful typedefs.
Definition: Number.h:21