The common code for all 3rd order polynomial splines. More...
#include <dumux/common/splinecommon_.hh>
The common code for all 3rd order polynomial splines.
Public Member Functions | |
bool | applies (Scalar x) const |
Return true if the given x is in range [x1, xn]. More... | |
Scalar | xMin () const |
Return the x value of the leftmost sampling point. More... | |
Scalar | xMax () const |
Return the x value of the rightmost sampling point. More... | |
void | printCSV (Scalar xi0, Scalar xi1, int k) const |
Prints k tuples of the format (x, y, dx/dy, isMonotonic) to stdout. More... | |
Scalar | eval (Scalar x, bool extrapolate=false) const |
Evaluate the spline at a given position. More... | |
Scalar | evalDerivative (Scalar x, bool extrapolate=false) const |
Evaluate the spline's derivative at a given position. More... | |
Scalar | intersect (Scalar a, Scalar b, Scalar c, Scalar d) const |
Find the intersections of the spline with a cubic polynomial in the whole intervall, throws Dune::MathError exception if there is more or less than one solution. More... | |
Scalar | intersectInterval (Scalar x0, Scalar x1, Scalar a, Scalar b, Scalar c, Scalar d) const |
Find the intersections of the spline with a cubic polynomial in a sub-intervall of the spline, throws Dune::MathError exception if there is more or less than one solution. More... | |
int | monotonic (Scalar x0, Scalar x1) const |
Returns 1 if the spline is monotonically increasing, -1 if the spline is mononously decreasing and 0 if the spline is not monotonous in the interval (x0, x1). More... | |
int | monotonic () const |
Same as monotonic(x0, x1), but with the entire range of the spline as interval. More... | |
Protected Member Functions | |
SplineCommon_ ()=default | |
template<class DestVector , class SourceVector > | |
void | assignSamplingPoints_ (DestVector &destX, DestVector &destY, const SourceVector &srcX, const SourceVector &srcY, int numSamples) |
Set the sampling point vectors. More... | |
template<class DestVector , class ListIterator > | |
void | assignFromArrayList_ (DestVector &destX, DestVector &destY, const ListIterator &srcBegin, const ListIterator &srcEnd, int numSamples) |
template<class DestVector , class ListIterator > | |
void | assignFromTupleList_ (DestVector &destX, DestVector &destY, ListIterator srcBegin, ListIterator srcEnd, int numSamples) |
Set the sampling points. More... | |
template<class Vector , class Matrix > | |
void | makePeriodicSystem_ (Matrix &M, Vector &d) |
Make the linear system of equations Mx = d which results in the moments of the periodic spline. More... | |
template<class Vector , class Matrix > | |
void | makeFullSystem_ (Matrix &M, Vector &d, Scalar m0, Scalar m1) |
Make the linear system of equations Mx = d which results in the moments of the full spline. More... | |
template<class Vector , class Matrix > | |
void | makeNaturalSystem_ (Matrix &M, Vector &d) |
Make the linear system of equations Mx = d which results in the moments of the natural spline. Stoer 2005: Numerische Mathematik 1, p. 111 [64]. More... | |
Scalar | eval_ (Scalar x, int i) const |
Scalar | evalDerivative_ (Scalar x, int i) const |
int | monotonic_ (int i, Scalar x0, Scalar x1) const |
int | intersectSegment_ (Scalar *sol, int segIdx, Scalar a, Scalar b, Scalar c, Scalar d, Scalar x0=-1e100, Scalar x1=1e100) const |
Find all the intersections of a segment of the spline with a cubic polynomial within a specified interval. More... | |
int | segmentIdx_ (Scalar x) const |
Scalar | h_ (int i) const |
Returns x[i] - x[i - 1]. More... | |
Scalar | x_ (int i) const |
Returns the y coordinate of the i-th sampling point. More... | |
Scalar | y_ (int i) const |
Returns the y coordinate of the i-th sampling point. More... | |
Scalar | moment_ (int i) const |
Returns the moment (i.e. second derivative) of the spline at the i-th sampling point. More... | |
Scalar | a_ (int i) const |
Scalar | b_ (int i) const |
Scalar | c_ (int i) const |
Scalar | d_ (int i) const |
int | numSamples_ () const |
Returns the number of sampling points. More... | |
|
protecteddefault |
|
inlineprotected |
|
inline |
Return true if the given x is in range [x1, xn].
|
inlineprotected |
|
inlineprotected |
Set the sampling points.
Here we assume that the elements of the source vector have an [] operator where v[0] is the x value and v[1] is the y value if the sampling point.
|
inlineprotected |
Set the sampling point vectors.
This takes care that the order of the x-values is ascending, although the input must be ordered already!
|
inlineprotected |
|
inlineprotected |
|
inlineprotected |
|
inline |
Evaluate the spline at a given position.
x | The value on the abscissa where the spline ought to be evaluated |
extrapolate | If this parameter is set to true, the spline will be extended beyond its range by straight lines, if false calling extrapolate for x \not [x_{min}, x_{max}] will cause a failed assertation. |
|
inlineprotected |
|
inline |
Evaluate the spline's derivative at a given position.
x | The value on the abscissa where the spline's derivative ought to be evaluated |
extrapolate | If this parameter is set to true, the spline will be extended beyond its range by straight lines, if false calling extrapolate for x \not [x_{min}, x_{max}] will cause a failed assertation. |
|
inlineprotected |
|
inlineprotected |
Returns x[i] - x[i - 1].
|
inline |
Find the intersections of the spline with a cubic polynomial in the whole intervall, throws Dune::MathError exception if there is more or less than one solution.
|
inline |
Find the intersections of the spline with a cubic polynomial in a sub-intervall of the spline, throws Dune::MathError exception if there is more or less than one solution.
|
inlineprotected |
Find all the intersections of a segment of the spline with a cubic polynomial within a specified interval.
|
inlineprotected |
Make the linear system of equations Mx = d which results in the moments of the full spline.
|
inlineprotected |
Make the linear system of equations Mx = d which results in the moments of the natural spline. Stoer 2005: Numerische Mathematik 1, p. 111 [64].
|
inlineprotected |
Make the linear system of equations Mx = d which results in the moments of the periodic spline.
When solving Mx = d, it should be noted that x[0] is trash and needs to be set to x[n-1]
|
inlineprotected |
Returns the moment (i.e. second derivative) of the spline at the i-th sampling point.
|
inline |
Same as monotonic(x0, x1), but with the entire range of the spline as interval.
|
inline |
Returns 1 if the spline is monotonically increasing, -1 if the spline is mononously decreasing and 0 if the spline is not monotonous in the interval (x0, x1).
In the corner case where the whole spline is flat, it returns 2.
|
inlineprotected |
|
inlineprotected |
Returns the number of sampling points.
|
inline |
Prints k tuples of the format (x, y, dx/dy, isMonotonic) to stdout.
If the spline does not apply for parts of [x0, x1] it is extrapolated using a straight line. The result can be inspected using the following commands:
--------— snip --------— ./yourProgramm > spline.csv gnuplot
gnuplot> plot "spline.csv" using 1:2 w l ti "Curve", \ "spline.csv" using 1:3 w l ti "Derivative", \ "spline.csv" using 1:4 w p ti "Monotonic" --------— snap --------—
|
inlineprotected |
|
inlineprotected |
Returns the y coordinate of the i-th sampling point.
|
inline |
Return the x value of the rightmost sampling point.
|
inline |
Return the x value of the leftmost sampling point.
|
inlineprotected |
Returns the y coordinate of the i-th sampling point.