4#include <boost/math/constants/constants.hpp>
9 static const double PI = boost::math::constants::pi<double>();
15 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
17 return Eigen::Vector2d(1., 2.);
20 static std::function<double(
const Eigen::Vector2d&)>
25 static std::function<
MatrixRd(
const Eigen::Vector2d&)>
27 return MatrixRd::Zero();
31 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
33 return Eigen::Vector2d(
39 static std::function<double(
const Eigen::Vector2d&)>
44 static std::function<
MatrixRd(
const Eigen::Vector2d&)>
55 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
57 return Eigen::Vector2d(
58 1. + x(0)*x(0) - x(1)*x(0),
59 2. + 2. * x(1)*x(1) + x(0)*x(1)
63 static std::function<double(
const Eigen::Vector2d&)>
68 static std::function<
MatrixRd(
const Eigen::Vector2d&)>
71 G.row(0) << 2.*x(0)-x(1), -x(0);
72 G.row(1) << x(1), 4.*x(1)+x(0);
78 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
80 return Eigen::Vector2d(
81 1. + std::pow(x(0),3) - x(1)*std::pow(x(0),2),
82 2. + 2. * std::pow(x(1), 3) + std::pow(x(1),2)*x(0)
86 static std::function<double(
const Eigen::Vector2d&)>
88 return x(0)*x(0)+x(1)*x(1);
91 static std::function<
MatrixRd(
const Eigen::Vector2d&)>
94 G.row(0) << 3*x(0)*x(0)-2*x(1)*x(0), -x(0)*x(0);
95 G.row(1) << x(1)*x(1), 6*x(1)*x(1)+2*x(1)*x(0);
101 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
103 return Eigen::Vector2d(
104 sin(
PI * x(0)) * sin(
PI * x(1)),
105 sin(
PI * x(0)) * sin(
PI * x(1))
109 static std::function<double(
const Eigen::Vector2d&)>
111 = [](
const Eigen::Vector2d & x) ->
double {
112 return PI*cos(
PI*x(0))*sin(
PI*x(1)) -
PI*sin(
PI*x(0))*cos(
PI*x(1));
115 static std::function<
MatrixRd(
const Eigen::Vector2d&)>
118 G.row(0) <<
PI*cos(
PI*x(0))*sin(
PI*x(1)),
PI*sin(
PI*x(0))*cos(
PI*x(1));
119 G.row(1) <<
PI*cos(
PI*x(0))*sin(
PI*x(1)),
PI*sin(
PI*x(0))*cos(
PI*x(1));
126 static std::function<double(
const Eigen::Vector2d&)>
128 return sin(
PI * x(0)) * sin(
PI * x(1));
131 static std::function<Eigen::Vector2d(
const Eigen::Vector2d&)>
133 = [](
const Eigen::Vector2d & x) -> Eigen::Vector2d {
134 return Eigen::Vector2d(
PI*cos(
PI*x(0))*sin(
PI*x(1)),
PI*sin(
PI*x(0))*cos(
PI*x(1)));
141 const std::function<
T(
const Eigen::Vector2d &)> & f,
142 const Eigen::VectorXd & fX,
143 const boost::multi_array<T, 2> & fX_basis_quad,
149 fX_basis_quad.shape()[0] == (
size_t)fX.size() &&
150 fX_basis_quad.shape()[1] == quad_X.size()
155 for (
size_t iqn = 0; iqn < quad_X.size(); iqn++) {
156 T f_iqn = f(quad_X[iqn].vector());
157 T fX_iqn = fX(0) * fX_basis_quad[0][iqn];
158 for (
size_t i = 1;
i < fX_basis_quad.shape()[0];
i++) {
159 fX_iqn += fX(
i) * fX_basis_quad[
i][iqn];
162 T diff_iqn = f_iqn - fX_iqn;
Compute max and min eigenvalues of all matrices for i
Definition compute_eigs.m:5
double scalar_product(const double &x, const double &y)
Scalar product between two reals.
Definition basis.cpp:163
Eigen::Matrix2d MatrixRd
Definition basis.hpp:54
static const double PI
Definition ddr-klplate.hpp:187
std::vector< QuadratureNode > QuadratureRule
Definition quadraturerule.hpp:55
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
Definition ddr-klplate.hpp:27
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> constant_vector
Definition excurl-test.hpp:16
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> quadratic_vector
Definition excurl-test.hpp:56
static std::function< MatrixRd(const Eigen::Vector2d &)> grad_cubic_vector
Definition excurl-test.hpp:92
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> trigonometric_vector
Definition excurl-test.hpp:102
static std::function< MatrixRd(const Eigen::Vector2d &)> grad_trigonometric_vector
Definition excurl-test.hpp:116
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> cubic_vector
Definition excurl-test.hpp:79
static std::function< double(const Eigen::Vector2d &)> trigonometric_q
Definition excurl-test.hpp:127
static std::function< double(const Eigen::Vector2d &)> rot_quadratic_vector
Definition excurl-test.hpp:64
static std::function< MatrixRd(const Eigen::Vector2d &)> grad_quadratic_vector
Definition excurl-test.hpp:69
static std::function< double(const Eigen::Vector2d &)> rot_cubic_vector
Definition excurl-test.hpp:87
static std::function< double(const Eigen::Vector2d &)> rot_linear_vector
Definition excurl-test.hpp:40
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> linear_vector
Definition excurl-test.hpp:32
static std::function< MatrixRd(const Eigen::Vector2d &)> grad_linear_vector
Definition excurl-test.hpp:45
static std::function< MatrixRd(const Eigen::Vector2d &)> grad_constant_vector
Definition excurl-test.hpp:26
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> grad_trigonometric_q
Definition excurl-test.hpp:133
double squared_l2_error(const std::function< T(const Eigen::Vector2d &)> &f, const Eigen::VectorXd &fX, const boost::multi_array< T, 2 > &fX_basis_quad, const QuadratureRule &quad_X)
Definition excurl-test.hpp:140
static std::function< double(const Eigen::Vector2d &)> rot_constant_vector
Definition excurl-test.hpp:21
static std::function< double(const Eigen::Vector2d &)> rot_trigonometric_vector
Definition excurl-test.hpp:111