Beispiel #1
0
        public void Median()
        {
            // given
            IList <double> list1 = new List <double>()
            {
                2.0, 9.0, 1.0, 5.0, 3.0, 8.0, 6.0, 7.0, 4.0
            };
            IList <double> list2 = new List <double>()
            {
                10.0, 9.0, 2.0, 8.0, 6.0, 1.0, 5.0, 3.0, 4.0, 7.0
            };
            IList <double> list3 = new List <double>()
            {
                7, 8, 3, 4, 9, 2
            };
            IList <IList <double> > list4 = new List <IList <double> >()
            {
                list1, list2, list3
            };
            IList <IList <double> > list5 = new List <IList <double> >()
            {
                new List <double>()
                {
                    1.0
                }, new List <double>()
                {
                    2.0, 1.0
                }
            };
            const double   EXPECTED_1 = 5.0;
            const double   EXPECTED_2 = (5.0 + 6.0) / 2.0;
            const double   EXPECTED_3 = (4 + 7) / 2.0;
            IList <double> expected4  = new List <double>()
            {
                EXPECTED_1, EXPECTED_2, EXPECTED_3
            };
            IList <double> expected5 = new List <double>()
            {
                1.0, (2.0 + 1.0) / 2.0
            };

            // when
            double         result1 = Averages.Median(list1).Value;
            double         result2 = Averages.Median(list2).Value;
            double         result3 = Averages.Median(list3).Value;
            IList <double> result4 = Averages.Median(list4);
            IList <double> result5 = Averages.Median(list5);

            // then
            Assert.AreEqual(EXPECTED_1, result1, Assertions.IBM_FLOAT_SURROUNDING);
            Assert.AreEqual(EXPECTED_2, result2, Assertions.IBM_FLOAT_SURROUNDING);
            Assert.AreEqual(EXPECTED_3, result3, Assertions.IBM_FLOAT_SURROUNDING);
            Assertions.SameValues(result4, expected4);
            Assertions.SameValues(result5, expected5);
        }
Beispiel #2
0
        public bool?TryMakeAverageCurve(MeanType method, int curvesNo)
        {
            if (curvesNo < 0)
            {
                return(null);
            }

            string         signature = string.Empty;
            IList <double> result    = new List <double>();

            try {
                signature = MethodBase.GetCurrentMethod().Name + '(' + method + ',' + curvesNo + ')';
                IList <IList <double> > orderedSetOfCurves = SeriesAssist.GetOrderedCopy(ModifiedCurves, curvesNo);

                switch (method)
                {
                case MeanType.Median:
                    result = Averages.Median(orderedSetOfCurves);
                    break;

                case MeanType.Maximum:
                    result = Averages.Maximum(orderedSetOfCurves);
                    break;

                case MeanType.Minimum:
                    result = Averages.Minimum(orderedSetOfCurves);
                    break;

                case MeanType.Arithmetic:
                    result = Averages.Arithmetic(orderedSetOfCurves);
                    break;

                case MeanType.Geometric:
                    result = Averages.Geometric(orderedSetOfCurves, MeansParams.Geometric.Variant);
                    break;

                case MeanType.AGM:
                    result = Averages.AGM(orderedSetOfCurves, MeansParams.AGM.Variant);
                    break;

                case MeanType.Heronian:
                    result = Averages.Heronian(orderedSetOfCurves, MeansParams.Heronian.Variant);
                    break;

                case MeanType.Harmonic:
                    result = Averages.Harmonic(orderedSetOfCurves, MeansParams.Harmonic.Variant);
                    break;

                case MeanType.Generalized:
                    result = Averages.Generalized(orderedSetOfCurves, MeansParams.Generalized.Variant, MeansParams.Generalized.Rank);
                    break;

                case MeanType.SMA:
                    result = Averages.SMA(orderedSetOfCurves);
                    break;

                case MeanType.Tolerance:
                    result = Averages.Tolerance(orderedSetOfCurves, MeansParams.Tolerance.Tolerance, MeansParams.Tolerance.Finisher);
                    break;

                case MeanType.Central:
                    result = Averages.Central(orderedSetOfCurves, MeansParams.Central.MassPercent);
                    break;

                case MeanType.NN:
                    result = Smoothers.NearestNeighbors(orderedSetOfCurves, MeansParams.NN.Amount);
                    break;

                case MeanType.NadarayaWatson:
                    result = Smoothers.NadarayaWatson(orderedSetOfCurves, MeansParams.NadarayaWatson.Variant, MeansParams.NadarayaWatson.KernelType, MeansParams.NadarayaWatson.KernelSize);
                    break;
                }
            }
            catch (ArgumentOutOfRangeException ex) {
                log.Error(signature, ex);
                return(false);
            }
            catch (OverflowException ex) {
                log.Error(signature, ex);
                return(false);
            }
            catch (InvalidOperationException ex) {
                log.Error(signature, ex);
                return(false);
            }
            catch (Exception ex) {
                log.Fatal(signature, ex);
                return(false);
            }

            AverageCurve.Points.Clear();
            SeriesAssist.CopyPoints(AverageCurve, IdealCurve, result);
            return(SeriesAssist.IsChartAcceptable(AverageCurve));
        }