Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
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.
 
template<class ... Args>
 JPolynome (const Args &...args)
 Constructor.
 
double getValue (const double x) const
 Function value.
 
double getDerivative (const double x) const
 Derivative value.
 
const JPolynomegetGradient (const double x) const
 Get gradient.
 
 JPolynome ()
 Default constructor.
 
 JPolynome (const JPolynome_t &polynome)
 Copy constructor.
 
template<class T >
 JPolynome (T __begin, T __end)
 Constructor.
 
template<class ... Args>
 JPolynome (const Args &...args)
 Initialise constructor.
 
template<class ... Args>
JPolynomeset (const Args &...args)
 Set values.
 
double getValue (const double x) const
 Function value.
 
double getDerivative (const double x) const
 Derivative value.
 
double getIntegral (const double x) const
 Integral value.
 
double operator() (const double x) const
 Function value.
 
JPolynome getDerivative () const
 Get derivative function.
 
JPolynome getIntegral () const
 get integral function.
 
JPolynome_t getGradient (const double x) const
 Get gradient.
 
double operator() (const Args &...args) const
 Function value.
 
JPolynome< ID_t, N > & negate ()
 Negate function.
 
JPolynome< ID_t, N > & add (const JPolynome< ID_t, N > &f1)
 Add function.
 
JPolynome< ID_t, N > & sub (const JPolynome< ID_t, N > &f1)
 Subtract function.
 
JPolynome< ID_t, N > & mul (const double factor)
 Scale function.
 
JPolynome< ID_t, N > & div (const double factor)
 Scale function.
 
bool equals (const JPolynome_t &P, const double eps=std::numeric_limits< double >::min()) const
 Equality.
 
JPolynome_tadd (const JPolynome_t &polynome)
 Add polynome.
 
JPolynome_tsub (const JPolynome_t &polynome)
 Subtract polynome.
 
JPolynome_tmul (const double factor)
 Scale polynome.
 
JPolynome_tmul (const JSecond_t &object)
 Multiply with object.
 

Public Attributes

double a
 a[N]
 

Static Public Attributes

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

Protected Member Functions

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

Private Member Functions

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

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 163 of file JPolynome.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 {}

◆ 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

◆ 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 ( T __begin,
T __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

◆ 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 }

◆ 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 }

◆ 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:791

◆ 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 }
double getValue(const double x) const
Function value.
Definition JMathlib.hh:1421

◆ 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 }

◆ 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 }

◆ __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: