22 #ifndef general_band_matrix_h
23 #define general_band_matrix_h
54 Matrix(
int n_,
int kl_,
int ku_, Memory<AT> memory_,
const AT* ele_) : memory(memory_), ele((AT*)ele_), n(n_), kl(kl_), ku(ku_) {
65 Matrix() : memory(), ele(0), n(0), kl(0), ku(0) {
77 Matrix(
int n_,
int kl_,
int ku_,
Noinit) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { }
78 Matrix(
int n_,
int kl_,
int ku_, Init ini=INIT,
const AT &a=0) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { init(a); }
79 Matrix(
int n_,
int kl_,
int ku_, Eye ini,
const AT &a=1) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { init(ini,a); }
80 Matrix(
int m_,
int n_,
int kl_,
int ku_, Noinit) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { }
81 Matrix(
int m_,
int n_,
int kl_,
int ku_, Init ini=INIT,
const AT &a=0) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { init(a); }
82 Matrix(
int m_,
int n_,
int kl_,
int ku_, Eye ini,
const AT &a=1) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { init(ini,a); }
103 Matrix(
int n_,
int kl_,
int ku_, AT* ele_) : memory(), ele(ele_), n(n_), kl(kl_), ku(ku_) {
118 Matrix<GeneralBand,Ref,Ref,AT>& resize(
int n_,
int kl_,
int ku_, Noinit) {
119 n = n_; kl = kl_; ku = ku_;
120 memory.resize(n*(kl+ku+1));
121 ele = (AT*)memory.get();
125 Matrix<GeneralBand,Ref,Ref,AT>& resize(
int n,
int kl,
int ku=0, Init ini=INIT,
const AT &a=0) {
return resize(n,kl,ku,Noinit()).
init(a); }
127 Matrix<GeneralBand,Ref,Ref,AT>& resize(
int n,
int kl,
int ku, Eye ini,
const AT &a=1) {
return resize(n,kl,ku,Noinit()).
init(a); }
137 inline Matrix<GeneralBand,Ref,Ref,AT>& operator=(
const Matrix<GeneralBand,Ref,Ref,AT> &A);
145 inline Matrix<GeneralBand,Ref,Ref,AT>& operator<<(const Matrix<GeneralBand,Ref,Ref,AT> &A);
153 inline Matrix<GeneralBand,Ref,Ref,AT>&
operator>>(
const Matrix<GeneralBand,Ref,Ref,AT> &A);
167 #ifndef FMATVEC_NO_BOUNDS_CHECK
177 return ((i-j>kl) || (i-j<-ku)) ? zero : ele[ku+i+j*(kl+ku)];
219 return CblasColMajor;
253 inline Matrix<GeneralBand,Ref,Ref,AT>& init(Eye,
const AT &a=1);
254 inline Matrix<GeneralBand,Ref,Ref,AT>& init(Noinit,
const AT &a=0) {
return *
this; }
260 inline operator std::vector<std::vector<AT> >();
279 ele = (AT*)memory.get();
282 #ifndef FMATVEC_NO_SIZE_CHECK
298 ele = (AT*)memory.get();
308 for(
int i=0; i<kl+ku+1; i++)
309 for(
int j=0; j<n; j++)
310 ele[i+j*(kl+ku+1)] = val;
316 for(
int i=0; i<n; i++)
323 #ifndef FMATVEC_NO_BOUNDS_CHECK
329 return Vector<Ref,AT>(n-abs(i),ku+kl+1,
true,memory,ele+ku-i + (i>0?i:0)*(kl+ku+1));
335 #ifndef FMATVEC_NO_BOUNDS_CHECK
340 return Vector<Ref,AT>(n-abs(i),ku+kl+1,
true,memory,ele+ku-i + (i>0?i:0)*(kl+ku+1));
355 std::vector<std::vector<AT> > ret(rows());
356 for(
int r=0; r<rows(); r++) {
357 ret[r].resize(cols());
358 for(
int c=0; c<cols(); c++)
359 ret[r][c]=
operator()(r,c);
369 for(
int i=0; i<kl+ku+1; i++)
370 for(
int j=0; j<n; j++)
371 ele[i+j*(kl+ku+1)] = A.ele[i+j*(kl+ku+1)];
const CBLAS_ORDER blasOrder() const
Storage convention.
Definition: band_matrix.h:218
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:56
AT & operator()(int i, int j)
Standard constructor.
Definition: matrix.h:85
Matrix(const Matrix< GeneralBand, Ref, Ref, AT > &A)
Copy Constructor.
Definition: band_matrix.h:91
This is a matrix class for general band matrices.
Definition: band_matrix.h:40
Shape class for general band matrices.
Definition: types.h:108
AT * operator()()
Pointer operator.
Definition: band_matrix.h:185
Matrix(int n_, int kl_, int ku_, AT *ele_)
Regular Constructor.
Definition: band_matrix.h:103
~Matrix()
Destructor.
Definition: band_matrix.h:108
Matrix()
Standard constructor.
Definition: band_matrix.h:65
std::istream & operator>>(std::istream &is, Matrix< Type, Row, Col, AT > &A)
Matrix input.
Definition: matrix.h:170
const AT & operator()(int i, int j) const
Element operator.
Definition: band_matrix.h:166
Matrix< GeneralBand, Ref, Ref, AT > & init(const AT &a=0)
Initialization.
Definition: band_matrix.h:307
int rows() const
Number of rows.
Definition: band_matrix.h:203
int size() const
Size.
Definition: band_matrix.h:197
int cols() const
Number of columns.
Definition: band_matrix.h:209
const AT * operator()() const
Pointer operator.
Definition: band_matrix.h:191
This is a vector class of general shape in dense storage format.
Definition: vector.h:39