| Copyright | (c) Matthew Peddie 2015 | 
|---|---|
| License | GPL | 
| Maintainer | Alberto Ruiz | 
| Stability | provisional | 
| Safe Haskell | None | 
| Language | Haskell98 | 
Numeric.GSL.Interpolation
Contents
Description
Interpolation routines.
https://www.gnu.org/software/gsl/manual/html_node/Interpolation.html#Interpolation
The GSL routines gsl_spline_eval and friends are used, but in spite
of the names, they are not restricted to spline interpolation.  The
functions in this module will work for any InterpolationMethod.
- data InterpolationMethod
 - evaluate :: InterpolationMethod -> [(Double, Double)] -> Double -> Double
 - evaluateV :: InterpolationMethod -> Vector Double -> Vector Double -> Double -> Double
 - evaluateDerivative :: InterpolationMethod -> [(Double, Double)] -> Double -> Double
 - evaluateDerivative2 :: InterpolationMethod -> [(Double, Double)] -> Double -> Double
 - evaluateDerivativeV :: InterpolationMethod -> Vector Double -> Vector Double -> Double -> Double
 - evaluateDerivative2V :: InterpolationMethod -> Vector Double -> Vector Double -> Double -> Double
 - evaluateIntegral :: InterpolationMethod -> [(Double, Double)] -> (Double, Double) -> Double
 - evaluateIntegralV :: InterpolationMethod -> Vector Double -> Vector Double -> Double -> Double -> Double
 
Interpolation methods
data InterpolationMethod Source #
Constructors
| Linear | |
| Polynomial | |
| CSpline | |
| CSplinePeriodic | |
| Akima | |
| AkimaPeriodic | 
Evaluation of interpolated functions
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> [(Double, Double)] | (domain, range) values sampling the function  | 
| -> Double | Point at which to evaluate the function  | 
| -> Double | Interpolated result  | 
Evaluate a function by interpolating within the given dataset. For example:
>>>let xs = [1..10]>>>let ys map (**2) [1..10]>>>evaluate Akima (zip xs ys) 2.24.840000000000001
To successfully evaluate points x, the domain (x) values in
points must be monotonically increasing.  The evaluation point x
must lie between the smallest and largest values in the sampled
domain.
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> Vector Double | Data points sampling the domain of the function  | 
| -> Vector Double | Data points sampling the range of the function  | 
| -> Double | Point at which to evaluate the function  | 
| -> Double | Interpolated result  | 
Evaluate a function by interpolating within the given dataset. For example:
>>>let xs = vector [1..10]>>>let ys = vector $ map (**2) [1..10]>>>evaluateV CSpline xs ys 2.24.818867924528303
To successfully evaluateV xs ys x, the vectors of corresponding
domain-range values xs and ys must have identical lengths, and
xs must be monotonically increasing.  The evaluation point x must
lie between the smallest and largest values in xs.
Evaluation of derivatives of interpolated functions
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> [(Double, Double)] | (domain, range) points sampling the function  | 
| -> Double | Point   | 
| -> Double | Interpolated result  | 
Evaluate the derivative of a function by interpolating within the given dataset. For example:
>>>let xs = [1..10]>>>let ys map (**2) [1..10]>>>evaluateDerivative Akima (zip xs ys) 2.24.4
To successfully evaluateDerivative points x, the domain (x) values
in points must be monotonically increasing.  The evaluation point
x must lie between the smallest and largest values in the sampled
domain.
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> [(Double, Double)] | (domain, range) points sampling the function  | 
| -> Double | Point   | 
| -> Double | Interpolated result  | 
Evaluate the second derivative of a function by interpolating within the given dataset. For example:
>>>let xs = [1..10]>>>let ys map (**2) [1..10]>>>evaluateDerivative2 Akima (zip xs ys) 2.22.0
To successfully evaluateDerivative2 points x, the domain (x)
values in points must be monotonically increasing.  The evaluation
point x must lie between the smallest and largest values in the
sampled domain.
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> Vector Double | Data points   | 
| -> Vector Double | Data points   | 
| -> Double | Point   | 
| -> Double | Interpolated result  | 
Evaluate the derivative of a function by interpolating within the given dataset. For example:
>>>let xs = vector [1..10]>>>let ys = vector $ map (**2) [1..10]>>>evaluateDerivativeV CSpline xs ys 2.24.338867924528302
To successfully evaluateDerivativeV xs ys x, the vectors of
corresponding domain-range values xs and ys must have identical
lengths, and xs must be monotonically increasing.  The interpolation
point x must lie between the smallest and largest values in xs.
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> Vector Double | Data points   | 
| -> Vector Double | Data points   | 
| -> Double | Point   | 
| -> Double | Interpolated result  | 
Evaluate the second derivative of a function by interpolating within the given dataset. For example:
>>>let xs = vector [1..10]>>>let ys = vector $ map (**2) [1..10]>>>evaluateDerivative2V CSpline xs ys 2.22.4
To successfully evaluateDerivative2V xs ys x, the vectors xs and
ys must have identical lengths, and xs must be monotonically
increasing.  The evaluation point x must lie between the smallest
and largest values in xs.
Evaluation of integrals of interpolated functions
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> [(Double, Double)] | (domain, range) points sampling the function  | 
| -> (Double, Double) | Integration bounds (  | 
| -> Double | Resulting area  | 
Evaluate the definite integral of a function by interpolating within the given dataset. For example:
>>>let xs = [1..10]>>>let ys = map (**2) [1..10]>>>evaluateIntegralV CSpline (zip xs ys) (2.2, 5.5)51.909
To successfully evaluateIntegral points (a, b), the domain (x)
values of points must be monotonically increasing.  The integration
bounds a and b must lie between the smallest and largest values in
the sampled domain..
Arguments
| :: InterpolationMethod | What method to use to interpolate  | 
| -> Vector Double | Data points   | 
| -> Vector Double | Data points   | 
| -> Double | Lower integration bound   | 
| -> Double | Upper integration bound   | 
| -> Double | Resulting area  | 
Evaluate the definite integral of a function by interpolating within the given dataset. For example:
>>>let xs = vector [1..10]>>>let ys = vector $ map (**2) [1..10]>>>evaluateIntegralV CSpline xs ys 2.2 5.551.89853207547169
To successfully evaluateIntegralV xs ys a b, the vectors xs and
ys must have identical lengths, and xs must be monotonically
increasing.  The integration bounds a and b must lie between the
smallest and largest values in xs.