module Main where import qualified Plot2DExtra 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 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 $ Plot2DExtra.functions (Plot2D.linearScale 1000 (-2,15)) $ let interpolate typ nodes = Piecewise.interpolateConstantExt typ nodes in ("linear", interpolate Type.linear linearNodes) : ("hermite1", interpolate Type.hermite1 hermite1Nodes) : ("cubicLinear", interpolate Type.hermite1 cubicLinearNodes) : ("cubicParabola", interpolate Type.hermite1 cubicParabolaNodes) : ("sin", sin) : []