Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Private Member Functions | List of all members
JMATH::JPolynome< ID_t, N > Struct Template Reference

Recursive template class for polynomial function. More...

#include <JMathlib.hh>

Inheritance diagram for JMATH::JPolynome< ID_t, N >:
JMATH::JMathlib< JPolynome< ID_t, N > > JMATH::JCalculus< JPolynome< ID_t, N > > JMATH::JPolynome_t std::vector< double > JMATH::JMath< JPolynome_t > JLANG::JEquals< JFirst_t, JSecond_t >

Public Member Functions

 JPolynome ()
 Default constructor. More...
 
template<class ... Args>
 JPolynome (const Args &...args)
 Constructor. More...
 
double getValue (const double x) const
 Function value. More...
 
double getDerivative (const double x) const
 Derivative value. More...
 
const JPolynomegetGradient (const double x) const
 Get gradient. More...
 
 JPolynome ()
 Default constructor. More...
 
 JPolynome (const JPolynome_t &polynome)
 Copy constructor. More...
 
template<class T >
 JPolynome (T __begin, T __end)
 Constructor. More...
 
template<class ... Args>
 JPolynome (const Args &...args)
 Initialise constructor. More...
 
template<class ... Args>
JPolynomeset (const Args &...args)
 Set values. More...
 
double getValue (const double x) const
 Function value. More...
 
double getDerivative (const double x) const
 Derivative value. More...
 
double getIntegral (const double x) const
 Integral value. More...
 
double operator() (const double x) const
 Function value. More...
 
JPolynome getDerivative () const
 Get derivative function. More...
 
JPolynome getIntegral () const
 get integral function. More...
 
JPolynome_t getGradient (const double x) const
 Get gradient. More...
 
double operator() (const Args &...args) const
 Function value. More...
 
JPolynome< ID_t, N > & negate ()
 Negate function. More...
 
JPolynome< ID_t, N > & add (const JPolynome< ID_t, N > &f1)
 Add function. More...
 
JPolynome< ID_t, N > & sub (const JPolynome< ID_t, N > &f1)
 Subtract function. More...
 
JPolynome< ID_t, N > & mul (const double factor)
 Scale function. More...
 
JPolynome< ID_t, N > & div (const double factor)
 Scale function. More...
 
bool equals (const JPolynome_t &P, const double eps=std::numeric_limits< double >::min()) const
 Equality. More...
 
JPolynome_tadd (const JPolynome_t &polynome)
 Add polynome. More...
 
JPolynome_tsub (const JPolynome_t &polynome)
 Subtract polynome. More...
 
JPolynome_tmul (const double factor)
 Scale polynome. More...
 
JPolynome_tmul (const JSecond_t &object)
 Multiply with object. More...
 

Public Attributes

double a
 a[N] More...
 

Static Public Attributes

static const int ID = ID_t
 
static const size_t NUMBER_OF_DEGREES = N
 
static const parameter_list< JPolynomeparameters
 parameters More...
 

Protected Member Functions

void set (const double *pA)
 Set parameter values. More...
 

Private Member Functions

template<class ... Args>
void __set__ (const double x, const Args &...args)
 Recursive method for setting values. More...
 
void __set__ () const
 Termination method for setting values. More...
 

Detailed Description

template<int ID_t, size_t N>
struct JMATH::JPolynome< ID_t, N >

Recursive template class for polynomial function.

Polynome function object.

Evaluates function, derivative, integral and gradient values.

Definition at line 1377 of file JMathlib.hh.

Constructor & Destructor Documentation

◆ JPolynome() [1/6]

template<int ID_t, size_t N>
JMATH::JPolynome< ID_t, N >::JPolynome ( )
inline

Default constructor.

Definition at line 1397 of file JMathlib.hh.

1397  :
1398  a(0.0)
1399  {}
double a
a[N]
Definition: JMathlib.hh:1456

◆ JPolynome() [2/6]

template<int ID_t, size_t N>
template<class ... Args>
JMATH::JPolynome< ID_t, N >::JPolynome ( const Args &...  args)
inline

Constructor.

Parameters
argslist of values

Definition at line 1408 of file JMathlib.hh.

1408  :
1409  JPolynome()
1410  {
1411  set(make_carray(args...));
1412  }
void set(const double *pA)
Set parameter values.
Definition: JMathlib.hh:1465
JPolynome()
Default constructor.
Definition: JMathlib.hh:1397
void function
Definition: JMathlib.hh:32

◆ JPolynome() [3/6]

template<int ID_t, size_t N>
JMATH::JPolynome< ID_t, N >::JPolynome ( )
inline

Default constructor.

Definition at line 169 of file JPolynome.hh.

170  {}

◆ JPolynome() [4/6]

