46template <
typename BasisType>
53 if(numPoints < 1)
throw std::invalid_argument(
"Points must be >= 1");
55 nodes.resize(numPoints);
64 Eigen::MatrixXd J = BasisType::getJacobiMatrix(numPoints);
65 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> solver(J);
66 nodes = solver.eigenvalues();
67 Eigen::MatrixXd evecs = solver.eigenvectors();
69 for(
int i = 0; i < numPoints; ++i) {
70 weights(i) = evecs(0, i) * evecs(0, i);
74 double integrate(std::function<
double(
double)> f)
const {
76 for(
int i = 0; i <
nodes.size(); ++i) {
107template <
typename BasisType>
116 int totalPoints = std::pow(pointsPerDim, dim);
120 for(
int i = 0; i < totalPoints; ++i) {
122 double jointWeight = 1.0;
124 for(
int d = 0; d < dim; ++d) {
125 int idx = temp % pointsPerDim;
127 jointWeight *= gq1D.
weights(idx);
128 temp /= pointsPerDim;
139 double integrate(
const std::function<
double(
const Eigen::VectorXd&)> &f)
const {
141 for(
int i = 0; i <
gridNodes.rows(); ++i) {
154 double integrate(
const std::function<
double(
const Eigen::VectorXd&)> &f,
155 const Eigen::VectorXd& p1,
156 const Eigen::VectorXd& p2)
const {
159 if(p1.size() != dim || p2.size() != dim) {
160 throw std::invalid_argument(
"Parameter dimensions must match grid dimensions.");
164 Eigen::VectorXd physicalPoint(dim);
166 for(
int i = 0; i <
gridNodes.rows(); ++i) {
167 for(
int d = 0; d < dim; ++d) {
169 physicalPoint(d) = BasisType::mapToPhysical(
gridNodes(i, d), p1(d), p2(d));
One-dimensional quadrature rule generator and integrator.
Definition integrator.h:47
Quadrature1D(int numPoints)
Definition integrator.h:52
double integrate(std::function< double(double)> f) const
Definition integrator.h:74
Eigen::VectorXd nodes
Vector containing the quadrature node points.
Definition integrator.h:49
Eigen::VectorXd weights
Vector containing the corresponding quadrature weights.
Definition integrator.h:50
Multi-dimensional tensor product quadrature integrator.
Definition integrator.h:108
double integrate(const std::function< double(const Eigen::VectorXd &)> &f, const Eigen::VectorXd &p1, const Eigen::VectorXd &p2) const
Definition integrator.h:154
Eigen::MatrixXd gridNodes
Matrix of joint tensor product quadrature nodes (totalPoints x dim).
Definition integrator.h:110
TensorIntegrator(int dim, int pointsPerDim)
Definition integrator.h:113
double integrate(const std::function< double(const Eigen::VectorXd &)> &f) const
Definition integrator.h:139
Eigen::VectorXd gridWeights
Vector of joint tensor product weights (totalPoints).
Definition integrator.h:111
Definition classifier.h:17