Implements KL expansions that take advantage of separable structure in both the domain and covariance kernel. More...
#include <SeparableKarhunenLoeve.h>
Implements KL expansions that take advantage of separable structure in both the domain and covariance kernel.
@seealso KarhunenLoeveExpansion
Consider a two dimensional covariance kernel of the form \(k((x,y),(x^\prime, y^\prime))\) that can be written as
\[ k((x,y),(x^\prime, y^\prime)) = k_x(x,x^\prime)k_y(y,y^\prime). \]
This type of kernel is separable in all of its components. It is also possible to have kernels that are partially separable. For example, a three dimensional kernel \(k_2((x,y,z),(x^\prime, y^\prime,z^\prime))\) might be separable in \(x\) and \((y,z)\) but not all three components. This would result in a decomposition of the form
\[ k_2((x,y,z),(x^\prime, y^\prime,z^\prime)) = k_x(x,x^\prime) k_{yz}((y,z), (y^\prime,z^\prime)). \]
In both the separable and partially separable cases, it can often be more efficient to construct the KL decompositions for each component kernel (e.g., \(k_x, k_y, \ldots\)) seperately and then combine the individual expansions to form an expansion for the original kernel. This is possible when the full-dimensional seed points are formed from a tensor product of points in the separable dimensions.
Definition at line 41 of file SeparableKarhunenLoeve.h.
Public Member Functions | |
SeparableKarhunenLoeve (std::vector< std::shared_ptr< KernelBase >> kernelsIn, std::vector< Eigen::MatrixXd > const &seedPtsIn, std::vector< Eigen::VectorXd > const &seedWtsIn, boost::property_tree::ptree options=boost::property_tree::ptree()) | |
virtual Eigen::MatrixXd | GetModes (Eigen::Ref< const Eigen::MatrixXd > const &pts) const override |
virtual unsigned int | NumModes () const override |
SeparableKarhunenLoeve::SeparableKarhunenLoeve | ( | std::vector< std::shared_ptr< KernelBase >> | kernelsIn, |
std::vector< Eigen::MatrixXd > const & | seedPtsIn, | ||
std::vector< Eigen::VectorXd > const & | seedWtsIn, | ||
boost::property_tree::ptree | options = boost::property_tree::ptree() |
||
) |
Construct the separable expansion from a list of the seperate kernels and seed points/weights.
[in] | kernelsIn | A vector of kernels for each separable component. Note: Each individual kernel can be defined with multiple input dimensions, but there can be no shared dimensions between kernels. As an example, the three component kernel \(k_2((x,y,z),(x^\prime, y^\prime,z^\prime))\) mentioned above would have one kernel that depended on dimension "{0}" and another that depended on dimensions "{1,2}", which is allowed. However, the first kernel could not depend on "{0,1}", because then both kernels would depend on the second "y" component and the product would no long be separable. |
[in] | seedPtsIn | A vector of seed points for each component. The length of this vector must match the length of the kernels vector. Each component of the vector is an \(N\times M\) matrix, where \(N\) is the number of inputs to the kernel (e.g., 1 for \(k_x\) and 2 for \(k_{yz}\)) and \(M\) is the number of points used to define the quadrature rule. |
[in] | seedWtsIn | A vector containing weights corresponding to the seed points. There must be the same number of wts and pts for each component. |
Definition at line 8 of file SeparableKarhunenLoeve.cpp.
|
overridevirtual |
Definition at line 53 of file SeparableKarhunenLoeve.cpp.
|
overridevirtual |
Definition at line 48 of file SeparableKarhunenLoeve.cpp.
|
private |
Definition at line 80 of file SeparableKarhunenLoeve.h.
|
private |
Definition at line 82 of file SeparableKarhunenLoeve.h.
|
private |
Definition at line 83 of file SeparableKarhunenLoeve.h.