Class HermiteInterpolator
- All Implemented Interfaces:
UnivariateDifferentiableVectorFunction
,UnivariateVectorFunction
The interpolation polynomials match all sample points, including both values and provided derivatives. There is one polynomial for each component of the values vector. All polynomials have the same degree. The degree of the polynomials depends on the number of points and number of derivatives at each point. For example the interpolation polynomials for n sample points without any derivatives all have degree n-1. The interpolation polynomials for n sample points with the two extreme points having value and first derivative and the remaining points having value only all have degree n+1. The interpolation polynomial for n sample points with value, first and second derivative for all points all have degree 3n-1.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addSamplePoint
(double x, double[]... value) Add a sample point.double[][]
derivatives
(double x, int order) Interpolate value and first derivatives at a specified abscissa.Compute the interpolation polynomials.double[]
value
(double x) Interpolate value at a specified abscissa.<T extends Derivative<T>>
T[]value
(T x) Compute the value for the function.
-
Constructor Details
-
HermiteInterpolator
public HermiteInterpolator()Create an empty interpolator.
-
-
Method Details
-
addSamplePoint
public void addSamplePoint(double x, double[]... value) throws MathIllegalArgumentException, MathRuntimeException Add a sample point.This method must be called once for each sample point. It is allowed to mix some calls with values only with calls with values and first derivatives.
The point abscissae for all calls must be different.
- Parameters:
x
- abscissa of the sample pointvalue
- value and derivatives of the sample point (if only one row is passed, it is the value, if two rows are passed the first one is the value and the second the derivative and so on)- Throws:
MathIllegalArgumentException
- if the abscissa difference between added point and a previous point is zero (i.e. the two points are at same abscissa)MathRuntimeException
- if the number of derivatives is larger than 20, which prevents computation of a factorial
-
getPolynomials
Compute the interpolation polynomials.- Returns:
- interpolation polynomials array
- Throws:
MathIllegalArgumentException
- if sample is empty
-
value
Interpolate value at a specified abscissa.Calling this method is equivalent to call the
value
methods of all polynomials returned bygetPolynomials
, except it does not build the intermediate polynomials, so this method is faster and numerically more stable.- Specified by:
value
in interfaceUnivariateVectorFunction
- Parameters:
x
- interpolation abscissa- Returns:
- interpolated value
- Throws:
MathIllegalArgumentException
- if sample is empty
-
value
Compute the value for the function..- Specified by:
value
in interfaceUnivariateDifferentiableVectorFunction
- Type Parameters:
T
- the type of the field elements- Parameters:
x
- the point for which the function value should be computed- Returns:
- the value
- Throws:
MathIllegalArgumentException
- ifx
does not satisfy the function's constraints (argument out of bound, or unsupported derivative order for example)
-
derivatives
public double[][] derivatives(double x, int order) throws MathIllegalArgumentException, NullArgumentException Interpolate value and first derivatives at a specified abscissa.- Parameters:
x
- interpolation abscissaorder
- maximum derivation order- Returns:
- interpolated value and derivatives (value in row 0, 1st derivative in row 1, ... nth derivative in row n)
- Throws:
MathIllegalArgumentException
- if sample is emptyNullArgumentException
- if x is null
-