You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ev...@apache.org on 2015/02/19 21:21:07 UTC
[math] MATH-1204 bracket function gives up too early
Repository: commons-math
Updated Branches:
refs/heads/master d746a54c2 -> a56d4998c
MATH-1204 bracket function gives up too early
In UnivariateSolverUtils.bracket(...) the search ends prematurely if a =
lowerBound, which ignores some roots in the interval. Fixed by changing the
loop condition so the search continues while b < upperBound. Also added a test
case.
Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/a56d4998
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/a56d4998
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/a56d4998
Branch: refs/heads/master
Commit: a56d4998cf16ff08f5593fb7d4dda66ca05dc269
Parents: d746a54
Author: Evan Ward <ev...@nrl.navy.mil>
Authored: Thu Feb 19 15:16:28 2015 -0500
Committer: Evan Ward <ev...@nrl.navy.mil>
Committed: Thu Feb 19 15:16:28 2015 -0500
----------------------------------------------------------------------
.../math4/analysis/solvers/UnivariateSolverUtils.java | 2 +-
.../math4/analysis/solvers/UnivariateSolverUtilsTest.java | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-math/blob/a56d4998/src/main/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtils.java b/src/main/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtils.java
index 2521c9b..49742d8 100644
--- a/src/main/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtils.java
+++ b/src/main/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtils.java
@@ -314,7 +314,7 @@ public class UnivariateSolverUtils {
double delta = 0;
for (int numIterations = 0;
- (numIterations < maximumIterations) && (a > lowerBound || b > upperBound);
+ (numIterations < maximumIterations) && (a > lowerBound || b < upperBound);
++numIterations) {
final double previousA = a;
http://git-wip-us.apache.org/repos/asf/commons-math/blob/a56d4998/src/test/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtilsTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtilsTest.java b/src/test/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtilsTest.java
index e1ff1f2..fba50e3 100644
--- a/src/test/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtilsTest.java
+++ b/src/test/java/org/apache/commons/math4/analysis/solvers/UnivariateSolverUtilsTest.java
@@ -176,6 +176,14 @@ public class UnivariateSolverUtilsTest {
UnivariateSolverUtils.bracket(sin, 1.5, 0, 2.0, 0);
}
+ /** check the search continues when a = lowerBound and b < upperBound. */
+ @Test
+ public void testBracketLoopConditionForB() {
+ double[] result = UnivariateSolverUtils.bracket(sin, -0.9, -1, 1, 0.1, 1, 100);
+ Assert.assertTrue(result[0] <= 0);
+ Assert.assertTrue(result[1] >= 0);
+ }
+
@Test
public void testMisc() {
UnivariateFunction f = new QuinticFunction();