There isn't a built-in polynomial type, but it's pretty easy to make one. If the type of the polynomial depends on its degree, then you can dispatch on it. For example, you could do something like this:
immutable Polynomial{n,T<:Number} a::NTuple{n,T} end Polynomial(a::Number...) = Polynomial(promote(a...)) function +{d1,d2}(p1::Polynomial{d1}, p2::Polynomial{d2}) d1 <= d2 || return p2 + p1 a = ntuple(d2) do k k <= d1 ? p1.a[k] + p2.a[k] : p2.a[k] end Polynomial(promote(a...)) end julia> p1 = Polynomial(1,2,3) Polynomial{3,Int64}((1,2,3)) julia> p2 = Polynomial(1,2) Polynomial{2,Int64}((1,2)) julia> p3 = Polynomial(1,1.5) Polynomial{2,Float64}((1.0,1.5)) julia> p1 + p2 Polynomial{3,Int64}((2,4,3)) julia> p1 + p3 Polynomial{3,Float64}((2.0,3.5,3.0)) julia> p3 + p1 Polynomial{3,Float64}((2.0,3.5,3.0)) julia> p3 + p2 Polynomial{2,Float64}((2.0,3.5)) Since the degree of the polynomial is part of the type, you can dispatch based on it. I'm not sure that's necessary though. You could always just check what the degree of a polynomial is and choose between algorithms explicitly. On Fri, May 2, 2014 at 11:25 AM, Albert Díaz <albeert....@gmail.com> wrote: > We are trying to develop a program to find the different roots of a nth > degree polynomial using a few quite simple methods (fixed-point, bisection, > newton..) and we would like to know how, when given a function, to > recognise it's degree in order to choose between different root-finding > methods. > > > Thanks >