Reference documentation for deal.II version Git eec6dab337 20190424 07:54:27 0400

#include <deal.II/base/polynomial.h>
Public Member Functions  
HermiteLikeInterpolation (const unsigned int degree, const unsigned int index)  
Public Member Functions inherited from Polynomials::Polynomial< double >  
Polynomial (const std::vector< double > &coefficients)  
Polynomial (const unsigned int n)  
Polynomial (const std::vector< Point< 1 >> &lagrange_support_points, const unsigned int evaluation_point)  
Polynomial ()  
double  value (const double x) const 
void  value (const double x, std::vector< double > &values) const 
void  value (const double x, const unsigned int n_derivatives, double *values) const 
unsigned int  degree () const 
void  scale (const double factor) 
void  shift (const number2 offset) 
Polynomial< double >  derivative () const 
Polynomial< double >  primitive () const 
Polynomial< double > &  operator*= (const double s) 
Polynomial< double > &  operator*= (const Polynomial< double > &p) 
Polynomial< double > &  operator+= (const Polynomial< double > &p) 
Polynomial< double > &  operator= (const Polynomial< double > &p) 
bool  operator== (const Polynomial< double > &p) const 
void  print (std::ostream &out) const 
void  serialize (Archive &ar, const unsigned int version) 
Public Member Functions inherited from Subscriptor  
Subscriptor ()  
Subscriptor (const Subscriptor &)  
Subscriptor (Subscriptor &&) noexcept  
virtual  ~Subscriptor () 
Subscriptor &  operator= (const Subscriptor &) 
Subscriptor &  operator= (Subscriptor &&) noexcept 
void  subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const 
void  unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const 
unsigned int  n_subscriptions () const 
template<typename StreamType >  
void  list_subscribers (StreamType &stream) const 
void  list_subscribers () const 
template<class Archive >  
void  serialize (Archive &ar, const unsigned int version) 
Static Public Member Functions  
static std::vector< Polynomial< double > >  generate_complete_basis (const unsigned int degree) 
Static Public Member Functions inherited from Subscriptor  
static ::ExceptionBase &  ExcInUse (int arg1, std::string arg2, std::string arg3) 
static ::ExceptionBase &  ExcNoSubscriber (std::string arg1, std::string arg2) 
Additional Inherited Members  
Protected Member Functions inherited from Polynomials::Polynomial< double >  
void  transform_into_standard_form () 
Static Protected Member Functions inherited from Polynomials::Polynomial< double >  
static void  scale (std::vector< double > &coefficients, const double factor) 
static void  shift (std::vector< double > &coefficients, const number2 shift) 
static void  multiply (std::vector< double > &coefficients, const double factor) 
Protected Attributes inherited from Polynomials::Polynomial< double >  
std::vector< double >  coefficients 
bool  in_lagrange_product_form 
std::vector< double >  lagrange_support_points 
double  lagrange_weight 
Polynomials for a variant of Hermite polynomials with better condition number in the interpolation than the basis from HermiteInterpolation.
In analogy to the actual Hermite polynomials this basis evaluates the first polynomial \(p_0\) to 1 at \(x=0\) and has both a zero value and zero derivative at \(x=1\). Likewise, the last polynomial \(p_n\) evaluates to 1 at \(x=1\) but has zero value and zero derivative at \(x=0\). The second polynomial \(p_1\) and the second to last polynomial \(p_{n1}\) represent the derivative degree of freedom at \(x=0\) and \(x=1\), respectively. As such, they are zero at both the end points \(x=0, x=1\) and have zero derivative at the opposite end, \(p_1'(1)=0\) and \(p_{n1}'(0)=0\). As opposed to the original Hermite polynomials, \(p_0\) does not have zero derivative at \(x=0\). The additional degree of freedom is used to make \(p_0\) and \(p_1\) orthogonal, which for \(n=3\) results in a root at \(x=\frac{2}{7}\) for \(p_0\) and at \(x=\frac{5}{7}\) for \(p_n\), respectively. Furthermore, the extension of these polynomials to higher degrees \(n>3\) is constructed by adding additional nodes inside the unit interval, again ensuring better conditioning. The nodes are computed as the roots of the Jacobi polynomials for \(\alpha=\beta=2\) which are orthogonal against the generating function \(x^2(1x)^2\) with the Hermite property. Then, these polynomials are constructed in the usual way as Lagrange polynomials with double roots at \(x=0\) and \(x=1\). For example at \(n=4\), all of \(p_0, p_1, p_3, p_4\) get an additional root at \(x=0.5\) through the factor \((x0.5)\). In summary, this basis is dominated by nodal contributions, but it is not a nodal one because the second and second to last polynomials that are nonnodal, and due to the presence of double nodes in \(x=0\) and \(x=1\).
The basis only contains Hermite information at degree>=3
, but it is also implemented for degrees between 0 and two. For the linear case, the usual hat functions are implemented, whereas the polynomials for degree=2
are \(p_0(x)=(1x)^2\), \(p_1(x)=4x(x1)\), and \(p_2(x)=x^2\), in accordance with the construction principle for degree 3 that allows a nonzero of \(p_0\) and \(p_2\).
These two relaxations improve the condition number of the mass matrix (i.e., interpolation) significantly, as can be seen from the following table:
Condition number mass matrix  

degree  HermiteInterpolation  HermiteLikeInterpolation 
n=3  1057  17.18 
n=4  6580  16.83 
n=5  1.875e+04  19.37 
n=6  6.033e+04  18.99 
n=10  9.756e+05  25.65 
n=15  9.431e+06  36.47 
n=25  2.220e+08  62.28 
n=35  2.109e+09  91.50 
This polynomial inherits the advantageous property of Hermite polynomials where only two functions have value and/or derivative nonzero on a face but gives better condition numbers of interpolation, which improves the performance of some iterative schemes like conjugate gradients with pointJacobi.
Definition at line 702 of file polynomial.h.
Polynomials::HermiteLikeInterpolation::HermiteLikeInterpolation  (  const unsigned int  degree, 
const unsigned int  index  
) 
Constructor for the polynomial with index index
within the set up polynomials of degree degree
.
Definition at line 1296 of file polynomial.cc.

static 
Return the polynomials with index 0
up to degree+1
in a space of degree up to degree
.
Definition at line 1524 of file polynomial.cc.