template<int ID_t, size_t N>
JMATH::JPolynome< ID_t, N >::JPolynome ( const JPolynome_t polynome)
inline

Copy constructor.

Parameters
polynomepolynome

Definition at line 178 of file JPolynome.hh.

178  :
179  JPolynome_t(polynome)
180  {}
JPolynome_t()
Default constructor.
Definition: JPolynome.hh:36

◆ JPolynome() [5/6]

template<int ID_t, size_t N>
template<class T >
JMATH::JPolynome< ID_t, N >::JPolynome ( __begin,
__end 
)
inline

Constructor.

Parameters
__beginbegin of data
__endend of data

Definition at line 190 of file JPolynome.hh.

192  {
193  for (T i = __begin; i != __end; ++i) {
194  push_back(*i);
195  }
196  }

◆ JPolynome() [6/6]

template<int ID_t, size_t N>
template<class ... Args>
JMATH::JPolynome< ID_t, N >::JPolynome ( const Args &...  args)
inline

Initialise constructor.

Parameters
argsvalues

Definition at line 205 of file JPolynome.hh.

206  {
207  set(args...);
208  }

Member Function Documentation

◆ getValue() [1/2]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::getValue ( const double  x) const
inline

Function value.

Parameters
xabscissa value
Returns
function value

Definition at line 1421 of file JMathlib.hh.

1422  {
1423  return a * pow(x,N) + static_cast<const JPolynome<ID_t, N - 1>&>(*this).getValue(x);
1424  }
T pow(const T &x, const double y)
Power .
Definition: JMath.hh:97
Recursive template class for polynomial function.
Definition: JMathlib.hh:1381
double getValue(const double x) const
Function value.
Definition: JMathlib.hh:1421

◆ getDerivative() [1/3]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::getDerivative ( const double  x) const
inline

Derivative value.

Parameters
xabscissa value
Returns
derivative value

Definition at line 1433 of file JMathlib.hh.

1434  {
1435  return N * a * pow(x,N-1) + static_cast<const JPolynome<ID_t, N - 1>&>(*this).getDerivative(x);
1436  }
double getDerivative(const double x) const
Derivative value.
Definition: JMathlib.hh:1433

◆ getGradient() [1/2]

template<int ID_t, size_t N>
const JPolynome& JMATH::JPolynome< ID_t, N >::getGradient ( const double  x) const
inline

Get gradient.

Parameters
xabscissa value
Returns
gradient

Definition at line 1445 of file JMathlib.hh.

1446  {
1447  static JPolynome gradient; // d(f)/d(a)
1448 
1449  gradient.a = pow(x,N);
1450 
1451  static_cast<JPolynome<ID_t, N - 1>&>(gradient) = static_cast<const JPolynome<ID_t, N - 1>&>(*this).getGradient(x);
1452 
1453  return gradient;
1454  }
const JPolynome & getGradient(const double x) const
Get gradient.
Definition: JMathlib.hh:1445

◆ set() [1/2]

template<int ID_t, size_t N>
void JMATH::JPolynome< ID_t, N >::set ( const double *  pA)
inlineprotected

Set parameter values.

Parameters
pApointer to list of values

Definition at line 1465 of file JMathlib.hh.

1466  {
1467  a = pA[N];
1468 
1470  }

◆ set() [2/2]

template<int ID_t, size_t N>
template<class ... Args>
JPolynome& JMATH::JPolynome< ID_t, N >::set ( const Args &...  args)
inline

Set values.

Parameters
argsvalues

Definition at line 217 of file JPolynome.hh.

218  {
219  clear();
220 
221  __set__(args...);
222 
223  return *this;
224  }
void __set__() const
Termination method for setting values.
Definition: JPolynome.hh:386

◆ getValue() [2/2]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::getValue ( const double  x) const
inline

Function value.

Parameters
xabscissa value
Returns
function value

Definition at line 233 of file JPolynome.hh.

234  {
235  double y = 0.0;
236  double z = 1.0;
237 
238  for (const_iterator i = begin(); i != end(); ++i, z *= x) {
239  y += (*i) * z;
240  }
241 
242  return y;
243  }

◆ getDerivative() [2/3]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::getDerivative ( const double  x) const
inline

Derivative value.

Parameters
xabscissa value
Returns
derivative value

Definition at line 252 of file JPolynome.hh.

253  {
254  double y = 0.0;
255 
256  if (!empty()) {
257 
258  double z = 1.0;
259  int n = 1;
260 
261  for (const_iterator i = begin(); ++i != end(); ++n, z *= x) {
262  y += (*i) * z * n;
263  }
264  }
265 
266  return y;
267  }
const int n
Definition: JPolint.hh:786

◆ getIntegral() [1/2]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::getIntegral ( const double  x) const
inline

