template<typename T = double>
class LinAlg::Matrix< T >
Row-major dense matrix with arithmetic and linear algebra support.
Owns its data as a contiguous std::vector<T> stored in row-major order. Supports scalar types T = float, double, std::complex<float>, and std::complex<double>.
Provides:
- Element access via
operator[] (no bounds checking) and at()/operator() (bounds-checked).
- Basic arithmetic: addition, subtraction, scalar multiply/divide, and matrix multiplication via BLAS.
- Linear algebra via GSL:
determinant(), inverse(), transpose().
- Conversion utilities:
conj(), real(), imag(), complex().
- Non-owning views:
row_view(), column_view(), matrix_view().
- GSL interop:
as_gsl_view().
- Note
- The scalar
+= and -= operators treat the scalar as a multiple of the identity: M += a adds a to all diagonal elements. Only valid for square matrices.
|
| | Matrix () |
| | Default initialiser.
|
| |
| | Matrix (std::size_t rows, std::size_t cols) |
| | Initialise a blank matrix rows*cols, filled with 0.
|
| |
| | Matrix (std::size_t rows, std::size_t cols, const T &value) |
| | Initialise a matrix rows*cols, filled with 'value'.
|
| |
| | Matrix (std::size_t dimension) |
| | Initialise a blank square matrix dimension*dimension, filled with 0.
|
| |
| | Matrix (std::initializer_list< std::initializer_list< T > > ll) |
| | Initialise a matrix from initialiser list. {{},{},{}}. Each row must be same length.
|
| |
| | Matrix (std::size_t rows, std::size_t cols, std::initializer_list< T > l) |
| | Initialise a matrix from single initialiser list. {...}.
|
| |
| | Matrix (std::size_t rows, std::size_t cols, std::vector< T > &&v) |
| | Initialise a matrix from single initialiser list. {...}.
|
| |
| | Matrix (std::size_t rows, std::size_t cols, const std::vector< T > &v) |
| | Initialise a matrix from single initialiser list. {...}.
|
| |
| void | resize (std::size_t rows, std::size_t cols) |
| | Resizes matrix to new dimension; all values reset to default.
|
| |
| void | resize (std::size_t rows, std::size_t cols, const T &value) |
| | Resizes matrix to new dimension; all values reset to 'value'.
|
| |
| std::size_t | rows () const |
| | Return rows [major index size].
|
| |
| std::size_t | cols () const |
| | Return columns [minor index size].
|
| |
| std::size_t | size () const |
| | Return rows*columns [total array size].
|
| |
| bool | empty () const |
| | Bool - is empty? (same as size==0)
|
| |
| T * | data () |
| | Pointer to first element; for std::complex<T> this is complex<T>*, not T*.
|
| |
| const T * | data () const |
| | Const pointer to first element; for std::complex<T> this is const complex<T>*, not const T*.
|
| |
| T * | operator[] (std::size_t i) |
| | [] index access (no range checking). [i] returns pointer to ith row, mutable
|
| |
| const T * | operator[] (std::size_t i) const |
| | [] index access (no range checking). [i] returns const pointer to ith row
|
| |
| T & | at (std::size_t row_i, std::size_t col_j) |
| | at(i,j): element access with range checking, mutable
|
| |
| T | at (std::size_t row_i, std::size_t col_j) const |
| | at(i,j): element access with range checking, const
|
| |
| const T & | atc (std::size_t row_i, std::size_t col_j) const |
| | at(i,j): element access with range checking, const ref
|
| |
| T & | operator() (std::size_t i, std::size_t j) |
| | () index access with range checking, mutable
|
| |
| T | operator() (std::size_t i, std::size_t j) const |
| | () index access with range checking, const
|
| |
| auto | begin () |
| | iterators for underlying std::vector (entire data)
|
| |
|
auto | cbegin () const |
| |
|
auto | end () |
| |
|
auto | cend () const |
| |
| const T * | row (std::size_t row) const |
| | Returns raw c pointer to start of a row.
|
| |
| View< T > | row_view (std::size_t row) |
| | Returns a mutable 'View' of a row.
|
| |
| View< const T > | row_view (std::size_t row) const |
| | Returns an immutable 'View' of a row.
|
| |
| View< T > | column_view (std::size_t col) |
| | Returns a mutable 'View' of a column.
|
| |
| View< const T > | column_view (std::size_t col) const |
| | Returns an immutable 'View' of a column.
|
| |
| Matrix_view< T > | matrix_view () |
| | Returns a mutable view of the entire matrix (no ownership, no resize)
|
| |
| Matrix_view< const T > | matrix_view () const |
| | Returns an immutable view of the entire matrix (no ownership, no resize)
|
| |
| auto | as_gsl_view () |
| | Returns a GSL matrix view for use with GSL functions (no copy).
|
| |
| auto | as_gsl_view () const |
| | Const GSL matrix view; see as_gsl_view()
|
| |
| T | determinant () const |
| | Returns the determinant via LU decomposition (GSL).
|
| |
| Matrix< T > & | invert_in_place () |
| | Inverts the matrix in place via LU decomposition (GSL).
|
| |
| Matrix< T > | inverse () const |
| | Returns inverse of the matrix; original is unchanged.
|
| |
| Matrix< T > | transpose () const |
| | Returns the transpose of the matrix.
|
| |
| Matrix< T > & | make_identity () |
| | Constructs a diagonal unit matrix (identity), in place; only for square.
|
| |
| Matrix< T > & | zero () |
| | Sets all elements to zero, in place.
|
| |
| Matrix< T > | conj () const |
| | Returns conjugate of matrix.
|
| |
| auto | real () const |
| | Returns real part of complex matrix (changes type; returns a real matrix)
|
| |
| auto | imag () const |
| | Returns imag part of complex matrix (changes type; returns a real matrix)
|
| |
| auto | complex () const |
| | Converts a real to complex matrix (changes type; returns a complex matrix)
|
| |
| Matrix< T > & | conj_in_place () |
| | Conjugates matrix, in place.
|
| |
| Matrix< T > & | mult_elements_by (const Matrix< T > &a) |
| | Elementwise multiply in place: M_ij *= a_ij.
|
| |
| Matrix< T > & | operator+= (const Matrix< T > &rhs) |
| | In-place elementwise addition; dimensions must match.
|
| |
| Matrix< T > & | operator-= (const Matrix< T > &rhs) |
| | In-place elementwise subtraction; dimensions must match.
|
| |
| Matrix< T > & | operator*= (const T x) |
| | In-place scalar multiply: M_ij *= x.
|
| |
| Matrix< T > & | operator/= (const T x) |
| | In-place scalar divide: M_ij /= x.
|
| |
| Matrix< T > & | operator+= (T aI) |
| | M += aI: adds a to diagonal elements (scalar treated as a*Identity)
|
| |
| Matrix< T > & | operator-= (T aI) |
| | M -= aI: subtracts a from diagonal elements (scalar treated as a*Identity)
|
| |
|
| Matrix< T > | mult_elements (Matrix< T > a, const Matrix< T > &b) |
| | Returns new matrix C with C_ij = A_ij * B_ij (elementwise product).
|
| |
| Matrix< T > | operator+ (Matrix< T > lhs, const Matrix< T > &rhs) |
| | Elementwise addition: returns M + N.
|
| |
| Matrix< T > | operator- (Matrix< T > lhs, const Matrix< T > &rhs) |
| | Elementwise subtraction: returns M - N.
|
| |
| Matrix< T > | operator* (const T x, Matrix< T > rhs) |
| | Scalar multiply: returns x * M.
|
| |
| Matrix< T > | operator* (Matrix< T > lhs, const T x) |
| | Scalar multiply: returns M * x.
|
| |
| Matrix< T > | operator/ (Matrix< T > lhs, const T x) |
| | Scalar divide: returns M / x.
|
| |
| Matrix< T > | operator+ (Matrix< T > M, T aI) |
| | Returns M + aI (adds a to diagonal)
|
| |
| Matrix< T > | operator- (Matrix< T > M, T aI) |
| | Returns M - aI (subtracts a from diagonal)
|
| |
| template<typename U > |
| Matrix< U > | operator* (const Matrix< U > &a, const Matrix< U > &b) |
| | Matrix multiplication: C_ij = sum_k A_ik*B_kj.
|
| |
| template<typename U > |
| std::ostream & | operator<< (std::ostream &os, const Matrix< U > &a) |
| | Prints matrix elements row by row to output stream.
|
| |