Reference documentation for deal.II version 9.0.0
Public Member Functions | Static Public Member Functions | List of all members
Polynomials::HermiteLikeInterpolation Class Reference

#include <deal.II/base/polynomial.h>

Inheritance diagram for Polynomials::HermiteLikeInterpolation:
[legend]

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 ()
 
Subscriptoroperator= (const Subscriptor &)
 
Subscriptoroperator= (Subscriptor &&) noexcept
 
void subscribe (const char *identifier=nullptr) const
 
void unsubscribe (const char *identifier=nullptr) const
 
unsigned int n_subscriptions () 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 ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (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
 

Detailed Description

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_{n-1}\) 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_{n-1}'(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(1-x)^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 \((x-0.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 non-nodal, 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)=(1-x)^2\), \(p_1(x)=4x(x-1)\), and \(p_2(x)=x^2\), in accordance with the construction principle for degree 3 that allows a non-zero 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 point-Jacobi.

Author
Martin Kronbichler
Date
2018

Definition at line 693 of file polynomial.h.

Constructor & Destructor Documentation

◆ HermiteLikeInterpolation()

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 1281 of file polynomial.cc.

Member Function Documentation

◆ generate_complete_basis()

std::vector< Polynomial< double > > Polynomials::HermiteLikeInterpolation::generate_complete_basis ( const unsigned int  degree)
static

Return the polynomials with index 0 up to degree+1 in a space of degree up to degree.

Definition at line 1501 of file polynomial.cc.


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