Does this function suffer from type instability?
function bellman_operator{T <: FloatingPoint}(g::GrowthModel, w::Vector{T},
compute_policy::Bool=false)
# === Apply linear interpolation to w === #
Aw = CoordInterpGrid(g.grid, w, BCnan, InterpLinear)
if compute_policy
σ = zeros(w)
end
# === set Tw[i] equal to max_c { u(c) + beta w(f(k_i) - c)} === #
Tw = zeros(w)
for (i, k) in enumerate(g.grid)
objective(c) = - g.u(c) - g.β * Aw[g.f(k) - c]
res = optimize(objective, 1e-6, g.f(k))
c_star = res.minimum
if compute_policy
σ[i] = c_star
end
Tw[i] = - objective(c_star)
end
if compute_policy
return Tw, σ
else
return Tw
end
end
As far as I understand (which could very well be the source of my
uncertainty — can anyone correct this definition?), the definition of type
instability is that return types depend on the types of input types. In
this case the return type doesn’t depend on the input type, but it does
depend on the *value* of the argument compute_policy (return type is either
Vector{T} or (Vector{T}, Vector{T})). I am a little unsure because given
the *value* of compute_policy, the return type is unambiguous.