Example #1
0
        public static (double[], double[]) Calculate(double[] Y, decimal alpha, decimal beta, decimal gamma, int p, int s)
        {
            WintersHelper.Init(Y, s, alpha, beta, gamma);
            (double[], double[])calculated = WintersHelper.Calculate(p, s);
            double mad = MeanAbsoluteDeviation.Calculation(Y, calculated.Item1);

            if (!double.IsNaN(mad) && mad < SmallestError)
            {
                SmallestError = mad;
                BestAlpha     = alpha;
                BestBeta      = beta;
                BestGamma     = gamma;
                BestResult    = calculated;
            }
            return(calculated);
        }
Example #2
0
        public static (double[], double[]) Calculate(
            double[] inputValue, int amountOfPeriodsToCalculate, decimal dataSmoothingFactor, decimal trendSmoothingFactor)
        {
            SmallestError = double.MaxValue;
            double initalSmoothedValue = inputValue[0];

            (List <double>, List <double>)auxValues = HoltHelper.CalculteSmoothedAndTrendValues(
                inputValue.Select(d => (decimal)d).ToList(), dataSmoothingFactor, trendSmoothingFactor, new List <decimal>(), new List <decimal>());
            //Calculate forecast for periods which already have real values
            double[] full =
                HoltHelper.Calculate(auxValues.Item1, auxValues.Item2, inputValue.Take(1).ToList()).ToArray <double>();
            (double[], double[])calculated = ArrayBased.Split(full, amountOfPeriodsToCalculate);
            double mad = MeanAbsoluteDeviation.Calculation(inputValue, calculated.Item1);

            if (!double.IsNaN(mad) && mad < SmallestError)
            {
                SmallestError      = mad;
                BestDataSmoothing  = (double)dataSmoothingFactor;
                BestTrendSmoothing = (double)trendSmoothingFactor;
                BestResult         = calculated;
            }
            return(calculated);
        }