Spline for two sampling points. More...
#include <dumux/common/spline.hh>
Spline for two sampling points.
For this type of spline there is no natural spline.
Public Member Functions | |
Spline () | |
template<class ScalarArrayX , class ScalarArrayY > | |
Spline (const ScalarArrayX &x, const ScalarArrayY &y, Scalar m0, Scalar m1) | |
Convenience constructor for a full spline. More... | |
template<class PointArray > | |
Spline (const PointArray &points, Scalar m0, Scalar m1) | |
Convenience constructor for a full spline. More... | |
Spline (Scalar x0, Scalar x1, Scalar y0, Scalar y1, Scalar m0, Scalar m1) | |
Convenience constructor for a full spline. More... | |
int | numSamples () const |
Returns the number of sampling points. More... | |
void | set (Scalar x0, Scalar x1, Scalar y0, Scalar y1, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes of the spline. More... | |
template<class ScalarContainer > | |
void | setXYArrays (int nSamples, const ScalarContainer &x, const ScalarContainer &y, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes of the spline. More... | |
template<class ScalarContainerX , class ScalarContainerY > | |
void | setXYContainers (const ScalarContainerX &x, const ScalarContainerY &y, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes of the spline. More... | |
template<class PointArray > | |
void | setArrayOfPoints (int nSamples, const PointArray &points, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes of the spline. More... | |
template<class PointContainer > | |
void | setContainerOfPoints (const PointContainer &points, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes from an STL-like container of points. More... | |
template<class TupleContainer > | |
void | setContainerOfTuples (const TupleContainer &tuples, Scalar m0, Scalar m1) |
Set the sampling points and the boundary slopes from an STL-like container of tuples. More... | |
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 | |
void | assignXY_ (Scalar x0, Scalar x1, Scalar y0, Scalar y1) |
Scalar | x_ (int i) const |
Returns the x 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... | |
void | assignSamplingPoints_ (DestVector &destX, DestVector &destY, const SourceVector &srcX, const SourceVector &srcY, int numSamples) |
Set the sampling point vectors. More... | |
void | assignFromArrayList_ (DestVector &destX, DestVector &destY, const ListIterator &srcBegin, const ListIterator &srcEnd, int numSamples) |
void | assignFromTupleList_ (DestVector &destX, DestVector &destY, ListIterator srcBegin, ListIterator srcEnd, int numSamples) |
Set the sampling points. More... | |
void | makePeriodicSystem_ (Matrix &M, Vector &d) |
Make the linear system of equations Mx = d which results in the moments of the periodic spline. More... | |
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... | |
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 [61]. 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 | 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... | |
Protected Attributes | |
Vector | xPos_ |
Vector | yPos_ |
Vector | m_ |
|
inline |
|
inline |
Convenience constructor for a full spline.
x | An array containing the \(x\) values of the spline's sampling points |
y | An array containing the \(y\) values of the spline's sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_n\) |
|
inline |
Convenience constructor for a full spline.
points | An array of \((x,y)\) tuples of the spline's sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_n\) |
|
inline |
Convenience constructor for a full spline.
x0 | The \(x\) value of the first sampling point |
x1 | The \(x\) value of the second sampling point |
y0 | The \(y\) value of the first sampling point |
y1 | The \(y\) value of the second sampling point |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_n\) |
|
inlineprotectedinherited |
|
inlineinherited |
Return true if the given x is in range [x1, xn].
|
inlineprotectedinherited |
|
inlineprotectedinherited |
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.
|
inlineprotectedinherited |
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 |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inlineinherited |
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. |
|
inlineprotectedinherited |
|
inlineinherited |
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. |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
Returns x[i] - x[i - 1].
|
inlineinherited |
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.
|
inlineinherited |
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.
|
inlineprotectedinherited |
Find all the intersections of a segment of the spline with a cubic polynomial within a specified interval.
|
inlineprotectedinherited |
Make the linear system of equations Mx = d which results in the moments of the full spline.
|
inlineprotectedinherited |
Make the linear system of equations Mx = d which results in the moments of the natural spline. Stoer 2005: Numerische Mathematik 1, p. 111 [61].
|
inlineprotectedinherited |
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.
|
inlineinherited |
Same as monotonic(x0, x1), but with the entire range of the spline as interval.
|
inlineinherited |
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.
|
inlineprotectedinherited |
|
inline |
Returns the number of sampling points.
|
inlineprotectedinherited |
Returns the number of sampling points.
|
inlineinherited |
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 --------—
|
inlineprotectedinherited |
|
inline |
Set the sampling points and the boundary slopes of the spline.
x0 | The \(x\) value of the first sampling point |
x1 | The \(x\) value of the second sampling point |
y0 | The \(y\) value of the first sampling point |
y1 | The \(y\) value of the second sampling point |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inline |
Set the sampling points and the boundary slopes of the spline.
nSamples | The number of sampling points (must be >= 2) |
points | An array of \((x,y)\) tuples of the spline's sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inline |
Set the sampling points and the boundary slopes from an STL-like container of points.
points | An array of \((x,y)\) tuples of the spline's sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inline |
Set the sampling points and the boundary slopes from an STL-like container of tuples.
tuples | An array of \((x,y)\) tuples of the spline's sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inline |
Set the sampling points and the boundary slopes of the spline.
nSamples | The number of sampling points (must be >= 2) |
x | An array containing the \(x\) values of the sampling points |
y | An array containing the \(y\) values of the sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inline |
Set the sampling points and the boundary slopes of the spline.
x | An array containing the \(x\) values of the sampling points |
y | An array containing the \(y\) values of the sampling points |
m0 | The slope of the spline at \(x_0\) |
m1 | The slope of the spline at \(x_1\) |
|
inlineprotected |
Returns the x coordinate of the i-th sampling point.
|
inlineinherited |
Return the x value of the rightmost sampling point.
|
inlineinherited |
Return the x value of the leftmost sampling point.
|
inlineprotected |
Returns the y coordinate of the i-th sampling point.
|
protected |
|
protected |
|
protected |