16 #ifndef dealii__polynomial_h 17 #define dealii__polynomial_h 21 #include <deal.II/base/config.h> 22 #include <deal.II/base/exceptions.h> 23 #include <deal.II/base/subscriptor.h> 24 #include <deal.II/base/point.h> 25 #include <deal.II/base/std_cxx11/shared_ptr.h> 29 DEAL_II_NAMESPACE_OPEN
52 template <
typename number>
79 const unsigned int evaluation_point);
92 number
value (
const number x)
const;
103 void value (
const number x,
104 std::vector<number> &values)
const;
111 unsigned int degree ()
const;
120 void scale (
const number factor);
137 template <
typename number2>
138 void shift (
const number2 offset);
179 void print(std::ostream &out)
const;
185 template <
class Archive>
186 void serialize (Archive &ar,
const unsigned int version);
193 static void scale (std::vector<number> &coefficients,
194 const number factor);
199 template <
typename number2>
200 static void shift (std::vector<number> &coefficients,
201 const number2 shift);
206 static void multiply (std::vector<number> &coefficients,
207 const number factor);
252 template <
typename number>
261 const double coefficient = 1.);
270 std::vector<Polynomial<number> >
271 generate_complete_basis (
const unsigned int degree);
277 static std::vector<number> make_vector(
unsigned int n,
278 const double coefficient);
308 const unsigned int support_point);
319 std::vector<Polynomial<double> >
320 generate_complete_basis (
const unsigned int degree);
330 compute_coefficients (
const unsigned int n,
331 const unsigned int support_point,
332 std::vector<double> &a);
343 std::vector<Polynomial<double> >
377 std::vector<Polynomial<double> >
378 generate_complete_basis (
const unsigned int degree);
403 static void compute_coefficients (
const unsigned int p);
409 static const std::vector<double> &
410 get_coefficients (
const unsigned int k);
441 Lobatto (
const unsigned int p = 0);
447 static std::vector<Polynomial<double> >
448 generate_complete_basis (
const unsigned int p);
454 std::vector<double> compute_coefficients (
const unsigned int p);
518 std::vector<Polynomial<double> >
519 generate_complete_basis (
const unsigned int degree);
525 static void compute_coefficients (
const unsigned int p);
531 static const std::vector<double> &
532 get_coefficients (
const unsigned int p);
590 static std::vector<Polynomial<double> >
591 generate_complete_basis (
const unsigned int p);
602 template <
typename number>
612 template <
typename number>
617 if (in_lagrange_product_form ==
true)
619 return lagrange_support_points.size();
623 Assert (coefficients.size()>0, ExcEmptyObject());
624 return coefficients.size() - 1;
630 template <
typename number>
635 if (in_lagrange_product_form ==
false)
637 Assert (coefficients.size() > 0, ExcEmptyObject());
640 const unsigned int m=coefficients.size();
641 number value = coefficients.back();
642 for (
int k=m-2; k>=0; --k)
643 value = value*x + coefficients[k];
649 const unsigned int m = lagrange_support_points.size();
651 for (
unsigned int j=0; j<m; ++j)
652 value *= x-lagrange_support_points[j];
653 value *= lagrange_weight;
660 template <
typename number>
661 template <
class Archive>
669 ar &in_lagrange_product_form;
670 ar &lagrange_support_points;
675 DEAL_II_NAMESPACE_CLOSE
void serialize(Archive &ar, const unsigned int version)
Polynomial< number > & operator*=(const double s)
void scale(const number factor)
void transform_into_standard_form()
bool operator==(const Polynomial< number > &p) const
Polynomial< number > derivative() const
void shift(const number2 offset)
unsigned int degree() const
Polynomial< number > & operator-=(const Polynomial< number > &p)
std::vector< Polynomial< double > > generate_complete_Lagrange_basis(const std::vector< Point< 1 > > &points)
bool in_lagrange_product_form
number value(const number x) const
static std::vector< std_cxx11::shared_ptr< const std::vector< double > > > shifted_coefficients
void print(std::ostream &out) const
static void multiply(std::vector< number > &coefficients, const number factor)
#define Assert(cond, exc)
Polynomial< number > & operator+=(const Polynomial< number > &p)
static std::vector< std_cxx11::shared_ptr< const std::vector< double > > > recursive_coefficients
std::vector< number > coefficients
Polynomial< number > primitive() const
std::vector< number > lagrange_support_points
static std::vector< std_cxx11::shared_ptr< const std::vector< double > > > recursive_coefficients