Browse Source
Merge pull request #737 from dafuchs/master
Updated golden section minimizer to avoid precision loss
v4
Christoph Ruegg
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
5 additions and
2 deletions
-
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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|