69using Weights = Eigen::Matrix<double, 1, -1>;
89template <
typename DERIVED>
98 Matrix W(X.size(), N);
99 for (
int i = 0; i < X.size(); i++)
100 W.row(i) = DERIVED::CalculateWeights(N, X(i));
113 static Matrix
WeightMatrix(
size_t N,
const Vector& X,
double a,
double b) {
114 Matrix W(X.size(), N);
115 for (
int i = 0; i < X.size(); i++)
116 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);
137 : weights_(DERIVED::CalculateWeights(N, x)) {}
141 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}
144 double apply(
const typename DERIVED::Parameters& p,
146 if (H) *H = weights_;
147 return weights_.transpose().dot(p);
156 void print(
const std::string& s =
"")
const {
157 std::cout << s << (s !=
"" ?
" " :
"") << weights_ << std::endl;
169 using Jacobian = Eigen::Matrix<double, -1, -1>;
206 return P.matrix() * this->weights_.transpose();
225 using Jacobian = Eigen::Matrix<double, 1, -1>;
240 void calculateJacobian() {
241 H_.setZero(1, M_ * EvaluationFunctor::weights_.size());
242 for (
int j = 0; j < EvaluationFunctor::weights_.size(); j++)
243 H_(0, rowIndex_ + j * M_) = EvaluationFunctor::weights_(j);
267 return P.row(rowIndex_) * EvaluationFunctor::weights_.transpose();
304 : Base(M, N, x, a, b) {}
312 Eigen::Matrix<double, M, M> D_result_xi;
313 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);
318 if (H) *H = D_result_xi * (*H);
341 : weights_(DERIVED::DerivativeWeights(N, x)) {}
344 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}
346 void print(
const std::string& s =
"")
const {
347 std::cout << s << (s !=
"" ?
" " :
"") << weights_ << std::endl;
368 double apply(
const typename DERIVED::Parameters& p,
369 OptionalJacobian</*1xN*/ -1, -1> H = {})
const {
370 if (H) *H = this->weights_;
371 return (this->weights_ * p)(0);
390 using Jacobian = Eigen::Matrix<double, -1, -1>;
423 Vector
apply(
const Matrix& P,
426 return P.matrix() * this->weights_.transpose();
444 using Jacobian = Eigen::Matrix<double, 1, -1>;
459 void calculateJacobian() {
460 H_.setZero(1, M_ * this->weights_.size());
461 for (
int j = 0; j < this->weights_.size(); j++)
462 H_(0, rowIndex_ + j * M_) = this->weights_(j);
485 return P.row(rowIndex_) * this->weights_.transpose();
typedef and functions to augment Eigen's MatrixXd
Special class for optional Jacobian arguments.
Matrix kroneckerProductIdentity(size_t M, const Weights &w)
Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix ...
Definition Basis.cpp:23
Global functions in a separate testing namespace.
Definition chartTesting.h:28
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:467
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
CRTP Base class for function bases.
Definition Basis.h:90
static Matrix WeightMatrix(size_t N, const Vector &X, double a, double b)
Calculate weights for all x in vector X, with interval [a,b].
Definition Basis.h:113
static Matrix WeightMatrix(size_t N, const Vector &X)
Calculate weights for all x in vector X.
Definition Basis.h:97
EvaluationFunctor(size_t N, double x)
Constructor with interval [a,b].
Definition Basis.h:136
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H={}) const
c++ sugar
Definition Basis.h:151
EvaluationFunctor(size_t N, double x, double a, double b)
Constructor with interval [a,b].
Definition Basis.h:140
double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H={}) const
Regular 1D evaluation.
Definition Basis.h:144
EvaluationFunctor()
For serialization.
Definition Basis.h:133
VectorEvaluationFunctor(size_t M, size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:197
VectorEvaluationFunctor(size_t M, size_t N, double x)
Default Constructor.
Definition Basis.h:191
Vector operator()(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:210
VectorEvaluationFunctor()
For serialization.
Definition Basis.h:188
Vector apply(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
M-dimensional evaluation.
Definition Basis.h:203
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:182
double apply(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
Calculate component of component rowIndex_ of P.
Definition Basis.h:264
VectorComponentFunctor(size_t M, size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:257
VectorComponentFunctor()
For serialization.
Definition Basis.h:248
VectorComponentFunctor(size_t M, size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:251
double operator()(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:271
ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:303
T operator()(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:325
T apply(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
Manifold evaluation.
Definition Basis.h:307
ManifoldEvaluationFunctor()
For serialization.
Definition Basis.h:297
ManifoldEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:300
Base class for functors below that calculate derivative weights.
Definition Basis.h:332
DerivativeFunctorBase()
For serialization.
Definition Basis.h:338
DerivativeFunctor()
For serialization.
Definition Basis.h:361
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:374
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:403
VectorDerivativeFunctor()
For serialization.
Definition Basis.h:409
VectorDerivativeFunctor(size_t M, size_t N, double x, double a, double b)
Constructor, with optional interval [a,b].
Definition Basis.h:418
Vector operator()(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:429
VectorDerivativeFunctor(size_t M, size_t N, double x)
Default Constructor.
Definition Basis.h:412
ComponentDerivativeFunctor(size_t M, size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:476
ComponentDerivativeFunctor(size_t M, size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:470
double apply(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
Calculate derivative of component rowIndex_ of F.
Definition Basis.h:482
double operator()(const Matrix &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition Basis.h:488
ComponentDerivativeFunctor()
For serialization.
Definition Basis.h:467