I implemented a package for plotting the Budan’s table of a polynomial (Budan-Fourier theorem uses it for root counting, see Improved Budan-Fourier Count for Root Finding).
https://github.com/LauraBMo/BudanTables.jl
By default, polynomials and polynomials operations are represented using Polynomials.jl, but the user may use other implementations.
Comments are highly welcome!
Actually, I have two questions:
1.- Is there a more generic way to use Polynomials.jl?
For example, (it is not its intended use, but) with Requires.jl I could use Polynomials.jl only when Polynomials.jl is loaded by the user.
But how do I implement functions depending on derivative
or degree
outside of the @require Polynomials="..."
block?
An option could be to adapt the trick
const _ROOTS = Ref{Function}(roots)
function set_getting_roots(f)
_ROOTS[] = f
end
to something like
const _ROOTS = Ref{Function}()
const _DERIVATIVE = Ref{Function}()
const _DEGREE = Ref{Function}()
function set_getting_roots(f)
_ROOTS[] = f
end
# add equivalent functions for derivative and degree
function __init__()
@require Polynomials="..." begin
set_getting_roots(Polynomials.roots)
# add equivalents for derivative and degree
end
end
But it sounds too demanding for users who don’t want to use Polynomials.jl. As they have to define/load the functions roots
, derivative
, degree
and then pass them to ButanTables.jl via the functions set_getting_roots
, set_getting_derivative
…
2.- It is my first time using RecipesBase.jl for Plots.jl, does it look good?
I feel the way I implemented the legend is way too hacky.
Many thanks!