We are pleased to announce the first public release version of the ValidatedNumerics.jl package, a Julia package for doing rigorous calculations using floating-point based interval arithmetic. This includes methods for rigorously finding roots of 1D real functions.
To install the package, do julia> Pkg.add("ValidatedNumerics") The package provides an Interval type and operations defined on it in such a way that the result of any mathematical operations is *guaranteed* to contain the true result. For convenience, an `@interval` macro is defined: julia> using ValidatedNumerics julia> @interval(0.1) [0.09999999999999999, 0.1] julia> @interval sin(0.1) + cos(0.2) [1.0798999944880696, 1.07989999448807] Just wrapping an operation with the `@interval` macro automatically provides a guaranteed rigorous interval containing the true result (an "enclosure"). Interval arithmetic provides a means to develop new algorithms that also provide rigorous guaranteed results, for example for root finding. The interval Newton method is implemented in the function `newton`, e.g.: julia> f(x) = x^2 - 2 f (generic function with 1 method) julia> newton(f, @interval(-5, 5)) 2-element Array{Root{Float64},1}: Root([-1.4142135623730951, -1.414213562373095], :unique) Root([1.414213562373095, 1.4142135623730951], :unique) The response from this function can be considered as a *mathematically rigorous proof* that the function f has exactly two roots in the interval [-5, 5], one in the first interval and the other in the second. The :unique symbol indicates that the algorithm *guarantees* that there exists a root in the given interval and that it is unique. Currently root-finding functionality is restricted to one-variable real functions. Please let us know if you have particularly tricky functions whose (non-multiple) roots you need to find! Multi-dimensional root finding is planned for the future. We of course welcome comments, criticism, and pull requests at http://github.com/dpsanders/ValidatedNumerics.jl David Sanders & Luis Benet