public void Generalized() { // given IList <double> list1 = new List <double>() { 1, 2, 3, 4, 5 }; IList <double> list2 = new List <double>() { 3, 7, 11, 23, 111 }; IList <double> list3 = new List <double>() { -2, 0, 1, 5 }; IList <IList <double> > list4 = new List <IList <double> >() { list1, new List <double>() { 2, 1 } }; int rank1 = 2; int rank2 = 3; int rank3 = 4; double expected1 = Math.Sqrt(11.0); double expected2 = Mathematics.Root(1381499.0 / 5.0, rank2); double expected3 = Mathematics.Root(2217.0 / 2.0, rank3) - (Math.Abs(list3.Min()) + 1.0); IList <double> expected4 = new List <double>() { expected1, Math.Sqrt(5.0 / 2.0) }; // when double result1 = Averages.Generalized(list1, StandardMeanVariants.Straight, rank1).Value; double result2 = Averages.Generalized(list2, StandardMeanVariants.Straight, rank2).Value; double result3 = Averages.Generalized(list3, StandardMeanVariants.Offset, rank3).Value; IList <double> result4 = Averages.Generalized(list4, StandardMeanVariants.Straight, rank1); // then Assert.AreEqual(expected1, result1, Assertions.IBM_FLOAT_SURROUNDING); Assert.AreEqual(expected2, result2, Assertions.IBM_FLOAT_SURROUNDING); Assert.AreEqual(expected3, result3, Assertions.IBM_FLOAT_SURROUNDING); Assertions.SameValues(expected4, result4); }
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)); }