Skip to content

Commit 8b2d0d7

Browse files
Merge pull request #158 from TomRottier/main
Return InitialFailure from bracketing methods if not enclosing interval
2 parents dfc4cca + 7b99472 commit 8b2d0d7

File tree

5 files changed

+31
-0
lines changed

5 files changed

+31
-0
lines changed

lib/SimpleNonlinearSolve/src/bracketing/bisection.jl

+6
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ function SciMLBase.solve(prob::IntervalNonlinearProblem, alg::Bisection,
3939
prob, alg, right, fr; retcode = ReturnCode.ExactSolutionRight, left, right)
4040
end
4141

42+
if sign(fl) == sign(fr)
43+
@warn "The interval is not an enclosing interval, opposite signs at the boundaries are required."
44+
return build_solution(
45+
prob, alg, left, fl; retcode = ReturnCode.InitialFailure, left, right)
46+
end
47+
4248
i = 1
4349
if !iszero(fr)
4450
while i < maxiters

lib/SimpleNonlinearSolve/src/bracketing/brent.jl

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ function SciMLBase.solve(prob::IntervalNonlinearProblem, alg::Brent, args...;
2626
prob, alg, right, fr; retcode = ReturnCode.ExactSolutionRight, left, right)
2727
end
2828

29+
if sign(fl) == sign(fr)
30+
@warn "The interval is not an enclosing interval, opposite signs at the boundaries are required."
31+
return build_solution(
32+
prob, alg, left, fl; retcode = ReturnCode.InitialFailure, left, right)
33+
end
34+
2935
if abs(fl) < abs(fr)
3036
c = right
3137
right = left

lib/SimpleNonlinearSolve/src/bracketing/falsi.jl

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ function SciMLBase.solve(prob::IntervalNonlinearProblem, alg::Falsi, args...;
2525
prob, alg, right, fr; retcode = ReturnCode.ExactSolutionRight, left, right)
2626
end
2727

28+
if sign(fl) == sign(fr)
29+
@warn "The interval is not an enclosing interval, opposite signs at the boundaries are required."
30+
return build_solution(
31+
prob, alg, left, fl; retcode = ReturnCode.InitialFailure, left, right)
32+
end
33+
2834
# Regula Falsi Steps
2935
i = 0
3036
if !iszero(fr)

lib/SimpleNonlinearSolve/src/bracketing/itp.jl

+7
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ function SciMLBase.solve(prob::IntervalNonlinearProblem, alg::ITP, args...;
7575
return build_solution(
7676
prob, alg, right, fr; retcode = ReturnCode.ExactSolutionRight, left, right)
7777
end
78+
79+
if sign(fl) == sign(fr)
80+
@warn "The interval is not an enclosing interval, opposite signs at the boundaries are required."
81+
return build_solution(
82+
prob, alg, left, fl; retcode = ReturnCode.InitialFailure, left, right)
83+
end
84+
7885
ϵ = abstol
7986
#defining variables/cache
8087
k2 = alg.k2

lib/SimpleNonlinearSolve/src/bracketing/ridder.jl

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ function SciMLBase.solve(prob::IntervalNonlinearProblem, alg::Ridder, args...;
2525
prob, alg, right, fr; retcode = ReturnCode.ExactSolutionRight, left, right)
2626
end
2727

28+
if sign(fl) == sign(fr)
29+
@warn "The interval is not an enclosing interval, opposite signs at the boundaries are required."
30+
return build_solution(
31+
prob, alg, left, fl; retcode = ReturnCode.InitialFailure, left, right)
32+
end
33+
2834
xo = oftype(left, Inf)
2935
i = 1
3036
if !iszero(fr)

0 commit comments

Comments
 (0)