Integral value.

Parameters
xabscissa value
Returns
integral value

Definition at line 276 of file JPolynome.hh.

277  {
278  double y = 0.0;
279  double z = x;
280  int n = 1;
281 
282  for (const_iterator i = begin(); i != end(); ++i, ++n, z *= x) {
283  y += (*i) * z / n;
284  }
285 
286  return y;
287  }

◆ operator()() [1/2]

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::operator() ( const double  x) const
inline

Function value.

Parameters
xabscissa value
Returns
function value

Definition at line 296 of file JPolynome.hh.

297  {
298  return getValue(x);
299  }

◆ getDerivative() [3/3]

template<int ID_t, size_t N>
JPolynome JMATH::JPolynome< ID_t, N >::getDerivative ( ) const
inline

Get derivative function.

Returns
derivative function

Definition at line 307 of file JPolynome.hh.

308  {
309  JPolynome buffer;
310 
311  if (size() == 0u) {
312  } else if (size() == 1u) {
313 
314  buffer.push_back(0.0);
315 
316  } else {
317 
318  int n = 1;
319 
320  for (const_iterator i = begin(); ++i != end(); ++n) {
321  buffer.push_back(n * (*i));
322  }
323  }
324 
325  return buffer;
326  }
double u[N+1]
Definition: JPolint.hh:865

◆ getIntegral() [2/2]

template<int ID_t, size_t N>
JPolynome JMATH::JPolynome< ID_t, N >::getIntegral ( ) const
inline

get integral function.

Returns
integral function

Definition at line 334 of file JPolynome.hh.

335  {
336  JPolynome buffer(0.0);
337 
338  int n = 1;
339 
340  for (const_iterator i = begin(); i != end(); ++i, ++n) {
341  buffer.push_back((*i) / (double) n);
342  }
343 
344  return buffer;
345  }

◆ getGradient() [2/2]

template<int ID_t, size_t N>
JPolynome_t JMATH::JPolynome< ID_t, N >::getGradient ( const double  x) const
inline

Get gradient.

Parameters
xabscissa value
Returns
gradient

Definition at line 354 of file JPolynome.hh.

355  {
356  JPolynome_t buffer;
357 
358  double z = 1.0;
359 
360  for (const_iterator i = begin(); i != end(); ++i, z *= x) {
361  buffer.push_back(z); // d(f)/d(x_i)
362  }
363 
364  return buffer;
365  }
Polynome model.
Definition: JPolynome.hh:32

◆ __set__() [1/2]

template<int ID_t, size_t N>
template<class ... Args>
void JMATH::JPolynome< ID_t, N >::__set__ ( const double  x,
const Args &...  args 
)
inlineprivate

Recursive method for setting values.

Parameters
xnext value
argsremaining values

Definition at line 375 of file JPolynome.hh.

376  {
377  this->push_back(x);
378 
379  __set__(args...);
380  }

◆ __set__() [2/2]

template<int ID_t, size_t N>
void JMATH::JPolynome< ID_t, N >::__set__ ( ) const
inlineprivate

Termination method for setting values.

Definition at line 386 of file JPolynome.hh.

387  {}

◆ operator()() [2/2]

double JMATH::JMathlib< JPolynome< ID_t, N > >::operator() ( const Args &...  args) const
inlineinherited

Function value.

Parameters
argsabscissa value(s)
Returns
function value

Definition at line 362 of file JMathlib.hh.

363  {
364  return static_cast<const JF1_t&>(*this).getValue(args...);
365  }

◆ negate()

JPolynome< ID_t, N > & JMATH::JCalculus< JPolynome< ID_t, N > >::negate ( )
inlineinherited

Negate function.

Returns
this function

Definition at line 203 of file JMathlib.hh.

204  {
205  for (const auto& i : JF1_t::parameters) {
206  static_cast<JF1_t&>(*this).*i = -(static_cast<JF1_t&>(*this).*i);
207  }
208 
209  return static_cast<JF1_t&>(*this);
210  }

◆ add() [1/2]

JPolynome< ID_t, N > & JMATH::JCalculus< JPolynome< ID_t, N > >::add ( const JPolynome< ID_t, N > &  f1)
inlineinherited

Add function.

Parameters
f1function
Returns
this function

Definition at line 219 of file JMathlib.hh.

220  {
221  for (const auto& i : JF1_t::parameters) {
222  static_cast<JF1_t&>(*this).*i += f1.*i;
223  }
224 
225  return static_cast<JF1_t&>(*this);
226  }
const JPolynome f1(1.0, 2.0, 3.0)
Function.

◆ sub() [1/2]

JPolynome< ID_t, N > & JMATH::JCalculus< JPolynome< ID_t, N > >::sub ( const JPolynome< ID_t, N > &  f1)
inlineinherited

