88 std::vector< Sparse_Vector<T> > S_;
107 num_rows_(
M), num_cols_(
N), num_nonzeros_(0),
108 internal_state_(1) {};
113 const Subscript *
r,
const Subscript *
c):
126 int is_closed() {
return internal_state_; }
128 void insert(
const T&
val, Subscript i, Subscript j)
130 if (internal_state_ == 0)
return;
133 S_[i].insert(
val, j);
137 void insert(Subscript
nz,
const T*
val,
const Subscript *i,
140 if (internal_state_ == 0)
return;
148 void insert_base_one(
const T&
val, Subscript i, Subscript j)
153 void insert_base_one(Subscript
nz,
const T*
val,
const Subscript *i,
174 inline int num_rows()
const {
return num_rows_;}
175 inline int num_cols()
const {
return num_cols_;}
176 inline int num_columns()
const {
return num_cols_;}
177 int num_nonzeros()
const {
return num_nonzeros_;}
182 int minMN = num_rows() < num_columns() ? num_rows() : num_columns();
185 for (
int i=0; i<
minMN; i++)
187 for (
typename Sparse_Vector<T>::const_iterator
p = S_[i].begin();
188 p < S_[i].end();
p++ )
204 for (
int i=0; i<
M; i++)
206 y[i] = dot_product(S_[i],
x);
212 inline double norm()
const
215 for (
int i=0; i<num_rows_; i++)
217 for (
typename Sparse_Vector<T>::const_iterator
p = S_[i].begin();
218 p < S_[i].end();
p++ )
220 sum +=
p->value() *
p->value();
226 std::ostream & print(std::ostream &s)
const
228 for (
int i=0; i<num_rows_; i++)
230 for (
typename Sparse_Vector<T>::const_iterator
p = S_[i].begin();
231 p < S_[i].end();
p++ )
233 s <<
"( " <<
p->value() <<
" , " << i <<
", " <<
p->index() <<
" )\n";
240 std::ostream & print_base_one(std::ostream &s)
const
242 for (
int i=0; i<num_rows_; i++)
244 for (
typename Sparse_Vector<T>::const_iterator
p = S_[i].begin();
245 p < S_[i].end();
p++ )
247 s <<
"( "<<
p->value()<<
" , "<<i+1<<
", "<<
p->index()+1 <<
" )\n";