dune-functions  2.7.0
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 #include <cmath>
7 #include <initializer_list>
8 #include <vector>
9 
10 namespace Dune {
11 namespace Functions {
12 
13 
24 template<class K>
26 {
27 public:
28 
30  Polynomial() = default;
31 
33  Polynomial(const Polynomial& other) = default;
34 
36  Polynomial(Polynomial&& other) = default;
37 
44  Polynomial(std::initializer_list<double> coefficients) :
45  coefficients_(coefficients)
46  {}
47 
55  Polynomial(std::vector<K>&& coefficients) :
56  coefficients_(std::move(coefficients))
57  {}
58 
66  Polynomial(const std::vector<K>& coefficients) :
67  coefficients_(coefficients)
68  {}
69 
71  K operator() (const K& x) const
72  {
73  auto y = K(0);
74  for (size_t i=0; i<coefficients_.size(); ++i)
75  y += coefficients_[i] * std::pow(x, i);
76  return y;
77  }
78 
88  friend Polynomial derivative(const Polynomial& p)
89  {
90  std::vector<K> dpCoefficients(p.coefficients().size()-1);
91  for (size_t i=1; i<p.coefficients_.size(); ++i)
92  dpCoefficients[i-1] = p.coefficients()[i]*i;
93  return Polynomial(std::move(dpCoefficients));
94  }
95 
97  const std::vector<K>& coefficients() const
98  {
99  return coefficients_;
100  }
101 
102 private:
103  std::vector<K> coefficients_;
104 };
105 
106 
107 
108 }} // namespace Dune::Functions
109 
110 
111 
112 #endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
Dune::Functions::Polynomial::operator()
K operator()(const K &x) const
Evaluate polynomial.
Definition: polynomial.hh:71
Dune::Functions::Polynomial::Polynomial
Polynomial(const std::vector< K > &coefficients)
Create from list of coefficients.
Definition: polynomial.hh:66
Dune::Functions::Polynomial::Polynomial
Polynomial(std::initializer_list< double > coefficients)
Create from list of coefficients.
Definition: polynomial.hh:44
Dune::Functions::Polynomial::Polynomial
Polynomial(std::vector< K > &&coefficients)
Create from list of coefficients.
Definition: polynomial.hh:55
Dune::Functions::Polynomial::coefficients
const std::vector< K > & coefficients() const
Obtain reference to coefficient vector.
Definition: polynomial.hh:97
Dune::Functions::Polynomial::Polynomial
Polynomial()=default
Default constructor.
Dune
Definition: polynomial.hh:10
Dune::Functions::Polynomial
A scalar polynomial implementation.
Definition: polynomial.hh:25
Dune::Functions::Polynomial::derivative
friend Polynomial derivative(const Polynomial &p)
Obtain derivative of Polynomial function.
Definition: polynomial.hh:88