In [1]:
immutable my_lin_interp
    grid::Array
    vals::Array
end

In [77]:
function Base.call(points::my_lin_interp,x::Real)
    i = searchsortedlast(grid,x)
    if i == 0 || i == length(grid)
        return 0
    end
    
    interpolated_value = (x - grid[i])*(vals[i+1]-vals[i])/(grid[i+1]-grid[i])+vals[i]
    return interpolated_value 
end

function Base.call{T<:Real}(points::my_lin_interp,x::AbstractVector{T})
    n = length(x) 
    out = Array(Float64, n)
    for l in 1:n
        i = searchsortedlast(grid,x[l])
        if i == 0 || i == length(grid)
            out[l] = 0
        else out[l] = (x[l] - grid[i])*(vals[i+1]-vals[i])/(grid[i+1]-grid[i])+vals[i]
        end
    end
    
    return out
end


Out[77]:
call (generic function with 1095 methods)

In [78]:
grid = [0, 2, 4, 6, 8, 10]
vals = [1, 4, 5, 8, 9, 11]
f = my_lin_interp(grid,vals)


Out[78]:
my_lin_interp([0,2,4,6,8,10],[1,4,5,8,9,11])

In [79]:
println(f([3.5,4.2,-6]))


[4.75,5.300000000000001,0.0]

In [ ]:


In [ ]:


In [ ]: