basis module tests pass

release/4.3a0
Varun Agrawal 2022-02-17 01:52:12 -05:00
parent 55ad1841bd
commit 6e6c64749d
5 changed files with 11 additions and 19 deletions

View File

@ -92,7 +92,7 @@ Matrix kroneckerProductIdentity(const Weights& w) {
/// CRTP Base class for function bases /// CRTP Base class for function bases
template <typename DERIVED> template <typename DERIVED>
class GTSAM_EXPORT Basis { class Basis {
public: public:
/** /**
* Calculate weights for all x in vector X. * Calculate weights for all x in vector X.
@ -497,11 +497,6 @@ class GTSAM_EXPORT Basis {
} }
}; };
// Vector version for MATLAB :-(
static double Derivative(double x, const Vector& p, //
OptionalJacobian</*1xN*/ -1, -1> H = boost::none) {
return DerivativeFunctor(x)(p.transpose(), H);
}
}; };
} // namespace gtsam } // namespace gtsam

View File

@ -31,7 +31,7 @@ namespace gtsam {
* @tparam BASIS The basis class to use e.g. Chebyshev2 * @tparam BASIS The basis class to use e.g. Chebyshev2
*/ */
template <class BASIS> template <class BASIS>
class GTSAM_EXPORT EvaluationFactor : public FunctorizedFactor<double, Vector> { class EvaluationFactor : public FunctorizedFactor<double, Vector> {
private: private:
using Base = FunctorizedFactor<double, Vector>; using Base = FunctorizedFactor<double, Vector>;
@ -85,7 +85,7 @@ class GTSAM_EXPORT EvaluationFactor : public FunctorizedFactor<double, Vector> {
* @param M: Size of the evaluated state vector. * @param M: Size of the evaluated state vector.
*/ */
template <class BASIS, int M> template <class BASIS, int M>
class GTSAM_EXPORT VectorEvaluationFactor class VectorEvaluationFactor
: public FunctorizedFactor<Vector, ParameterMatrix<M>> { : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
private: private:
using Base = FunctorizedFactor<Vector, ParameterMatrix<M>>; using Base = FunctorizedFactor<Vector, ParameterMatrix<M>>;
@ -148,7 +148,7 @@ class GTSAM_EXPORT VectorEvaluationFactor
* where N is the degree and i is the component index. * where N is the degree and i is the component index.
*/ */
template <class BASIS, size_t P> template <class BASIS, size_t P>
class GTSAM_EXPORT VectorComponentFactor class VectorComponentFactor
: public FunctorizedFactor<double, ParameterMatrix<P>> { : public FunctorizedFactor<double, ParameterMatrix<P>> {
private: private:
using Base = FunctorizedFactor<double, ParameterMatrix<P>>; using Base = FunctorizedFactor<double, ParameterMatrix<P>>;
@ -217,7 +217,7 @@ class GTSAM_EXPORT VectorComponentFactor
* where `x` is the value (e.g. timestep) at which the rotation was evaluated. * where `x` is the value (e.g. timestep) at which the rotation was evaluated.
*/ */
template <class BASIS, typename T> template <class BASIS, typename T>
class GTSAM_EXPORT ManifoldEvaluationFactor class ManifoldEvaluationFactor
: public FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>> { : public FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>> {
private: private:
using Base = FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>>; using Base = FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>>;
@ -269,7 +269,7 @@ class GTSAM_EXPORT ManifoldEvaluationFactor
* @param BASIS: The basis class to use e.g. Chebyshev2 * @param BASIS: The basis class to use e.g. Chebyshev2
*/ */
template <class BASIS> template <class BASIS>
class GTSAM_EXPORT DerivativeFactor class DerivativeFactor
: public FunctorizedFactor<double, typename BASIS::Parameters> { : public FunctorizedFactor<double, typename BASIS::Parameters> {
private: private:
using Base = FunctorizedFactor<double, typename BASIS::Parameters>; using Base = FunctorizedFactor<double, typename BASIS::Parameters>;
@ -318,7 +318,7 @@ class GTSAM_EXPORT DerivativeFactor
* @param M: Size of the evaluated state vector derivative. * @param M: Size of the evaluated state vector derivative.
*/ */
template <class BASIS, int M> template <class BASIS, int M>
class GTSAM_EXPORT VectorDerivativeFactor class VectorDerivativeFactor
: public FunctorizedFactor<Vector, ParameterMatrix<M>> { : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
private: private:
using Base = FunctorizedFactor<Vector, ParameterMatrix<M>>; using Base = FunctorizedFactor<Vector, ParameterMatrix<M>>;
@ -371,7 +371,7 @@ class GTSAM_EXPORT VectorDerivativeFactor
* @param P: Size of the control component derivative. * @param P: Size of the control component derivative.
*/ */
template <class BASIS, int P> template <class BASIS, int P>
class GTSAM_EXPORT ComponentDerivativeFactor class ComponentDerivativeFactor
: public FunctorizedFactor<double, ParameterMatrix<P>> { : public FunctorizedFactor<double, ParameterMatrix<P>> {
private: private:
using Base = FunctorizedFactor<double, ParameterMatrix<P>>; using Base = FunctorizedFactor<double, ParameterMatrix<P>>;

View File

@ -31,7 +31,7 @@ namespace gtsam {
* These are typically denoted with the symbol T_n, where n is the degree. * These are typically denoted with the symbol T_n, where n is the degree.
* The parameter N is the number of coefficients, i.e., N = n+1. * The parameter N is the number of coefficients, i.e., N = n+1.
*/ */
struct Chebyshev1Basis : Basis<Chebyshev1Basis> { struct GTSAM_EXPORT Chebyshev1Basis : Basis<Chebyshev1Basis> {
using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>; using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>;
Parameters parameters_; Parameters parameters_;
@ -79,7 +79,7 @@ struct Chebyshev1Basis : Basis<Chebyshev1Basis> {
* functions. In this sense, they are like the sines and cosines of the Fourier * functions. In this sense, they are like the sines and cosines of the Fourier
* basis. * basis.
*/ */
struct Chebyshev2Basis : Basis<Chebyshev2Basis> { struct GTSAM_EXPORT Chebyshev2Basis : Basis<Chebyshev2Basis> {
using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>; using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>;
/** /**

View File

@ -24,7 +24,7 @@
namespace gtsam { namespace gtsam {
/// Fourier basis /// Fourier basis
class GTSAM_EXPORT FourierBasis : public Basis<FourierBasis> { class FourierBasis : public Basis<FourierBasis> {
public: public:
using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>; using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>;
using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>; using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>;

View File

@ -44,9 +44,6 @@ class Chebyshev2 {
static Matrix DerivativeWeights(size_t N, double x, double a, double b); static Matrix DerivativeWeights(size_t N, double x, double a, double b);
static Matrix IntegrationWeights(size_t N, double a, double b); static Matrix IntegrationWeights(size_t N, double a, double b);
static Matrix DifferentiationMatrix(size_t N, double a, double b); static Matrix DifferentiationMatrix(size_t N, double a, double b);
// TODO Needs OptionalJacobian
// static double Derivative(double x, Vector f);
}; };
#include <gtsam/basis/ParameterMatrix.h> #include <gtsam/basis/ParameterMatrix.h>