dune-functions  2.5-dev
polynomial.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
4 #define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
5 
6 
7 namespace Dune {
8 namespace Functions {
9 
10 
21 template<class K>
23 {
24 public:
25 
27  Polynomial() = default;
28 
30  Polynomial(const Polynomial& other) = default;
31 
33  Polynomial(Polynomial&& other) = default;
34 
41  Polynomial(std::initializer_list<double> coefficients) :
42  coefficients_(coefficients)
43  {}
44 
52  Polynomial(std::vector<K>&& coefficients) :
53  coefficients_(std::move(coefficients))
54  {}
55 
63  Polynomial(const std::vector<K>& coefficients) :
64  coefficients_(coefficients)
65  {}
66 
68  K operator() (const K& x) const
69  {
70  auto y = K(0);
71  for (size_t i=0; i<coefficients_.size(); ++i)
72  y += coefficients_[i] * std::pow(x, i);
73  return y;
74  }
75 
85  friend Polynomial derivative(const Polynomial& p)
86  {
87  std::vector<K> dpCoefficients(p.coefficients().size()-1);
88  for (size_t i=1; i<p.coefficients_.size(); ++i)
89  dpCoefficients[i-1] = p.coefficients()[i]*i;
90  return Polynomial(std::move(dpCoefficients));
91  }
92 
94  const std::vector<K>& coefficients() const
95  {
96  return coefficients_;
97  }
98 
99 private:
100  std::vector<K> coefficients_;
101 };
102 
103 
104 
105 }} // namespace Dune::Functions
106 
107 
108 
109 #endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
friend Polynomial derivative(const Polynomial &p)
Obtain derivative of Polynomial function.
Definition: polynomial.hh:85
Polynomial()=default
Default constructor.
Definition: polynomial.hh:7
Polynomial(const std::vector< K > &coefficients)
Create from list of coefficients.
Definition: polynomial.hh:63
const std::vector< K > & coefficients() const
Obtain reference to coefficient vector.
Definition: polynomial.hh:94
STL namespace.
Polynomial(std::initializer_list< double > coefficients)
Create from list of coefficients.
Definition: polynomial.hh:41
A scalar polynomial implementation.
Definition: polynomial.hh:22
K operator()(const K &x) const
Evaluate polynomial.
Definition: polynomial.hh:68
Polynomial(std::vector< K > &&coefficients)
Create from list of coefficients.
Definition: polynomial.hh:52