Skip to content

Commit

Permalink
Performance improvement for substitution #3
Browse files Browse the repository at this point in the history
  • Loading branch information
blegat committed Nov 30, 2016
1 parent 86f56f3 commit dbf3a3a
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions src/subs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,37 @@ function evalmap(vars, x::Vector, varorder::Vector{PolyVar})
vals
end

function termeval(t::Term, vals::Vector)
val = t.α
for i in 1:length(vals)
if t.x.z[i] > 0
val *= vals[i]^t.x.z[i]
function monoeval(z::Vector{Int}, vals::Vector)
@assert length(z) == length(vals)
@assert !isempty(z)
val = vals[1]^z[1]
for i in 2:length(vals)
if z[i] > 0
val *= vals[i]^z[i]
end
end
val
end

function (m::PolyVar)(x::Vector, varorder)
Term(m)(x, varorder)
Monomial(m)(x, varorder)
end

function (m::Monomial)(x::Vector, varorder)
Term(m)(x, varorder)
vals = evalmap(vars(m), x, varorder)
monoeval(m.z, vals)
end

function (t::Term)(x::Vector, varorder)
vals = evalmap(vars(t), x, varorder)
termeval(t, vals)
t.α * monoeval(t.x.z, vals)
end

function (p::VecPolynomial)(x::Vector, varorder)
vals = evalmap(vars(p), x, varorder)
q = zero(p)
for t in p
q += termeval(t, vals)
for i in 1:length(p)
q += p.a[i] * monoeval(p.x.Z[i], vals)
end
q
end
Expand Down

0 comments on commit dbf3a3a

Please sign in to comment.