| 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.