LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | List of all members
lsst::geom::polynomials::ScaledBasis1d< Nested > Class Template Reference

A 1-d basis that transforms all input points before evaluating nested basis. More...

#include <ScaledBasis1d.h>

Public Types

using Function = Function1d< ScaledBasis1d >
 A Function1d object that uses this basis. More...
 
using Scaled = ScaledBasis1d< Nested >
 The type returned by scale(). More...
 

Public Member Functions

 ScaledBasis1d (Nested const &nested, Scaling1d const &scaling)
 Construct a scaled basis from a nested basis and a scaling transform. More...
 
 ScaledBasis1d (std::size_t order, double min, double max)
 Construct a basis that remaps the given interval to [-1, 1] before evaluating the nested basis. More...
 
 ScaledBasis1d (ScaledBasis1d const &)=default
 Default copy constructor. More...
 
 ScaledBasis1d (ScaledBasis1d &&)=default
 Default move constructor. More...
 
ScaledBasis1doperator= (ScaledBasis1d const &)=default
 Default copy assignment. More...
 
ScaledBasis1doperator= (ScaledBasis1d &&)=default
 Default move assignment. More...
 
Nested const & getNested () const noexcept
 Return the nested basis. More...
 
Scaling1d const & getScaling () const noexcept
 Return the scaling transform. More...
 
std::size_t getOrder () const
 Return the order of the basis. More...
 
std::size_t size () const
 Return the number of elements in the basis. More...
 
Scaled scaled (Scaling1d const &first) const
 Return a further-scaled basis with the same order. More...
 
template<typename Vector >
double sumWith (double x, Vector const &coefficients, SumMode mode=SumMode::FAST) const
 Evaluate a basis expansion with the given coefficients. More...
 
template<typename Vector >
void fill (double x, Vector &&basis) const
 Evaluate the basis at a given point. More...
 

Detailed Description

template<typename Nested>
class lsst::geom::polynomials::ScaledBasis1d< Nested >

A 1-d basis that transforms all input points before evaluating nested basis.

If the nested basis is defined by basis functions \(B_n(x)\), the scaled basis functions are \(B_n(S(x))\), where \(S(x)\) is the scaling transform.

Both the nested basis and ScaledBasis1d itself are models of the Basis1d concept.

Definition at line 44 of file ScaledBasis1d.h.

Member Typedef Documentation

◆ Function

template<typename Nested >
using lsst::geom::polynomials::ScaledBasis1d< Nested >::Function = Function1d<ScaledBasis1d>

A Function1d object that uses this basis.

Definition at line 48 of file ScaledBasis1d.h.

◆ Scaled

template<typename Nested >
using lsst::geom::polynomials::ScaledBasis1d< Nested >::Scaled = ScaledBasis1d<Nested>

The type returned by scale().

Definition at line 51 of file ScaledBasis1d.h.

Constructor & Destructor Documentation

◆ ScaledBasis1d() [1/4]

template<typename Nested >
lsst::geom::polynomials::ScaledBasis1d< Nested >::ScaledBasis1d ( Nested const &  nested,
Scaling1d const &  scaling 
)
inlineexplicit

Construct a scaled basis from a nested basis and a scaling transform.

Definition at line 54 of file ScaledBasis1d.h.

54  :
55  _nested(nested),
56  _scaling(scaling)
57  {}
table::Key< double > scaling
table::Key< int > nested

◆ ScaledBasis1d() [2/4]

template<typename Nested >
lsst::geom::polynomials::ScaledBasis1d< Nested >::ScaledBasis1d ( std::size_t  order,
double  min,
double  max 
)
inline

Construct a basis that remaps the given interval to [-1, 1] before evaluating the nested basis.

Parameters
[in]orderMaximum order of the basis (inclusive).
[in]minMinimum point of the interval, mapped to -1.
[in]maxMaximum point of the interval, mapped to 1.

This constructor is particularly useful for Chebyshev polynomials, for which most of the special functions of the basis are only active when the domain is limited to [-1, 1].

This signature requires that Nested(order) be a valid constructor.

Definition at line 73 of file ScaledBasis1d.h.

73  :
74  _nested(order),
75  _scaling(makeUnitRangeScaling1d(min, max))
76  {}
int min
int max
Scaling1d makeUnitRangeScaling1d(double min, double max) noexcept
Return a Scaling1d that maps the interval [min, max] to [-1, 1].
Definition: Scaling1d.h:120
table::Key< int > order

◆ ScaledBasis1d() [3/4]

