Jpp  17.0.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t > Class Template Referenceabstract

Template base class for spline interpolations. More...

#include <JSpline.hh>

Inheritance diagram for JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >:
JTOOLS::JFunctional<> JTOOLS::JSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t > JTOOLS::JSplineFunction< JElement_t, JCollection_t, JResultPDF< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t > JTOOLS::JSplineFunction< JElement_t, JCollection_t, typename JResultType< typename JElement_t::ordinate_type >::result_type, JDistance_t >

Public Types

typedef JCollection_t
< JElement_t, JDistance_t > 
collection_type
 
typedef
collection_type::abscissa_type 
abscissa_type
 
typedef
collection_type::ordinate_type 
ordinate_type
 
typedef collection_type::value_type value_type
 
typedef
collection_type::const_iterator 
const_iterator
 
typedef
collection_type::const_reverse_iterator 
const_reverse_iterator
 
typedef collection_type::iterator iterator
 
typedef
collection_type::reverse_iterator 
reverse_iterator
 
typedef JNullType argument_type
 
typedef JNullType result_type
 
typedef JFunctional
< argument_type, result_type
functional_type
 
typedef JSupervisor supervisor_type
 

Public Member Functions

void compile (const JSplineBounds< ordinate_type > &bounds)
 Determination of second derivatives with specified bounds. More...
 
virtual result_type evaluate (const argument_type *pX) const =0
 Recursive function value evaluation. More...
 
JSupervisor getSupervisor () const
 Get supervisor. More...
 
const JExceptionHandler & getExceptionHandler () const
 Get exception handler. More...
 
void setExceptionHandler (const JSupervisor &supervisor)
 Set the supervisor for handling of exceptions. More...
 

Static Public Member Functions

static result_type getValue (const JFunctional &function, const argument_type *pX)
 Recursive function value evaluation. More...
 
static JClass< result_type >
::argument_type 
getValue (typename JClass< result_type >::argument_type value, const argument_type *pX)
 Termination of recursive function value evaluation. More...
 

Protected Member Functions

 JSplineCollection ()
 Default constructor. More...
 
virtual void do_compile () override
 Determination of second derivatives with no bounds. More...
 

Protected Attributes

JSupervisor supervisor
 

Detailed Description

template<class JElement_t, template< class, class > class JCollection_t, class JDistance_t>
class JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >

Template base class for spline interpolations.

This class partially implements the JFunctional interface.

Note that the data structure of the elements in the collection should have the additional methods:

    ordinate_type getU() const;
    void setU(ordinate_type u);

to get and set the second derivatives, respectively.

Spline interpolation code is taken from reference: Numerical Recipes in C++, W.H. Press, S.A. Teukolsky, W.T. Vetterling and B.P. Flannery, Cambridge University Press.

Definition at line 175 of file JSpline.hh.

Member Typedef Documentation

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef JCollection_t<JElement_t, JDistance_t> JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::collection_type

Definition at line 181 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::abscissa_type JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::abscissa_type

Definition at line 183 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::ordinate_type JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::ordinate_type

Definition at line 184 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::value_type JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::value_type

Definition at line 185 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::const_iterator JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::const_iterator

Definition at line 187 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::const_reverse_iterator JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::const_reverse_iterator

Definition at line 188 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::iterator JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::iterator

Definition at line 189 of file JSpline.hh.

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
typedef collection_type::reverse_iterator JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::reverse_iterator

Definition at line 190 of file JSpline.hh.

Definition at line 84 of file JFunctional.hh.

Definition at line 87 of file JFunctional.hh.

Definition at line 88 of file JFunctional.hh.

typedef JSupervisor JTOOLS::JFunctional< JNullType , JNullType >::supervisor_type
inherited

Definition at line 89 of file JFunctional.hh.

Constructor & Destructor Documentation

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::JSplineCollection ( )
inlineprotected

Default constructor.

Definition at line 295 of file JSpline.hh.

296  {}

Member Function Documentation

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
void JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::compile ( const JSplineBounds< ordinate_type > &  bounds)
inline

Determination of second derivatives with specified bounds.

Parameters
bounds1st derivatives at two extrema.

Definition at line 200 of file JSpline.hh.

