22#ifndef var_square_matrix_h
23#define var_square_matrix_h
25#include "fixed_general_matrix.h"
43 static constexpr bool isVector {
false};
45 using value_type = AT;
58 explicit SquareMatrix(
int m, Init ini=INIT,
const AT &a=AT()) : Matrix<General,Var,Var,AT>(m,m,ini,a) { }
59 explicit SquareMatrix(
int m, Eye ini,
const AT &a=1) : Matrix<General,Var,Var,AT>(m,m,ini,a) { }
62 SquareMatrix(SquareMatrix<Var,AT> &&src) noexcept : Matrix<General,Var,Var,AT>(std::move(src)) {}
63 SquareMatrix<Var,AT>& operator=(SquareMatrix<Var,AT> &&src)
noexcept {
93 template<
class Type,
class Row,
class Col>
95 FMATVEC_ASSERT(A.
rows() == A.
cols(), AT);
100 SquareMatrix<Var,AT>& resize(
int m, Noinit) {
101 Matrix<General,Var,Var,AT>::resize(m,m,Noinit());
105 SquareMatrix<Var,AT>& resize(
int m, Init ini=INIT,
const AT &a=AT()) {
106 Matrix<General,Var,Var,AT>::resize(m,m,ini,a);
110 SquareMatrix<Var,AT>& resize(
int m, Eye ini,
const AT &a=1) {
111 Matrix<General,Var,Var,AT>::resize(m,m,ini,a);
119 throw std::runtime_error(
"Cannot resize a square matrix with different dimensions for rows and columns.");
152 FMATVEC_ASSERT(A.
rows() == A.
cols(), AT);
157 SquareMatrix<Var,AT>& operator<<=(SquareMatrix<Var,AT> &&src) {
158 FMATVEC_ASSERT(src.rows() == src.cols(), AT);
168 int rows()
const {
return M;}
169 int cols()
const {
return M;}
171 using Matrix<General,Var,Var,AT>::operator();
172 using Matrix<General,Var,Var,AT>::e;
178 explicit inline operator std::vector<std::vector<AT>>()
const;
185 explicit SquareMatrix(
const std::vector<std::vector<AT>> &m);
187 inline const SquareMatrix<Var,AT> T()
const;
191 inline const SquareMatrix<Var,AT> SquareMatrix<Var,AT>::T()
const {
192 SquareMatrix<Var,AT> A(size(),NONINIT);
193 for(
int i=0; i<M; i++)
194 for(
int j=0; j<M; j++)
201 std::vector<std::vector<AT>> ret(rows(),std::vector<AT>(cols()));
202 for(
int r=0; r<size(); r++) {
203 for(
int c=0; c<size(); c++)
211 for(
int r=0; r<rows(); r++) {
212 if(
static_cast<int>(m[r].size())!=cols())
213 throw std::runtime_error(
"The rows of the input have different length.");
214 for(
int c=0; c<cols(); c++)
Shape class for general matrices.
Definition: types.h:116
Matrix< General, Var, Var, AT > & operator<<=(const Matrix< Type, Row, Col, AT > &A)
Matrix assignment.
Definition: var_general_matrix.h:200
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:52
int rows() const
Number of rows.
int cols() const
Number of columns.
This is a matrix class of general quadratic matrices.
Definition: var_square_matrix.h:38
int size() const
Size.
Definition: var_square_matrix.h:167
SquareMatrix()
Standard constructor.
Definition: var_square_matrix.h:52
void resize(int m, int n)
Definition: var_square_matrix.h:117
SquareMatrix(const SquareMatrix< Var, AT > &A)
Copy Constructor.
Definition: var_square_matrix.h:78
SquareMatrix(const SquareMatrix< Row, AT > &A)
Copy Constructor.
Definition: var_square_matrix.h:86
SquareMatrix(const Matrix< Type, Row, Col, AT > &A)
Copy Constructor.
Definition: var_square_matrix.h:94
SquareMatrix< Var, AT > & operator=(const SquareMatrix< Var, AT > &A)
Assignment operator.
Definition: var_square_matrix.h:129
Dummy shape class for square matrices.
Definition: types.h:173
Namespace fmatvec.
Definition: _memory.cc:28