Loading [MathJax]/extensions/TeX/newcommand.js
 Reference documentation for deal.II version 9.1.1
\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
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 (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 ::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 702 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 1296 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 1524 of file polynomial.cc.


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