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.hermite1 hermite1Nodes, Piecewise.interpolateConstantExt Type.hermite1 cubicLinearNodes, Piecewise.interpolateConstantExt Type.hermite1 cubicParabolaNodes, sin]