Jpp 21.0.0-rc.3
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.
 
template<class T >
 JPolynome (const std::array< T, N+1 > &args)
 Constructor.
 
template<class T >
void set (const std::array< T, N+1 > &args)
 Set values.
 
double getValue (const double x) const
 Function value.
 
double getDerivative (const double x) const
 Derivative value.
 
JPolynome getGradient (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.
 
double operator[] (const size_t i) const
 Get value of parameter at given index.
 
double & operator[] (const size_t i)
 Get value of parameter at given index.
 
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.
 

Static Public Member Functions

static size_t size ()
 Get size of parameter.
 

Public Attributes

double a
 a[N]
 

Static Public Attributes

static const int ID = ID_t
 
static const size_t NUMBER_OF_DEGREES = N
 
static constexpr parameter_list< JPolynome, N+1 > parameters = join<JPolynome>(JPolynome<ID_t, N-1>::parameters, &JPolynome::a)
 

Private Member Functions

template<class T , size_t ... i>
void set (const std::array< T, N+1 > &args, const std::index_sequence< i... > &ls)
 Set values.
 
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/7]

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

Default constructor.

Definition at line 1772 of file JMathlib.hh.

1772 :
1773 a(0.0)
1774 {}

◆ JPolynome() [2/7]

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 1783 of file JMathlib.hh.

1783 :
1784 JPolynome()
1785 {
1786 set(std::array<std::tuple_element_t<0, std::tuple<Args...> >, sizeof...(Args)>{args...});
1787 }
JPolynome()
Default constructor.
Definition JMathlib.hh:1772
void set(const std::array< T, N+1 > &args)
Set values.
Definition JMathlib.hh:1809

◆ JPolynome() [3/7]

template<int ID_t, size_t N>
template<class T >
JMATH::JPolynome< ID_t, N >::JPolynome ( const std::array< T, N+1 > & args)
inline

Constructor.

Parameters
argslist of values

Definition at line 1796 of file JMathlib.hh.

1796 :
1797 JPolynome()
1798 {
1799 set(args);
1800 }

◆ JPolynome() [4/7]

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() [5/7]

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() [6/7]

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() [7/7]

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

◆ set() [1/3]

template<int ID_t, size_t N>
template<class T >
void JMATH::JPolynome< ID_t, N >::set ( const std::array< T, N+1 > & args)
inline

Set values.

Parameters
argsvalues

Definition at line 1809 of file JMathlib.hh.

1810 {
1811 a = args[N];
1812
1813 set(args, std::make_index_sequence<N>{});
1814 }

◆ 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 1823 of file JMathlib.hh.

1824 {
1825 return a * pow(x,N) + static_cast<const JPolynome<ID_t, N - 1>&>(*this).getValue(x);
1826 }
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 1835 of file JMathlib.hh.

1836 {
1837 return N * a * pow(x,N-1) + static_cast<const JPolynome<ID_t, N - 1>&>(*this).getDerivative(x);
1838 }

◆ getGradient() [1/2]

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

Get gradient.

Parameters
xabscissa value
Returns
gradient

Definition at line 1847 of file JMathlib.hh.

1848 {
1849 JPolynome gradient;
1850
1851 gradient.a = pow(x,N);
1852
1853 static_cast<JPolynome<ID_t, N - 1>&>(gradient) = static_cast<const JPolynome<ID_t, N - 1>&>(*this).getGradient(x);
1854
1855 return gradient;
1856 }

◆ set() [2/3]

template<int ID_t, size_t N>
template<class T , size_t ... i>
void JMATH::JPolynome< ID_t, N >::set ( const std::array< T, N+1 > & args,
const std::index_sequence< i... > & ls )
inlineprivate

Set values.

Parameters
argsvalues
lsindices

Definition at line 1871 of file JMathlib.hh.

1872 {
1873 static_cast<JPolynome<ID_t, N-1>&>(*this).set(std::array<T,N>{args[i]...});
1874 }

◆ set() [3/3]

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:1823

◆ 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 331 of file JMathlib.hh.

332 {
333 return static_cast<const JF1_t&>(*this).getValue(args...);
334 }

◆ size()

static size_t JMATH::JMathlib< JPolynome< ID_t, N > >::size ( )
inlinestaticinherited

Get size of parameter.

Returns
size

Definition at line 538 of file JMathlib.hh.

539 {
540 return JF1_t::parameters.size();
541 }

◆ operator[]() [1/2]

double JMATH::JMathlib< JPolynome< ID_t, N > >::operator[] ( const size_t i) const
inlineinherited

Get value of parameter at given index.

Parameters
iindex
Returns
value

Definition at line 550 of file JMathlib.hh.

551 {
552 return static_cast<const JF1_t&>(*this).*JF1_t::parameters[i];
553 }

◆ operator[]() [2/2]

double & JMATH::JMathlib< JPolynome< ID_t, N > >::operator[] ( const size_t i)
inlineinherited

Get value of parameter at given index.

Parameters
iindex
Returns
value

Definition at line 562 of file JMathlib.hh.

563 {
564 return static_cast<JF1_t&>(*this).*JF1_t::parameters[i];
565 }

◆ negate()

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

Negate function.

Returns
this function

Definition at line 170 of file JMathlib.hh.

171 {
172 for (const auto& i : JF1_t::parameters) {
173 static_cast<JF1_t&>(*this).*i = -(static_cast<JF1_t&>(*this).*i);
174 }
175
176 return static_cast<JF1_t&>(*this);
177 }

◆ 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 186 of file JMathlib.hh.

187 {
188 for (const auto& i : JF1_t::parameters) {
189 static_cast<JF1_t&>(*this).*i += f1.*i;
190 }
191
192 return static_cast<JF1_t&>(*this);
193 }

◆ 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 202 of file JMathlib.hh.

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

◆ 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 218 of file JMathlib.hh.

219 {
220 for (const auto& i : JF1_t::parameters) {
221 static_cast<JF1_t&>(*this).*i *= factor;
222 }
223
224 return static_cast<JF1_t&>(*this);
225 }

◆ 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 234 of file JMathlib.hh.

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

◆ 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 1755 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 1757 of file JMathlib.hh.

◆ a

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

a[N]

Definition at line 1858 of file JMathlib.hh.

◆ parameters

template<int ID_t, size_t N>
parameter_list<JPolynome, N + 1> JMATH::JPolynome< ID_t, N >::parameters = join<JPolynome>(JPolynome<ID_t, N-1>::parameters, &JPolynome::a)
staticconstexpr

Definition at line 1860 of file JMathlib.hh.


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