module Main where
import qualified Numeric.Interpolation.NodeList as Nodes
import qualified Numeric.Interpolation.Piecewise as Piecewise
import qualified Numeric.Interpolation.Basis as Basis
import qualified Numeric.Interpolation.Type as Type
import qualified Graphics.Gnuplot.Advanced as GP
import qualified Graphics.Gnuplot.Plot.TwoDimensional as Plot2D
import qualified Graphics.Gnuplot.Graph.TwoDimensional as Graph2D
import Control.Monad.HT (void)
xs :: [Double]
xs = [0, 1, 3, 4, 6, 7, 9, 10, 11, 13]
main :: IO ()
main = do
let linearNodes = Nodes.fromList $ map (\x -> (x, sin x)) xs
hermite1Nodes = Nodes.fromList $ map (\x -> (x, (sin x, cos x))) xs
cubicLinearNodes = Basis.coefficientsToCubicLinear xs $ map sin xs
cubicParabolaNodes = Basis.coefficientsToCubicParabola xs $ map sin xs
void $ GP.plotDefault $
Plot2D.functions Graph2D.lines
(Plot2D.linearScale 1000 (-2,15))
[Piecewise.interpolateConstantExt Type.linear linearNodes,
Piecewise.interpolateConstantExt Type.cubic hermite1Nodes,
Piecewise.interpolateConstantExt Type.cubic cubicLinearNodes,
Piecewise.interpolateConstantExt Type.cubic cubicParabolaNodes,
sin]