Browse Source

Updated golden section minimizer to avoid precision loss

v4
Daniel Fox 6 years ago
parent
commit
81cb71e38a
  1. 7
      src/Numerics/Optimization/GoldenSectionMinimizer.cs

7
src/Numerics/Optimization/GoldenSectionMinimizer.cs

@ -98,6 +98,11 @@ namespace MathNet.Numerics.Optimization
int iterations = 0;
while (Math.Abs(upper.Point - lower.Point) > xTolerance && iterations < maxIterations)
{
// Recompute middle point on each iteration to avoid loss of precision
middlePointX = lower.Point + (upper.Point - lower.Point)/(1 + Constants.GoldenRatio);
middle = objective.Evaluate(middlePointX);
ValueChecker(middle.Value, middlePointX);
double testX = lower.Point + (upper.Point - middle.Point);
var test = objective.Evaluate(testX);
ValueChecker(test.Value, testX);
@ -111,7 +116,6 @@ namespace MathNet.Numerics.Optimization
else
{
upper = middle;
middle = test;
}
}
else
@ -123,7 +127,6 @@ namespace MathNet.Numerics.Optimization
else
{
lower = middle;
middle = test;
}
}

Loading…
Cancel
Save