public void TestRandomizeEpsilonIsApplied() { int count = 1000; double epsFactor = 0.2; double maxAbs = 1.0; Vector <double> vec = new DenseVector(count); for (int i = 0; i < count; i++) { vec[i] = MathHelper.RandomExceptZero(maxAbs, epsFactor); } double min = vec.AbsoluteMinimum(); double max = vec.AbsoluteMaximum(); Assert.IsTrue(min >= epsFactor * maxAbs); Assert.IsTrue(max <= maxAbs); }
public static Tuple <int, int, double> DenseMatrixAbsoluteMinimumPosition(DenseMatrix dm) { if (dm == null) { return(new Tuple <int, int, double>(0, 0, 0.0d)); } List <Tuple <int, double> > rowMinValues = new List <Tuple <int, double> >(); var rowEnum = dm.EnumerateRowsIndexed(); foreach (Tuple <int, Vector <double> > curRow in rowEnum) { DenseVector curDV = (DenseVector)curRow.Item2; rowMinValues.Add(new Tuple <int, double>(curDV.AbsoluteMinimumIndex(), curDV.AbsoluteMinimum())); } double minValue = rowMinValues.Min(tpl => tpl.Item2); int minValueRow = rowMinValues.FindIndex(tpl => tpl.Item2 == minValue); DenseVector minRow = (DenseVector)dm.Row(minValueRow); return(new Tuple <int, int, double>(minValueRow, minRow.AbsoluteMinimumIndex(), minValue)); }