After a process usyng the SymPy in Julia, I generated a system of nonlinear equations. For the sake of simplicity, I am going to put an approximation here for the case of just a non-linear equation. What I get is something like this equation:
The :unknown state of the root means that there are 0, 1, or multiple roots in the domain. Manual checking can be done after to investigate the root:
julia> found_roots = roots(R, 0..1e100)
Root([0, 6.89354e-08], :unknown)
Root([5.93418, 5.93419], :unique)
# finding the output interval for a given input interval:
julia> found_roots.interval |> R
# see value for the smallest positive incriment:
# See of the sign is the same when moving a little further from 0:
# See value for sligthly negative values:
ERROR: DomainError with -2.220446049250313e-16:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
But of course, we found that R(0) is a solution. What comes after is more for fun, and to show how one might conduct the investigation.
Interval methods produce rigorous bounds robust to round-off errors. In particular, the IntervalRootFinding.jl package is able to separate and bound all the zeros of the function on a given interval. The proof of existence and unicity of a single root within a sub-interval exploits the interval Newton method.
Consider a quadratic. From the coefficients you can just apply the quadratic formula, but with the function form, you won’t know that you have a quadratic and will have to use a generic nonlinear solve.