201  {
202  const int numberOfElements = this->size();
203 
204  using namespace std;
205 
206  if (numberOfElements > 2) {
207 
208  std::vector<double> buffer(numberOfElements);
209 
210  if (bounds.hasFirstDerivativeAtXmin()) {
211 
212  iterator j = this->begin();
213  iterator i = j++;
214 
215  const double dx = this->getDistance(i->getX(), j->getX());
216  const ordinate_type dy = (j->getY() - i->getY());
217 
218  buffer[0] = -0.5;
219 
220  i->setU((3.0/dx) * (dy/dx - bounds.getFirstDerivativeAtXmin()));
221 
222  } else {
223 
224  buffer[0] = 0.0;
225 
226  this->begin()->setU(JMATH::zero);
227  }
228 
229  int index = 1;
230 
231  for (iterator k = this->begin(), i = k++, j = k++; k != this->end(); ++i, ++j, ++k, ++index) {
232 
233  const abscissa_type x1 = i->getX();
234  const abscissa_type x2 = j->getX();
235  const abscissa_type x3 = k->getX();
236 
237  const ordinate_type& y1 = i->getY();
238  const ordinate_type& y2 = j->getY();
239  const ordinate_type& y3 = k->getY();
240 
241  const double sig = this->getDistance(x1, x2) / this->getDistance(x1, x3);
242  const double h = sig * buffer[index-1] + 2.0;
243 
244  buffer[index] = (sig - 1.0) / h;
245 
246  j->setU((y3 - y2) / this->getDistance(x2, x3) -
247  (y2 - y1) / this->getDistance(x1, x2));
248 
249  j->setU((6.0 * j->getU() / this->getDistance(x1, x3) - sig * i->getU()) / h);
250  }
251 
252 
253  if (bounds.hasFirstDerivativeAtXmax()) {
254 
255  reverse_iterator j = this->rbegin();
256  reverse_iterator i = j++;
257 
258  index = numberOfElements - 2;
259 
260  const double dx = this->getDistance(i->getX(), j->getX());
261  const ordinate_type dy = (j->getY() - i->getY());
262 
263  i->setU((3.0/dx) * (bounds.getFirstDerivativeAtXmax() - dy/dx));
264 
265  i->setU((i->getU() - 0.5*j->getU()) / (0.5*buffer[index] + 1.0));
266 
267  } else {
268 
269  this->rbegin()->setU(JMATH::zero);
270  }
271 
272 
273  reverse_iterator j = this->rbegin();
274  reverse_iterator i = j++;
275 
276  index = numberOfElements - 2;
277 
278  for ( ; j != this->rend(); ++i, ++j, --index) {
279  j->setU(j->getU() + i->getU() * buffer[index]);
280  }
281 
282  } else {
283 
284  for (iterator i = this->begin(); i != this->end(); ++i) {
285  i->setU(JMATH::zero);
286  }
287  }
288  }
ordinate_type getFirstDerivativeAtXmax() const
Get first derivative of function at maximal abscissa value.
Definition: JSpline.hh:129
then fatal No hydrophone data file $HYDROPHONE_TXT fi sort gr k
const bool & hasFirstDerivativeAtXmin() const
Has first derivative of function at minimal abscissa value.
Definition: JSpline.hh:93
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
const bool & hasFirstDerivativeAtXmax() const
Has first derivative of function at maximal abscissa value.
Definition: JSpline.hh:104
collection_type::reverse_iterator reverse_iterator
Definition: JSpline.hh:190
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
ordinate_type getFirstDerivativeAtXmin() const
Get first derivative of function at minimal abscissa value.
Definition: JSpline.hh:115
collection_type::abscissa_type abscissa_type
Definition: JSpline.hh:183
collection_type::ordinate_type ordinate_type
Definition: JSpline.hh:184
int j
Definition: JPolint.hh:682
template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
virtual void JTOOLS::JSplineCollection< JElement_t, JCollection_t, JDistance_t >::do_compile ( )
inlineoverrideprotectedvirtual

Determination of second derivatives with no bounds.

Reimplemented in JTOOLS::JSplineFunction< JElement_t, JCollection_t, JResultPDF< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >.

Definition at line 302 of file JSpline.hh.

303  {
305  }
void compile(const JSplineBounds< ordinate_type > &bounds)
Determination of second derivatives with specified bounds.
Definition: JSpline.hh:200
Auxiliary class to define first derivates of the spline function at the two extrema.
Definition: JSpline.hh:35
virtual result_type JTOOLS::JFunctional< JNullType , JNullType >::evaluate ( const argument_type pX) const
pure virtualinherited

Recursive function value evaluation.

Parameters
pXpointer to abscissa values
Returns
function value
static result_type JTOOLS::JFunctional< JNullType , JNullType >::getValue ( const JFunctional<> &  function,
const argument_type pX 
)
inlinestaticinherited

Recursive function value evaluation.

Parameters
functionfunction
pXpointer to abscissa values

Definition at line 107 of file JFunctional.hh.

109  {
110  return function.evaluate(pX);
111  }
static JClass<result_type>::argument_type JTOOLS::JFunctional< JNullType , JNullType >::getValue ( typename JClass< result_type >::argument_type  value,
const argument_type pX 
)
inlinestaticinherited

Termination of recursive function value evaluation.

Parameters
valueresult
pXpointer to abscissa values

Definition at line 121 of file JFunctional.hh.

123  {
124  return value;
125  }
JSupervisor JTOOLS::JFunctional< JNullType , JNullType >::getSupervisor ( ) const
inlineinherited

Get supervisor.

Returns
supervisor

Definition at line 266 of file JFunctional.hh.

267  {
268  return supervisor;
269  }
JSupervisor supervisor
Definition: JFunctional.hh:295
const JExceptionHandler& JTOOLS::JFunctional< JNullType , JNullType >::getExceptionHandler ( ) const
inlineinherited

Get exception handler.

Returns
exception handler

Definition at line 277 of file JFunctional.hh.

278  {
279  return *supervisor;
280  }
JSupervisor supervisor
Definition: JFunctional.hh:295
void JTOOLS::JFunctional< JNullType , JNullType >::setExceptionHandler ( const JSupervisor &  supervisor)
inlineinherited

Set the supervisor for handling of exceptions.

Parameters
supervisorsupervisor

Definition at line 288 of file JFunctional.hh.

289  {
290  this->supervisor = supervisor;
291  }
JSupervisor supervisor
Definition: JFunctional.hh:295

Member Data Documentation

JSupervisor JTOOLS::JFunctional< JNullType , JNullType >::supervisor
protectedinherited

Definition at line 295 of file JFunctional.hh.


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