Subtract function.

Parameters
f1function
Returns
this function

Definition at line 235 of file JMathlib.hh.

236  {
237  for (const auto& i : JF1_t::parameters) {
238  static_cast<JF1_t&>(*this).*i -= f1.*i;
239  }
240 
241  return static_cast<JF1_t&>(*this);
242  }

◆ mul() [1/3]

JPolynome< ID_t, N > & JMATH::JCalculus< JPolynome< ID_t, N > >::mul ( const double  factor)
inlineinherited

Scale function.

Parameters
factorfactor
Returns
this function

Definition at line 251 of file JMathlib.hh.

252  {
253  for (const auto& i : JF1_t::parameters) {
254  static_cast<JF1_t&>(*this).*i *= factor;
255  }
256 
257  return static_cast<JF1_t&>(*this);
258  }

◆ div()

JPolynome< ID_t, N > & JMATH::JCalculus< JPolynome< ID_t, N > >::div ( const double  factor)
inlineinherited

Scale function.

Parameters
factorfactor
Returns
this function

Definition at line 267 of file JMathlib.hh.

268  {
269  for (const auto& i : JF1_t::parameters) {
270  static_cast<JF1_t&>(*this).*i /= factor;
271  }
272 
273  return static_cast<JF1_t&>(*this);
274  }

◆ equals()

bool JMATH::JPolynome_t::equals ( const JPolynome_t P,
const double  eps = std::numeric_limits<double>::min() 
) const
inlineinherited

Equality.

Parameters
Ppolynome
epsnumerical precision
Returns
true if polynomes identical; else false

Definition at line 47 of file JPolynome.hh.

49  {
50  if (this->size() == P.size()) {
51 
52  for (const_iterator p = this->begin(), q = P.begin(); p != this->end(); ++p, ++q) {
53  if (fabs(*p - *q) > eps) {
54  return false;
55  }
56  }
57 
58  return true;
59 
60  } else {
61 
62  return false;
63  }
64  }

◆ add() [2/2]

JPolynome_t& JMATH::JPolynome_t::add ( const JPolynome_t polynome)
inlineinherited

Add polynome.

Parameters
polynomepolynome
Returns
this polynome

Definition at line 73 of file JPolynome.hh.

74  {
75  while (this->size() < polynome.size()) {
76  this->push_back(0.0);
77  }
78 
79  for (size_t i = 0; i != this->size(); ++i) {
80  (*this)[i] += polynome[i];
81  }
82 
83  return *this;
84  }

◆ sub() [2/2]

JPolynome_t& JMATH::JPolynome_t::sub ( const JPolynome_t polynome)
inlineinherited

Subtract polynome.

Parameters
polynomepolynome
Returns
this polynome

Definition at line 93 of file JPolynome.hh.

94  {
95  while (this->size() < polynome.size()) {
96  this->push_back(0.0);
97  }
98 
99  for (size_t i = 0; i != this->size(); ++i) {
100  (*this)[i] -= polynome[i];
101  }
102 
103  return *this;
104  }

◆ mul() [2/3]

JPolynome_t& JMATH::JPolynome_t::mul ( const double  factor)
inlineinherited

Scale polynome.

Parameters
factormultiplication factor
Returns
this polynome

Definition at line 113 of file JPolynome.hh.

114  {
115  for (iterator i = begin(); i != end(); ++i) {
116  (*i) *= factor;
117  }
118 
119  return *this;
120  }

◆ mul() [3/3]

JPolynome_t & JMATH::JMath< JPolynome_t , JSecond_t >::mul ( const JSecond_t &  object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 354 of file JMath.hh.

355  {
356  return static_cast<JFirst_t&>(*this) = JFirst_t().mul(static_cast<const JFirst_t&>(*this), object);
357  }

Member Data Documentation

◆ ID

template<int ID_t, size_t N>
const int JMATH::JPolynome< ID_t, N >::ID = ID_t
static

Definition at line 1382 of file JMathlib.hh.

◆ NUMBER_OF_DEGREES

template<int ID_t, size_t N>
const size_t JMATH::JPolynome< ID_t, N >::NUMBER_OF_DEGREES = N
static

Definition at line 1384 of file JMathlib.hh.

◆ a

template<int ID_t, size_t N>
double JMATH::JPolynome< ID_t, N >::a

a[N]

Definition at line 1456 of file JMathlib.hh.

◆ parameters

template<int ID_t, size_t N>
const parameter_list< JPolynome< ID_t, N > > JMATH::JPolynome< ID_t, N >::parameters
static

parameters

Set parameters.

Definition at line 1457 of file JMathlib.hh.


The documentation for this struct was generated from the following files: