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]:
In [78]:
grid = [0, 2, 4, 6, 8, 10]
vals = [1, 4, 5, 8, 9, 11]
f = my_lin_interp(grid,vals)
Out[78]:
In [79]:
println(f([3.5,4.2,-6]))
In [ ]:
In [ ]:
In [ ]: