Reference documentation for deal.II version 9.0.0
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 doublex) const

void value (const doublex, std::vector< double > &values) const

void value (const doublex, const unsigned int n_derivatives, double *values) const

unsigned int degree () const

void scale (const doublefactor)

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::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 doublefactor)

static void shift (std::vector< double > &coefficients, const number2 shift)

static void multiply (std::vector< double > &coefficients, const doublefactor)

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.

Date
2018

Definition at line 693 of file polynomial.h.

## Constructor & Destructor Documentation

 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

 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: