46template <
typename ordinal_type,
typename value_type,
typename storage_type>
57 else if (theBasis != Teuchos::null)
58 coeff_.resize(theBasis->size());
65template <
typename ordinal_type,
typename value_type,
typename storage_type>
73template <
typename ordinal_type,
typename value_type,
typename storage_type>
79template <
typename ordinal_type,
typename value_type,
typename storage_type>
92template <
typename ordinal_type,
typename value_type,
typename storage_type>
103template <
typename ordinal_type,
typename value_type,
typename storage_type>
111template <
typename ordinal_type,
typename value_type,
typename storage_type>
119template <
typename ordinal_type,
typename value_type,
typename storage_type>
127template <
typename ordinal_type,
typename value_type,
typename storage_type>
128Teuchos::RCP<const Stokhos::OrthogPolyBasis<ordinal_type, value_type> >
135template <
typename ordinal_type,
typename value_type,
typename storage_type>
143 else if (
basis_ != Teuchos::null)
149template <
typename ordinal_type,
typename value_type,
typename storage_type>
157template <
typename ordinal_type,
typename value_type,
typename storage_type>
165template <
typename ordinal_type,
typename value_type,
typename storage_type>
171 TEUCHOS_TEST_FOR_EXCEPTION(
coeff_.size() == 0, std::logic_error,
172 "Stokhos::OrthogPolyApprox::coeff(): " <<
173 "Coefficient array is empty!");
178template <
typename ordinal_type,
typename value_type,
typename storage_type>
184 TEUCHOS_TEST_FOR_EXCEPTION(
coeff_.size() == 0, std::logic_error,
185 "Stokhos::OrthogPolyApprox::coeff(): " <<
186 "Coefficient array is empty!");
191template <
typename ordinal_type,
typename value_type,
typename storage_type>
199template <
typename ordinal_type,
typename value_type,
typename storage_type>
207template <
typename ordinal_type,
typename value_type,
typename storage_type>
212 Teuchos::RCP< const Stokhos::ProductBasis<ordinal_type, value_type> >
213 product_basis = Teuchos::rcp_dynamic_cast< const Stokhos::ProductBasis<ordinal_type, value_type> >(
basis_,
true);
216 theTerm[dimension] = theOrder;
221template <
typename ordinal_type,
typename value_type,
typename storage_type>
226 Teuchos::RCP< const Stokhos::ProductBasis<ordinal_type, value_type> >
227 product_basis = Teuchos::rcp_dynamic_cast< const Stokhos::ProductBasis<ordinal_type, value_type> >(
basis_,
true);
230 theTerm[dimension] = theOrder;
235template <
typename ordinal_type,
typename value_type,
typename storage_type>
240 Teuchos::RCP< const Stokhos::ProductBasis<ordinal_type, value_type> >
241 product_basis = Teuchos::rcp_dynamic_cast< const Stokhos::ProductBasis<ordinal_type, value_type> >(
basis_,
true);
242 return product_basis->term(theTerm);
245template <
typename ordinal_type,
typename value_type,
typename storage_type>
248evaluate(
const Teuchos::Array<value_type>& point)
const
250 Teuchos::Array<value_type> basis_vals(
basis_->size());
251 basis_->evaluateBases(point, basis_vals);
255template <
typename ordinal_type,
typename value_type,
typename storage_type>
258evaluate(
const Teuchos::Array<value_type>& point,
259 const Teuchos::Array<value_type>& basis_vals)
const
268template <
typename ordinal_type,
typename value_type,
typename storage_type>
276template <
typename ordinal_type,
typename value_type,
typename storage_type>
285 std_dev = std::sqrt(std_dev);
289template <
typename ordinal_type,
typename value_type,
typename storage_type>
297template <
typename ordinal_type,
typename value_type,
typename storage_type>
303 if (
basis_ == Teuchos::null) {
304 TEUCHOS_TEST_FOR_EXCEPTION(
305 coeff_.size() != 1, std::logic_error,
306 "basis_ == null && coeff_.size() > 1");
316template <
typename ordinal_type,
typename value_type,
typename storage_type>
322 TEUCHOS_TEST_FOR_EXCEPTION(
323 basis_ == Teuchos::null &&
coeff_.size() != 1, std::logic_error,
324 "basis_ == null && coeff_.size() > 1");
325 TEUCHOS_TEST_FOR_EXCEPTION(
327 "b.basis_ == null && b.coeff_.size() > 1");
328 TEUCHOS_TEST_FOR_EXCEPTION(
331 "Coefficient array sizes do not match");
343template <
typename ordinal_type,
typename value_type,
typename storage_type>
346print(std::ostream& os)
const
348 os <<
"Stokhos::OrthogPolyApprox of size " <<
coeff_.size() <<
" in basis "
349 <<
"\n\t" <<
basis_->getName() <<
":" << std::endl;
351 Teuchos::RCP< const Stokhos::ProductBasis<ordinal_type, value_type> >
352 product_basis = Teuchos::rcp_dynamic_cast< const Stokhos::ProductBasis<ordinal_type, value_type> >(
basis_);
354 if (product_basis != Teuchos::null) {
359 os << trm[
j] <<
", ";
360 os << trm[trm.
size()-1] <<
") = " <<
coeff_[i] << std::endl;
376template <
typename ordinal_type,
typename value_type,
typename storage_type>
A multidimensional index.
ordinal_type size() const
Size.
Class to store coefficients of a projection onto an orthogonal polynomial basis.
storage_type::reference reference
void reset(const Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > &new_basis, ordinal_type sz=0)
Reset to a new basis.
value_type inner_product(const OrthogPolyApprox &b) const
Compute the L2 inner product of 2 PCEs.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > basis_
Basis expansion is relative to.
value_type mean() const
Compute mean of expansion.
storage_type::const_reference const_reference
std::ostream & print(std::ostream &os) const
Print approximation in basis.
void init(const value_type &v)
Initialize coefficients to value.
value_type two_norm() const
Compute the two-norm of expansion.
storage_type::pointer pointer
OrthogPolyApprox & operator=(const OrthogPolyApprox &x)
Assignment operator (deep copy).
value_type standard_deviation() const
Compute standard deviation of expansion.
storage_type coeff_
OrthogPolyApprox coefficients.
void resize(OrdinalType sz)
const MultiIndex< ordinal_type > & order(ordinal_type term) const
Get orders for a given term.
void load(value_type *v)
Load coefficients to an array of values.
OrthogPolyApprox(const Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > &basis=Teuchos::null, ordinal_type sz=0, const value_type *vals=NULL)
Constructor with supplied size sz.
reference operator[](ordinal_type i)
Array access.
pointer coeff()
Return coefficient array.
value_type two_norm_squared() const
Compute the squared two-norm of expansion.
storage_type::const_pointer const_pointer
reference term(ordinal_type dimension, ordinal_type order)
Get coefficient term for given dimension and order.
ordinal_type size() const
Return size.
value_type evaluate(const Teuchos::Array< value_type > &point) const
Evaluate polynomial approximation at a point.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > basis() const
Return basis.
~OrthogPolyApprox()
Destructor.
Abstract base class for multivariate orthogonal polynomials.
SparseArrayIterator< index_iterator, value_iterator >::value_type index(const SparseArrayIterator< index_iterator, value_iterator > &it)
ordinal_type size() const
Return size.
std::ostream & operator<<(std::ostream &os, const ProductContainer< coeff_type > &vec)