JuliaIntervals / IntervalRootFinding.jl

Library for finding the roots of a function using interval arithmetic
https://juliaintervals.github.io/IntervalRootFinding.jl/
Other
127 stars 26 forks source link

Krawczyk fails when the Jacobian is singular at the center of starting region #102

Closed Kolaru closed 5 years ago

Kolaru commented 5 years ago
julia> roots(x -> x^2 - 2, -4..4, Krawczyk)
0-element Array{Root{Interval{Float64}},1}

while

julia> roots(x -> x^2 - 2, -4..4.0001, Krawczyk)
2-element Array{Root{Interval{Float64}},1}:
 Root([1.41389, 1.41454], :unique)
 Root([-1.41445, -1.41398], :unique)

It can be hotfixed by shifting the point where the Krawczyk operator take the Jacobian (similar to what is done when bisecting an interval), but it can also be more seriously fixed by implementing more advanced Krawczyk methods described in the litterature and that claim to avoid the problem altogether (and also faster convergence).

dpsanders commented 5 years ago

Where are those methods described?

Kolaru commented 5 years ago

it can also be more seriously fixed by implementing more advanced Krawczyk methods described in the litterature and that claim to avoid the problem altogether (and also faster convergence).

The claim is less obvious that what I remembered (I may have mixed several things in my head), but the two following papers gives refinement on Krawczyk operator that probably mitigates the problem:

https://epubs.siam.org/doi/abs/10.1137/0722048

https://epubs.siam.org/doi/abs/10.1137/0720014

Note that for Newton method on the other hand the claim has been made very clear here (see abstract):

https://link.springer.com/article/10.1007/BF01932020

Kolaru commented 5 years ago

Fixed by #93 by shifting the point of bisection of intervals in Krawczyk method.