Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t > Class Template Referenceabstract

Template specialisation for spline interpolation method with returning JResultDerivative data structure. More...

#include <JHermiteSpline.hh>

Inheritance diagram for JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >:
JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t > JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > > JTOOLS::JFunctional<>

Public Types

typedef JHermiteSplineCollection< JElement_t, JCollection_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::distance_type distance_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 JResultType< ordinate_type >::result_type data_type
 
typedef JFunctional< abscissa_type, JResultDerivative< data_type > > function_type
 
typedef function_type::argument_type argument_type
 
typedef function_type::result_type result_type
 
typedef function_type::JExceptionHandler exceptionhandler_type
 
typedef JFunctional< argument_type, result_typefunctional_type
 
typedef JFunctional< argument_type, result_typefunctional_type
 

Public Member Functions

 JHermiteSplineFunction ()
 Default constructor.
 
virtual result_type evaluate (const argument_type *pX) const override
 Recursive interpolation method implementation.
 
void compile (const bool monotone)
 Determination of derivatives.
 
virtual result_type evaluate (const argument_type *pX) const=0
 Recursive function value evaluation.
 
virtual const JExceptionHandler & getExceptionHandler () const=0
 Get exception handler.
 
virtual const JExceptionHandler & getExceptionHandler () const=0
 Get exception handler.
 

Static Public Member Functions

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

Protected Member Functions

virtual void do_compile () override
 Determination of derivatives.
 

Static Protected Member Functions

static abscissa_type h00 (abscissa_type t)
 
static abscissa_type h10 (abscissa_type t)
 
static abscissa_type h01 (abscissa_type t)
 
static abscissa_type h11 (abscissa_type t)
 
static abscissa_type h00p (abscissa_type t)
 
static abscissa_type h10p (abscissa_type t)
 
static abscissa_type h01p (abscissa_type t)
 
static abscissa_type h11p (abscissa_type t)
 
static abscissa_type H00 (abscissa_type t)
 
static abscissa_type H10 (abscissa_type t)
 
static abscissa_type H01 (abscissa_type t)
 
static abscissa_type H11 (abscissa_type t)
 

Detailed Description

template<class JElement_t, template< class, class > class JCollection_t, class JDistance_t>
class JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >

Template specialisation for spline interpolation method with returning JResultDerivative data structure.

Definition at line 278 of file JHermiteSpline.hh.

Member Typedef Documentation

◆ collection_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
JHermiteSplineCollection<JElement_t, JCollection_t, JDistance_t> JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::collection_type

Definition at line 288 of file JHermiteSpline.hh.

◆ abscissa_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::abscissa_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::abscissa_type

Definition at line 290 of file JHermiteSpline.hh.

◆ ordinate_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::ordinate_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::ordinate_type

Definition at line 291 of file JHermiteSpline.hh.

◆ value_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::value_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::value_type

Definition at line 292 of file JHermiteSpline.hh.

◆ distance_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::distance_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::distance_type

Definition at line 293 of file JHermiteSpline.hh.

◆ const_iterator

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::const_iterator JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::const_iterator

Definition at line 295 of file JHermiteSpline.hh.

◆ const_reverse_iterator

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::const_reverse_iterator JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::const_reverse_iterator

Definition at line 296 of file JHermiteSpline.hh.

◆ iterator

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::iterator JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::iterator

Definition at line 297 of file JHermiteSpline.hh.

◆ reverse_iterator

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
collection_type::reverse_iterator JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::reverse_iterator

Definition at line 298 of file JHermiteSpline.hh.

◆ data_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
JResultType<ordinate_type>::result_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::data_type

Definition at line 300 of file JHermiteSpline.hh.

◆ function_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
JFunctional<abscissa_type, JResultDerivative<data_type> > JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::function_type

Definition at line 301 of file JHermiteSpline.hh.

◆ argument_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
function_type::argument_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::argument_type

Definition at line 303 of file JHermiteSpline.hh.

◆ result_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
function_type::result_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::result_type

Definition at line 304 of file JHermiteSpline.hh.

◆ exceptionhandler_type

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
function_type::JExceptionHandler JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::exceptionhandler_type

Definition at line 305 of file JHermiteSpline.hh.

◆ functional_type [1/2]

JFunctional<argument_type, result_type> JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > >::functional_type
inherited

Definition at line 85 of file JFunctional.hh.

◆ functional_type [2/2]

JFunctional<argument_type, result_type> JTOOLS::JFunctional< JArgument_t, JResult_t >::functional_type
inherited

Definition at line 85 of file JFunctional.hh.

Constructor & Destructor Documentation

