70 using Weights = Eigen::Matrix<double, 1, -1>;
86 Matrix result(M, w.cols() * M);
89 for (
int i = 0; i < w.cols(); i++) {
90 result.block(0, i * M, M, M).diagonal().array() = w(i);
99 template <
typename DERIVED>
108 Matrix W(X.size(), N);
109 for (
int i = 0; i < X.size(); i++)
110 W.row(i) = DERIVED::CalculateWeights(N, X(i));
123 static Matrix
WeightMatrix(
size_t N,
const Vector& X,
double a,
double b) {
124 Matrix W(X.size(), N);
125 for (
int i = 0; i < X.size(); i++)
126 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);
147 : weights_(DERIVED::CalculateWeights(N, x)) {}
151 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}
154 double apply(
const typename DERIVED::Parameters& p,
156 if (H) *H = weights_;
157 return (weights_ * p)(0);
166 void print(
const std::string& s =
"")
const {
167 std::cout << s << (s !=
"" ?
" " :
"") << weights_ << std::endl;
180 using VectorM = Eigen::Matrix<double, M, 1>;
181 using Jacobian = Eigen::Matrix<double, M, -1>;
193 H_ = kroneckerProductIdentity<M>(this->weights_);
197 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
217 return P.
matrix() * this->weights_.transpose();
237 using Jacobian = Eigen::Matrix<double, 1, -1>;
250 void calculateJacobian(
size_t N) {
251 H_.setZero(1, M * N);
252 for (
int j = 0; j < EvaluationFunctor::weights_.size(); j++)
253 H_(0, rowIndex_ + j * M) = EvaluationFunctor::weights_(j);
263 calculateJacobian(N);
269 calculateJacobian(N);
276 return P.
row(rowIndex_) * EvaluationFunctor::weights_.transpose();
314 :
Base(N, x, a, b) {}
320 Eigen::Matrix<double, M, 1> xi = Base::operator()(P, H);
323 Eigen::Matrix<double, M, M> D_result_xi;
324 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);
329 if (H) *H = D_result_xi * (*H);
352 : weights_(DERIVED::DerivativeWeights(N, x)) {}
355 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}
357 void print(
const std::string& s =
"")
const {
358 std::cout << s << (s !=
"" ?
" " :
"") << weights_ << std::endl;
379 double apply(
const typename DERIVED::Parameters& p,
381 if (H) *H = this->weights_;
382 return (this->weights_ * p)(0);
402 using VectorM = Eigen::Matrix<double, M, 1>;
403 using Jacobian = Eigen::Matrix<double, M, -1>;
415 H_ = kroneckerProductIdentity<M>(this->weights_);
419 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
438 return P.
matrix() * this->weights_.transpose();
458 using Jacobian = Eigen::Matrix<double, 1, -1>;
471 void calculateJacobian(
size_t N) {
472 H_.setZero(1, M * N);
473 for (
int j = 0; j < this->weights_.size(); j++)
474 H_(0, rowIndex_ + j * M) = this->weights_(j);
484 calculateJacobian(N);
490 calculateJacobian(N);
496 return P.
row(rowIndex_) * this->weights_.transpose();
VectorDerivativeFunctor(size_t N, double x)
Default Constructor.
Definition: Basis.h:425
VectorComponentFunctor()
For serialization.
Definition: Basis.h:258
Define ParameterMatrix class which is used to store values at interpolation points.
VectorDerivativeFunctor(size_t N, double x, double a, double b)
Constructor, with optional interval [a,b].
Definition: Basis.h:430
EvaluationFunctor(size_t N, double x)
Constructor with interval [a,b].
Definition: Basis.h:146
DerivativeFunctor()
For serialization.
Definition: Basis.h:372
void calculateJacobian()
Definition: Basis.h:192
VectorEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition: Basis.h:208
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:441
T operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:336
ComponentDerivativeFunctor()
For serialization.
Definition: Basis.h:479
void calculateJacobian()
Definition: Basis.h:414
DerivativeFunctorBase()
For serialization.
Definition: Basis.h:349
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:221
ManifoldEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition: Basis.h:310
EvaluationFunctor(size_t N, double x, double a, double b)
Constructor with interval [a,b].
Definition: Basis.h:150
Eigen::Matrix< double, 1, -1 > row(size_t index) const
Definition: ParameterMatrix.h:77
ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition: Basis.h:313
T apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
Manifold evaluation.
Definition: Basis.h:317
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
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:123
typedef and functions to augment Eigen's MatrixXd
VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition: Basis.h:267
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:280
VectorComponentFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition: Basis.h:261
Definition: chartTesting.h:28
ManifoldEvaluationFunctor()
For serialization.
Definition: Basis.h:307
Definition: OptionalJacobian.h:38
EvaluationFunctor()
For serialization.
Definition: Basis.h:143
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorDerivativeFunctor()
For serialization.
Definition: Basis.h:422
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
Calculate derivative of component rowIndex_ of F.
Definition: Basis.h:493
static Matrix WeightMatrix(size_t N, const Vector &X)
Definition: Basis.h:107
Matrix kroneckerProductIdentity(const Weights &w)
Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix ...
Definition: Basis.h:85
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:385
ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition: Basis.h:488
double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H={}) const
Regular 1D evaluation.
Definition: Basis.h:154
Definition: ParameterMatrix.h:38
Special class for optional Jacobian arguments.
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
Calculate component of component rowIndex_ of P.
Definition: Basis.h:273
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorEvaluationFunctor()
For serialization.
Definition: Basis.h:200
MatrixType matrix() const
Get the underlying matrix.
Definition: ParameterMatrix.h:68
VectorM apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
M-dimensional evaluation.
Definition: Basis.h:214
ComponentDerivativeFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition: Basis.h:482
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H={}) const
c++ sugar
Definition: Basis.h:161
Base class for functors below that calculate derivative weights.
Definition: Basis.h:343
VectorEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition: Basis.h:203
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H={}) const
c++ sugar
Definition: Basis.h:499