From b076067402160b4630ba722fe85be2787a445e43 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Sat, 8 Oct 2016 20:52:38 +0200 Subject: [PATCH] Root Finding: Zero Crossing Bracketing expansion must reset boundaries if it fails --- src/Numerics/RootFinding/ZeroCrossingBracketing.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Numerics/RootFinding/ZeroCrossingBracketing.cs b/src/Numerics/RootFinding/ZeroCrossingBracketing.cs index 8af802e5..126df806 100644 --- a/src/Numerics/RootFinding/ZeroCrossingBracketing.cs +++ b/src/Numerics/RootFinding/ZeroCrossingBracketing.cs @@ -82,6 +82,9 @@ namespace MathNet.Numerics.RootFinding /// This iterative methods stops when two values with opposite signs are found. public static bool Expand(Func f, ref double lowerBound, ref double upperBound, double factor = 1.6, int maxIterations = 50) { + double originalLowerBound = lowerBound; + double originalUpperBound = upperBound; + if (lowerBound >= upperBound) { throw new ArgumentOutOfRangeException("upperBound", string.Format(Resources.ArgumentOutOfRangeGreater, "xmax", "xmin")); @@ -109,6 +112,8 @@ namespace MathNet.Numerics.RootFinding } } + lowerBound = originalLowerBound; + upperBound = originalUpperBound; return false; } }