public void AGM() { // given IList <double> list1 = new List <double>() { 2, 3, 5, 7, 9, 10, 11, 23 }; IList <double> list3 = new List <double>() { -1, 0, 2, -3, 4, -5, 8, 7 }; IList <IList <double> > list4 = new List <IList <double> >() { list1, list3 }; const double EXPECTED1 = 7.76470249483093; const double EXPECTED2 = 8.0652853391755; const double EXPECTED3 = 0.555265813041983; IList <double> expected4 = new List <double>() { EXPECTED2, EXPECTED3 }; // when double result1 = Averages.AGM(list1, GeometricMeanVariant.Absolute).Value; double result2 = Averages.AGM(list1, GeometricMeanVariant.Offset).Value; double result3 = Averages.AGM(list3, GeometricMeanVariant.Offset).Value; IList <double> result4 = Averages.AGM(list4, GeometricMeanVariant.Offset); // 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)); }