#include <infinite_vector.h>
Classes | |
class | const_iterator |
class | const_reverse_iterator |
struct | decreasing_order |
Public Member Functions | |
InfiniteVector () | |
InfiniteVector (const InfiniteVector< C, I > &v) | |
const_iterator | begin () const |
const_iterator | end () const |
const_reverse_iterator | rbegin () const |
const_reverse_iterator | rend () const |
InfiniteVector< C, I > & | operator= (const InfiniteVector< C, I > &v) |
void | swap (InfiniteVector< C, I > &v) |
bool | empty () const |
void | clear () |
bool | operator== (const InfiniteVector< C, I > &v) const |
bool | operator!= (const InfiniteVector< C, I > &v) const |
C | operator[] (const I &index) const |
C | get_coefficient (const I &index) const |
C & | operator[] (const I &index) |
void | set_coefficient (const I &index, const C value) |
size_t | size () const |
void | support (std::set< I > &supp) const |
void | clip (const std::set< I > &supp) |
void | compress (const double eta=1e-15) |
void | add_coefficient (const I &index, const C increment) |
void | add (const InfiniteVector< C, I > &v) |
void | add (const C s, const InfiniteVector< C, I > &v) |
void | sadd (const C s, const InfiniteVector< C, I > &v) |
void | scale (const C s) |
void | scale (const InfiniteDiagonalMatrix< C, I > *D, const int k=1) |
InfiniteVector< C, I > & | operator+= (const InfiniteVector< C, I > &v) |
void | subtract (const InfiniteVector< C, I > &v) |
InfiniteVector< C, I > & | operator-= (const InfiniteVector< C, I > &v) |
InfiniteVector< C, I > & | operator*= (const C c) |
InfiniteVector< C, I > & | operator/= (const C c) |
const C | operator* (const InfiniteVector< C, I > &v) const |
double | weak_norm (const double tau) const |
void | COARSE (const double eps, InfiniteVector< C, I > &v) const |
const double | wrmsqr_norm (const double atol, const double rtol, const InfiniteVector< C, I > &v, const InfiniteVector< C, I > &w) const |
A model class InfiniteVector<C,I> for inherently sparse, arbitrarily indexed vectors x = (x_i)_{i I} with entries from a (scalar) class C. InfiniteVector<C,I> may act as a realization of coefficient_type in the WaveletTL.
Although internally, we will model InfiniteVector as a map<I,C>, the access to the vector entries takes place by a nested iterator class (compare the deal.II matrix classes) which is STL-compatible.
MathTL::InfiniteVector< C, I >::InfiniteVector | ( | ) |
default constructor: yields empty (zero) vector
MathTL::InfiniteVector< C, I >::InfiniteVector | ( | const InfiniteVector< C, I > & | v | ) |
copy constructor
void MathTL::InfiniteVector< C, I >::add | ( | const InfiniteVector< C, I > & | v | ) |
in place summation *this += v
void MathTL::InfiniteVector< C, I >::add | ( | const C | s, |
const InfiniteVector< C, I > & | v | ||
) |
in place summation *this += s*v
void MathTL::InfiniteVector< C, I >::add_coefficient | ( | const I & | index, |
const C | increment | ||
) |
add a value to a vector entry
InfiniteVector< C, I >::const_iterator MathTL::InfiniteVector< C, I >::begin | ( | ) | const [inline] |
const_iterator pointing to the first nontrivial vector entry
Reimplemented in MathTL::LaurentPolynomial< R >, and MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
void MathTL::InfiniteVector< C, I >::clear | ( | ) | [inline] |
set infinite vector to zero
void MathTL::InfiniteVector< C, I >::clip | ( | const std::set< I > & | supp | ) |
clip the infinite vector to a given support set
void MathTL::InfiniteVector< C, I >::COARSE | ( | const double | eps, |
InfiniteVector< C, I > & | v | ||
) | const |
Computes optimal v such that \|*this-v\|_{}; "optimal" means taking the largest entries in modulus of *this. The vector v does not have to be initialized, it will be cleared at the beginning of the algorithm
void MathTL::InfiniteVector< C, I >::compress | ( | const double | eta = 1e-15 | ) |
set all values with modulus strictly below a threshold to zero (fabs<C> should exist)
bool MathTL::InfiniteVector< C, I >::empty | ( | ) | const [inline] |
test emptyness
InfiniteVector< C, I >::const_iterator MathTL::InfiniteVector< C, I >::end | ( | ) | const [inline] |
const_iterator pointing to one after the last nontrivial vector entry
Reimplemented in MathTL::LaurentPolynomial< R >, and MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
C MathTL::InfiniteVector< C, I >::get_coefficient | ( | const I & | index | ) | const |
read-only access to the vector entries
Reimplemented in MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
bool MathTL::InfiniteVector< C, I >::operator!= | ( | const InfiniteVector< C, I > & | v | ) | const [inline] |
non-equality test
const C MathTL::InfiniteVector< C, I >::operator* | ( | const InfiniteVector< C, I > & | v | ) | const |
inner product
InfiniteVector< C, I > & MathTL::InfiniteVector< C, I >::operator*= | ( | const C | c | ) |
in place multiplication with a scalar
Reimplemented in MathTL::LaurentPolynomial< R >, and MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
InfiniteVector< C, I > & MathTL::InfiniteVector< C, I >::operator+= | ( | const InfiniteVector< C, I > & | v | ) | [inline] |
in place summation
InfiniteVector< C, I > & MathTL::InfiniteVector< C, I >::operator-= | ( | const InfiniteVector< C, I > & | v | ) | [inline] |
in place subtraction
InfiniteVector< C, I > & MathTL::InfiniteVector< C, I >::operator/= | ( | const C | c | ) |
in place division by a (nontrivial) scalar
InfiniteVector< C, I > & MathTL::InfiniteVector< C, I >::operator= | ( | const InfiniteVector< C, I > & | v | ) |
assignment from another vector
bool MathTL::InfiniteVector< C, I >::operator== | ( | const InfiniteVector< C, I > & | v | ) | const [inline] |
equality test
C MathTL::InfiniteVector< C, I >::operator[] | ( | const I & | index | ) | const [inline] |
read-only access to the vector entries
C & MathTL::InfiniteVector< C, I >::operator[] | ( | const I & | index | ) |
read-write access to the vector entries
InfiniteVector< C, I >::const_reverse_iterator MathTL::InfiniteVector< C, I >::rbegin | ( | ) | const |
const_reverse_iterator pointing to the last nontrivial vector entry
Reimplemented in MathTL::LaurentPolynomial< R >, and MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
InfiniteVector< C, I >::const_reverse_iterator MathTL::InfiniteVector< C, I >::rend | ( | ) | const |
const_reverse_iterator pointing to one before the first last nontrivial vector entry
Reimplemented in MathTL::LaurentPolynomial< R >, and MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
void MathTL::InfiniteVector< C, I >::sadd | ( | const C | s, |
const InfiniteVector< C, I > & | v | ||
) |
in place summation *this = s*(*this) + v (AXPY level 1 BLAS routine)
void MathTL::InfiniteVector< C, I >::scale | ( | const C | s | ) |
in place scaling *this *= s
void MathTL::InfiniteVector< C, I >::scale | ( | const InfiniteDiagonalMatrix< C, I > * | D, |
const int | k = 1 |
||
) |
in place scaling with a diagonal matrix, *this = D^k (*this)
void MathTL::InfiniteVector< C, I >::set_coefficient | ( | const I & | index, |
const C | value | ||
) |
set a vector entry
Reimplemented in MathTL::MultivariateLaurentPolynomial< R, DIMENSION >.
size_t MathTL::InfiniteVector< C, I >::size | ( | ) | const [inline] |
number of nonzero entries
void MathTL::InfiniteVector< C, I >::subtract | ( | const InfiniteVector< C, I > & | v | ) |
in place subtraction *this -= v
void MathTL::InfiniteVector< C, I >::support | ( | std::set< I > & | supp | ) | const |
return support of the current vector as a set
void MathTL::InfiniteVector< C, I >::swap | ( | InfiniteVector< C, I > & | v | ) | [inline] |
swap components of two vectors
double MathTL::InfiniteVector< C, I >::weak_norm | ( | const double | tau | ) | const |
weak l_tau norm
const double MathTL::InfiniteVector< C, I >::wrmsqr_norm | ( | const double | atol, |
const double | rtol, | ||
const InfiniteVector< C, I > & | v, | ||
const InfiniteVector< C, I > & | w | ||
) | const |
Computes v such that \|*this-v\|_{}; In contrast to the usual coarse routine, here the This routine is a suggestion from Rob Stevenson.
weighted root mean square norm ||x||_{v,w} = (1/n * sum_i |x_i|^2 / (atol+max(|v_i|,|w_i|)*rtol)^2)^{1/2}
(this has to be modeled as a member function, since partial specialization of template functions is not allowed in C++)