JuliaIntervals / IntervalRootFinding.jl

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

Related problem #197

Open falematte opened 4 months ago

falematte commented 4 months ago

I find this package absolutely useful. Any way of using it or similar methods to find, given a function from R^n to R the isolines?

Kolaru commented 4 months ago

We do not have it in the package currently.

You can use the same strategy of branch and prune. For a function $f: \mathbb{R}^n -> \mathbb{R}$, and a level y

  1. Take an interval box X.
  2. Compute its image f(X) with interval arithmetic.
  3. If f(X) does not contain y, discard X (it is guaranteed no part of the isoline is in X). Otherwise bisect X in two smaller boxes, and go back to 2 with both.

You continue this until you get to boxes that are small enough. The remaining boxes are guaranteed to contain all of the y-isolines.

I think that this is essentially what https://github.com/JuliaIntervals/IntervalOptimisation.jl does to find global optimums of a function.

However, as far as I know, in general it is hard to prove the existence of the isoline in a box. The reason is that by default proving existence and uniqueness is the same, and for an isoline the solution is never unique. I had a trick for something similar in my master thesis, but it was not published and I don't know if there is something similar in the literature.

dpsanders commented 4 months ago

What @Kolaru describes is what IntervalConstraintProgramming.jl does, although that package it not in a good state right now.

For proving existence / uniqueness of isolines, I believe there are approaches using a parametric version of the interval Newton method, e.g. https://epubs.siam.org/doi/10.1137/130906544