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_) {
61 typedef AT AtomicType;
67 Matrix() : memory(), ele(0), n(0), kl(0), ku(0) {
79 Matrix(
int n_,
int kl_,
int ku_,
Noinit) : memory(n_*(kl_+ku_+1)), ele((AT*)memory.get()), n(n_), kl(kl_), ku(ku_) { }
80 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); }
81 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); }
82 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_) { }
83 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); }
84 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); }
105 Matrix(
int n_,
int kl_,
int ku_, AT* ele_) : memory(), ele(ele_), n(n_), kl(kl_), ku(ku_) {
120 Matrix<GeneralBand,Ref,Ref,AT>& resize(
int n_,
int kl_,
int ku_, Noinit) {
121 n = n_; kl = kl_; ku = ku_;
122 memory.resize(n*(kl+ku+1));
123 ele = (AT*)memory.get();
127 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); }
129 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); }
139 inline Matrix<GeneralBand,Ref,Ref,AT>& operator=(
const Matrix<GeneralBand,Ref,Ref,AT> &A);
147 inline Matrix<GeneralBand,Ref,Ref,AT>& operator<<(const Matrix<GeneralBand,Ref,Ref,AT> &A);
155 inline Matrix<GeneralBand,Ref,Ref,AT>&
operator>>(
const Matrix<GeneralBand,Ref,Ref,AT> &A);
169 #ifndef FMATVEC_NO_BOUNDS_CHECK
179 return ((i-j>kl) || (i-j<-ku)) ? zero : ele[ku+i+j*(kl+ku)];
221 return CblasColMajor;
255 inline Matrix<GeneralBand,Ref,Ref,AT>& init(Eye,
const AT &a=1);
256 inline Matrix<GeneralBand,Ref,Ref,AT>& init(Noinit,
const AT &a=0) {
return *
this; }
262 inline operator std::vector<std::vector<AT> >();
281 ele = (AT*)memory.get();
284 #ifndef FMATVEC_NO_SIZE_CHECK
300 ele = (AT*)memory.get();
310 for(
int i=0; i<kl+ku+1; i++)
311 for(
int j=0; j<n; j++)
312 ele[i+j*(kl+ku+1)] = val;
318 for(
int i=0; i<n; i++)
325 #ifndef FMATVEC_NO_BOUNDS_CHECK
331 return Vector<Ref,AT>(n-abs(i),ku+kl+1,
true,memory,ele+ku-i + (i>0?i:0)*(kl+ku+1));
337 #ifndef FMATVEC_NO_BOUNDS_CHECK
342 return Vector<Ref,AT>(n-abs(i),ku+kl+1,
true,memory,ele+ku-i + (i>0?i:0)*(kl+ku+1));
357 std::vector<std::vector<AT> > ret(rows());
358 for(
int r=0; r<rows(); r++) {
359 ret[r].resize(cols());
360 for(
int c=0; c<cols(); c++)
361 ret[r][c]=
operator()(r,c);
371 for(
int i=0; i<kl+ku+1; i++)
372 for(
int j=0; j<n; j++)
373 ele[i+j*(kl+ku+1)] = A.ele[i+j*(kl+ku+1)];
const CBLAS_ORDER blasOrder() const
Storage convention.
Definition: band_matrix.h:220
This is the basic matrix class for arbitrary matrices.
Definition: fmatvec.h:41
AT & operator()(int i, int j)
Standard constructor.
Definition: matrix.h:86
Matrix(const Matrix< GeneralBand, Ref, Ref, AT > &A)
Copy Constructor.
Definition: band_matrix.h:93
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:187
Matrix(int n_, int kl_, int ku_, AT *ele_)
Regular Constructor.
Definition: band_matrix.h:105
~Matrix()
Destructor.
Definition: band_matrix.h:110
Matrix()
Standard constructor.
Definition: band_matrix.h:67
std::istream & operator>>(std::istream &is, Matrix< Type, Row, Col, AT > &A)
Matrix input.
Definition: matrix.h:171
const AT & operator()(int i, int j) const
Element operator.
Definition: band_matrix.h:168
Matrix< GeneralBand, Ref, Ref, AT > & init(const AT &a=0)
Initialization.
Definition: band_matrix.h:309
int rows() const
Number of rows.
Definition: band_matrix.h:205
int size() const
Size.
Definition: band_matrix.h:199
int cols() const
Number of columns.
Definition: band_matrix.h:211
const AT * operator()() const
Pointer operator.
Definition: band_matrix.h:193
This is a vector class of general shape in dense storage format.
Definition: vector.h:39