◆ JHermiteSplineFunction()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::JHermiteSplineFunction ( )
inline

Default constructor.

Definition at line 311 of file JHermiteSpline.hh.

312 {}

Member Function Documentation

◆ evaluate() [1/2]

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
virtual result_type JTOOLS::JHermiteSplineFunction< JElement_t, JCollection_t, JResultDerivative< typename JResultType< typename JElement_t::ordinate_type >::result_type >, JDistance_t >::evaluate ( const argument_type * pX) const
inlineoverridevirtual

Recursive interpolation method implementation.

Parameters
pXpointer to abscissa values
Returns
function value

Implements JTOOLS::JFunctional<>.

Definition at line 321 of file JHermiteSpline.hh.

322 {
324
325 const argument_type x = *pX;
326
327 if (this->size() <= 1u) {
328
329 try {
330 return this->getExceptionHandler().action();
331 }
332 catch (const JException& error) {
333
334 std::ostringstream os;
335
336 os << __FILE__ << ':' << __LINE__ << " not enough data " << STREAM("?") << x;
337
338 throw JFunctionalException(os.str());
339 }
340 }
341
342 const_iterator p = this->lower_bound(x);
343
344
345 if ((p == this->begin() && this->getDistance(x, (p++)->getX()) > distance_type::precision) ||
346 (p == this->end() && this->getDistance((--p)->getX(), x) > distance_type::precision)) {
347
348 try {
349 return this->getExceptionHandler().action();
350 }
351 catch (const JException& error) {
352
353 std::ostringstream os;
354
355 os << __FILE__ << ':' << __LINE__ << " abscissa out of range "
356 << STREAM("?") << x << " <> "
357 << STREAM("?") << this->begin() ->getX() << ' '
358 << STREAM("?") << this->rbegin()->getX();
359
360 throw JValueOutOfRange(os.str());
361 }
362 }
363
364 const_iterator q = p--;
365
366 const double dx = this->getDistance(p->getX(), q->getX());
367 const double t = this->getDistance(p->getX(), x) / dx;
368
369 result.f = h00 (t)*p->getY() + h10 (t)*p->getU()*dx + h01 (t)*q->getY() + h11 (t)*q->getU()*dx;
370 result.fp = h00p(t)*p->getY()/dx + h10p(t)*p->getU() + h01p(t)*q->getY()/dx + h11p(t)*q->getU();
371
372 return result;
373 }
return result
Definition JPolint.hh:862
Auxiliary data structure for handling std::ostream.

◆ h00()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h00 ( abscissa_type t)
inlinestaticprotected

Definition at line 127 of file JHermiteSpline.hh.

127{ return (1.0 + 2*t) * (1.0 - t) * (1.0 - t); }

◆ h10()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h10 ( abscissa_type t)
inlinestaticprotected

Definition at line 128 of file JHermiteSpline.hh.

128{ return t * (1.0 - t) * (1.0 - t); }

◆ h01()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h01 ( abscissa_type t)
inlinestaticprotected

Definition at line 129 of file JHermiteSpline.hh.

129{ return t * t * (3.0 - 2*t); }

◆ h11()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h11 ( abscissa_type t)
inlinestaticprotected

Definition at line 130 of file JHermiteSpline.hh.

130{ return t * t * (t - 1.0); }

◆ h00p()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h00p ( abscissa_type t)
inlinestaticprotected

Definition at line 132 of file JHermiteSpline.hh.

132{ return 6 * t * (t - 1.0); }

◆ h10p()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h10p ( abscissa_type t)
inlinestaticprotected

Definition at line 133 of file JHermiteSpline.hh.

133{ return t * (3*t - 4.0) + 1.0; }

◆ h01p()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h01p ( abscissa_type t)
inlinestaticprotected

Definition at line 134 of file JHermiteSpline.hh.

134{ return 6 * t * (1.0 -t); }

◆ h11p()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::h11p ( abscissa_type t)
inlinestaticprotected

Definition at line 135 of file JHermiteSpline.hh.

135{ return t * (3*t - 2.0); }

◆ compile()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
void JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::compile ( const bool monotone)
inlineinherited

Determination of derivatives.

Parameters
monotonemonotone

Definition at line 76 of file JHermiteSpline.hh.

