Metis 2.0.0
High-performance C++20 dual-mode numerical framework
Loading...
Searching...
No Matches
PolynomialChaos.hpp File Reference

Polynomial chaos expansion (PCE) basis, projection, and regression. More...

#include "metis/core/MetisConcepts.hpp"
#include "metis/core/MetisError.hpp"
#include "metis/core/MetisTypes.hpp"
#include "metis/math/Arithmetic.hpp"
#include "metis/math/OrthogonalPolynomials.hpp"
#include <Eigen/SVD>
#include <algorithm>
#include <cmath>
#include <numeric>
#include <string>
#include <vector>
Include dependency graph for PolynomialChaos.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  metis::PolynomialChaosDimension
 One stochastic dimension in a polynomial chaos basis. More...
struct  metis::PolynomialChaosBasisOptions
 Basis construction controls for multidimensional PCE. More...
struct  metis::PolynomialChaosTerm
 One multidimensional chaos basis term. More...
class  metis::PolynomialChaosBasis
 Multidimensional polynomial chaos basis with fixed truncation/order. More...

Namespaces

namespace  metis
namespace  metis::detail
 Smooth approximation of ReLU function: softplus(x) = (1/beta) * log(1 + exp(beta * x)).

Enumerations

enum class  metis::PolynomialChaosFamily { metis::Hermite , metis::Legendre , metis::Jacobi , metis::Laguerre }
 Univariate Askey-scheme family used for a PCE input dimension. More...
enum class  metis::PolynomialChaosTruncation { metis::TotalOrder , metis::TensorProduct }
 Multi-index truncation strategy for a multidimensional basis. More...

Functions

PolynomialChaosDimension metis::hermite_dimension ()
 Create a standard normal (Hermite) dimension.
PolynomialChaosDimension metis::legendre_dimension ()
 Create a uniform (Legendre) dimension on [-1, 1].
PolynomialChaosDimension metis::jacobi_dimension (double alpha, double beta)
 Create a Beta-family (Jacobi) dimension on [-1, 1].
PolynomialChaosDimension metis::laguerre_dimension (double alpha=0.0)
 Create a Gamma-family (Laguerre) dimension on [0, inf).
void metis::detail::validate_degree (int degree, const std::string &context)
void metis::detail::validate_dimension (const PolynomialChaosDimension &dimension, const std::string &context)
template<MetisScalar Scalar>
Scalar metis::detail::raw_hermite_polynomial (int degree, const Scalar &x)
template<MetisScalar Scalar>
Scalar metis::detail::raw_legendre_polynomial (int degree, const Scalar &x)
template<MetisScalar Scalar>
Scalar metis::detail::raw_jacobi_polynomial (int degree, const Scalar &x, double alpha, double beta)
template<MetisScalar Scalar>
Scalar metis::detail::raw_laguerre_polynomial (int degree, const Scalar &x, double alpha)
double metis::detail::squared_norm_raw (const PolynomialChaosDimension &dimension, int degree)
double metis::detail::squared_norm_probability (const PolynomialChaosDimension &dimension, int degree)
bool metis::detail::multi_index_less (const std::vector< int > &lhs, const std::vector< int > &rhs)
void metis::detail::total_order_recursive (int dim, int order, int axis, std::vector< int > &current, std::vector< std::vector< int > > &indices)
void metis::detail::tensor_product_recursive (int dim, int order, int axis, std::vector< int > &current, std::vector< std::vector< int > > &indices)
std::vector< std::vector< int > > metis::detail::generate_multi_indices (int dim, int order, PolynomialChaosTruncation truncation)
template<MetisScalar Scalar>
MetisVector< Scalar > metis::detail::apply_operator (const NumericMatrix &op, const MetisVector< Scalar > &values, const std::string &context)
template<MetisScalar Scalar>
MetisMatrix< Scalar > metis::detail::apply_operator (const NumericMatrix &op, const MetisMatrix< Scalar > &values, const std::string &context)
void metis::detail::validate_samples (const NumericMatrix &samples, int dimension, const std::string &context)
NumericMatrix metis::detail::regression_operator (const NumericMatrix &design_matrix, double ridge, const std::string &context)
template<MetisScalar Scalar>
Scalar metis::pce_polynomial (const PolynomialChaosDimension &dimension, int degree, const Scalar &x, bool normalized=true)
 Evaluate a univariate chaos basis polynomial.
double metis::pce_squared_norm (const PolynomialChaosDimension &dimension, int degree, bool normalized=true)
 Return the probability-measure squared norm of a univariate basis term.
template<MetisScalar Scalar>
MetisVector< Scalar > metis::pce_projection_coefficients (const PolynomialChaosBasis &basis, const NumericMatrix &samples, const NumericVector &weights, const MetisVector< Scalar > &sample_values)
 Compute PCE projection coefficients from weighted samples (vector).
template<MetisScalar Scalar>
MetisMatrix< Scalar > metis::pce_projection_coefficients (const PolynomialChaosBasis &basis, const NumericMatrix &samples, const NumericVector &weights, const MetisMatrix< Scalar > &sample_values)
 Compute PCE projection coefficients from weighted samples (matrix).
template<MetisScalar Scalar>
MetisVector< Scalar > metis::pce_regression_coefficients (const PolynomialChaosBasis &basis, const NumericMatrix &samples, const MetisVector< Scalar > &sample_values, double ridge=1e-12)
 Compute PCE coefficients via least-squares regression (vector).
template<MetisScalar Scalar>
MetisMatrix< Scalar > metis::pce_regression_coefficients (const PolynomialChaosBasis &basis, const NumericMatrix &samples, const MetisMatrix< Scalar > &sample_values, double ridge=1e-12)
 Compute PCE coefficients via least-squares regression (matrix).
template<MetisScalar Scalar>
Scalar metis::pce_mean (const MetisVector< Scalar > &coefficients)
 Extract PCE mean (zeroth coefficient).
template<MetisScalar Scalar>
Scalar metis::pce_variance (const PolynomialChaosBasis &basis, const MetisVector< Scalar > &coefficients)
 Compute PCE variance from coefficients.

Detailed Description

Polynomial chaos expansion (PCE) basis, projection, and regression.

See also
Quadrature.hpp, OrthogonalPolynomials.hpp