Example #1
0
        public void ShouldExtrapolateTwoPeriodsBackwardAndTwoPeriodsForward()
        {
            int period = 24;

            double[] data = new double[2 * period];
            double   dx   = 2 * Math.PI / period;

            for (int i = 0; i < data.Length; ++i)
            {
                int amplitude = 10 - i / period;
                data[i] = amplitude * Math.Sin(i * dx);
            }

            double[] extendedData = new double[6 * period];

            var sssmoother = new CyclicSubSeriesSmoother(7, 1, 1, data.Length, period, 2, 2);

            sssmoother.Smooth(data, extendedData, null);

            for (int i = 0; i < extendedData.Length; ++i)
            {
                int    amplitude = 12 - i / period; // Two extra for the extrapolation before.
                double value     = amplitude * Math.Sin(i * dx);
                Assert.AreEqual(extendedData[i], value, 1.0e-11, $"Test point {i}");
            }
        }
Example #2
0
        public void TrendingSinusoidExtrapolationTest()
        {
            int period = 24;

            double[] data = new double[2 * period];
            double   dx   = 2 * Math.PI / period;

            for (int i = 0; i < data.Length; ++i)
            {
                int amplitude = 10 - i / period;
                data[i] = amplitude * Math.Sin(i * dx);
            }

            double[] extendedData = new double[4 * period];

            var sssmoother = new CyclicSubSeriesSmoother(7, 1, 1, data.Length, period, 1, 1);

            sssmoother.Smooth(data, extendedData, null);

            for (int i = 0; i < extendedData.Length; ++i)
            {
                int    amplitude = 11 - i / period; // An extra for the extrapolation before.
                double value     = amplitude * Math.Sin(i * dx);
                Assert.AreEqual(extendedData[i], value, 1.0e-11, $"Test point {i}");
            }
        }