77 {
78 using namespace std;
79
80 if (this->size() >= 2u) {
81
82 {
83 iterator j = this->begin(), i = j++;
84
85 i->setU((j->getY() - i->getY()) / this->getDistance(i->getX(), j->getX()));
86 }
87
88 {
89 reverse_iterator j = this->rbegin(), i = j++;
90
91 i->setU((j->getY() - i->getY()) / this->getDistance(i->getX(), j->getX()));
92 }
93
94 for (iterator k = this->begin(), i = k++, j = k++; k != this->end(); ++i, ++j, ++k) {
95 j->setU(0.5 * ((j->getY() - i->getY()) / this->getDistance(i->getX(), j->getX()) +
96 (k->getY() - j->getY()) / this->getDistance(j->getX(), k->getX())));
97 }
98
99 if (monotone) {
100
101 for (iterator j = this->begin(), i = j++; j != this->end(); ++i, ++j) {
102 if (i->getY() == j->getY()) {
103 j->setU(JMATH::zero);
104 }
105 }
106
107 for (iterator j = this->begin(), i = j++; j != this->end(); ++i, ++j) {
108
109 const ordinate_type u = (j->getY() - i->getY()) / this->getDistance(i->getX(), j->getX());
110 const ordinate_type w = (i->getU()*i->getU() + j->getU()*j->getU());
111
112 if (w > 9.0*u*u) {
113
114 const ordinate_type v = 3.0*u/sqrt(w);
115
116 i->setU(v*i->getU());
117 j->setU(v*j->getU());
118 }
119 }
120 }
121 }
122 }
collection_type::reverse_iterator reverse_iterator
collection_type::ordinate_type ordinate_type
static const JZero zero
Function object to assign zero value.
Definition JZero.hh:105
int j
Definition JPolint.hh:801

◆ H00()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::H00 ( abscissa_type t)
inlinestaticprotectedinherited

Definition at line 137 of file JHermiteSpline.hh.

137{ return t * (t * t * (0.5*t - 1.0) + 1.0); }

◆ H10()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::H10 ( abscissa_type t)
inlinestaticprotectedinherited

Definition at line 138 of file JHermiteSpline.hh.

138{ return t * t * (t * (0.25*t - 2.0/3.0) + 0.5); }

◆ H01()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::H01 ( abscissa_type t)
inlinestaticprotectedinherited

Definition at line 139 of file JHermiteSpline.hh.

139{ return t * t * t * (1.0 - 0.5*t); }

◆ H11()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
static abscissa_type JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::H11 ( abscissa_type t)
inlinestaticprotectedinherited

Definition at line 140 of file JHermiteSpline.hh.

140{ return t * t * t * (0.25*t - 1.0/3.0); }

◆ do_compile()

template<class JElement_t , template< class, class > class JCollection_t, class JDistance_t >
virtual void JTOOLS::JHermiteSplineCollection< JElement_t, JCollection_t, JDistance_t >::do_compile ( )
inlineoverrideprotectedvirtualinherited

Determination of derivatives.

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

Definition at line 153 of file JHermiteSpline.hh.

154 {
155 compile(true);
156 }
void compile(const bool monotone)
Determination of derivatives.

◆ evaluate() [2/2]

virtual result_type JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > >::evaluate ( const argument_type * pX) const
pure virtualinherited

Recursive function value evaluation.

Parameters
pXpointer to abscissa values
Returns
function value

◆ getValue() [1/4]

static result_type JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > >::getValue ( const JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > > & function,
const argument_type * pX )
inlinestaticinherited

Recursive function value evaluation.

Parameters
functionfunction
pXpointer to abscissa values

Definition at line 103 of file JFunctional.hh.

105 {
106 return function.evaluate(pX);
107 }

◆ getValue() [2/4]

static JClass< result_type >::argument_type JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > >::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 117 of file JFunctional.hh.

119 {
120 return value;
121 }

◆ getExceptionHandler() [1/2]

virtual const JExceptionHandler & JTOOLS::JFunctional< JElement_t::abscissa_type, JResultDerivative< JResultType< JElement_t::ordinate_type >::result_type > >::getExceptionHandler ( ) const
pure virtualinherited

Get exception handler.

Returns
exception handler

◆ getValue() [3/4]

static result_type JTOOLS::JFunctional< JArgument_t, JResult_t >::getValue ( const JFunctional<> & function,
const argument_type * pX )
inlinestaticinherited

Recursive function value evaluation.

Parameters
functionfunction
pXpointer to abscissa values

Definition at line 103 of file JFunctional.hh.

105 {
106 return function.evaluate(pX);
107 }

◆ getValue() [4/4]

static JClass< result_type >::argument_type JTOOLS::JFunctional< JArgument_t, JResult_t >::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 117 of file JFunctional.hh.

119 {
120 return value;
121 }

◆ getExceptionHandler() [2/2]

virtual const JExceptionHandler & JTOOLS::JFunctional< JArgument_t, JResult_t >::getExceptionHandler ( ) const
pure virtualinherited

Get exception handler.

Returns
exception handler

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