Janus 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 "janus/core/JanusConcepts.hpp"
#include "janus/core/JanusError.hpp"
#include "janus/core/JanusTypes.hpp"
#include "janus/math/Arithmetic.hpp"
#include "janus/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  janus::PolynomialChaosDimension
 One stochastic dimension in a polynomial chaos basis. More...
struct  janus::PolynomialChaosBasisOptions
 Basis construction controls for multidimensional PCE. More...
struct  janus::PolynomialChaosTerm
 One multidimensional chaos basis term. More...
class  janus::PolynomialChaosBasis
 Multidimensional polynomial chaos basis with fixed truncation/order. More...

Namespaces

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

Enumerations

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

Functions

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

Detailed Description

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

See also
Quadrature.hpp, OrthogonalPolynomials.hpp