template<typename Nested >
lsst::geom::polynomials::ScaledBasis1d< Nested >::ScaledBasis1d ( ScaledBasis1d< Nested > const &  )
default

Default copy constructor.

◆ ScaledBasis1d() [4/4]

template<typename Nested >
lsst::geom::polynomials::ScaledBasis1d< Nested >::ScaledBasis1d ( ScaledBasis1d< Nested > &&  )
default

Default move constructor.

Member Function Documentation

◆ fill()

template<typename Nested >
template<typename Vector >
void lsst::geom::polynomials::ScaledBasis1d< Nested >::fill ( double  x,
Vector &&  basis 
) const
inline

Evaluate the basis at a given point.

Parameters
[in]xPoint at which to evaluate the basis functions.
[out]basisOutput vector. See Basis1d::fill more information.
Exception Safety
Does not throw unless coefficients[n] does, and provides basic exception safety if it does.

Definition at line 146 of file ScaledBasis1d.h.

146  {
147  return getNested().fill(getScaling().applyForward(x), std::forward<Vector>(basis));
148  }
double x
Nested const & getNested() const noexcept
Return the nested basis.
Definition: ScaledBasis1d.h:91
Scaling1d const & getScaling() const noexcept
Return the scaling transform.
Definition: ScaledBasis1d.h:94
table::Key< table::Array< double > > basis
Definition: PsfexPsf.cc:361

◆ getNested()

template<typename Nested >
Nested const& lsst::geom::polynomials::ScaledBasis1d< Nested >::getNested ( ) const
inlinenoexcept

Return the nested basis.

Definition at line 91 of file ScaledBasis1d.h.

91 { return _nested; }

◆ getOrder()

template<typename Nested >
std::size_t lsst::geom::polynomials::ScaledBasis1d< Nested >::getOrder ( ) const
inline

Return the order of the basis.

Definition at line 97 of file ScaledBasis1d.h.

97 { return getNested().getOrder(); }

◆ getScaling()

template<typename Nested >
Scaling1d const& lsst::geom::polynomials::ScaledBasis1d< Nested >::getScaling ( ) const
inlinenoexcept

Return the scaling transform.

Definition at line 94 of file ScaledBasis1d.h.

94 { return _scaling; }

◆ operator=() [1/2]

template<typename Nested >
ScaledBasis1d& lsst::geom::polynomials::ScaledBasis1d< Nested >::operator= ( ScaledBasis1d< Nested > &&  )
default

Default move assignment.

◆ operator=() [2/2]

template<typename Nested >
ScaledBasis1d& lsst::geom::polynomials::ScaledBasis1d< Nested >::operator= ( ScaledBasis1d< Nested > const &  )
default

Default copy assignment.

◆ scaled()

template<typename Nested >
Scaled lsst::geom::polynomials::ScaledBasis1d< Nested >::scaled ( Scaling1d const &  first) const
inline

Return a further-scaled basis with the same order.

The scaled basis will transform all points by the given scaling before evaluating the basis functions in the same way as this.

Definition at line 108 of file ScaledBasis1d.h.

108  {
109  return getNested().scaled(first.then(getScaling()));
110  }

◆ size()

template<typename Nested >
std::size_t lsst::geom::polynomials::ScaledBasis1d< Nested >::size ( ) const
inline

Return the number of elements in the basis.

Definition at line 100 of file ScaledBasis1d.h.

100 { return getNested().size(); }

◆ sumWith()

template<typename Nested >
template<typename Vector >
double lsst::geom::polynomials::ScaledBasis1d< Nested >::sumWith ( double  x,
Vector const &  coefficients,
SumMode  mode = SumMode::FAST 
) const
inline

Evaluate a basis expansion with the given coefficients.

If the basis elements are \(B_n(x)\) and the given coefficients are a vector \(a_n\), this computes

\[ \sum_{n = 0}^{n \le N} a_n B_n(x) \]

Parameters
[in]xPoint at which to evaluate the expansion.
[in]coefficientsCoefficients vector. See Basis1d::sumWith for more information.
[in]modeEnum indicating the tradeoff to make between speed and numerical precision.
Exception Safety
Does not throw unless coefficients[n] does, and provides the same exception safety as it if it does.

Definition at line 131 of file ScaledBasis1d.h.

131  {
132  return getNested().sumWith(getScaling().applyForward(x), coefficients, mode);
133  }
ndarray::Array< double const, 2, 2 > coefficients

The documentation for this class was generated from the following file: