# Incorrect interpolation on non regular grid

I am trying to interpolate a point in 3-dimensional array with arbitrary spacing (distance between each point in real world coordinates). I had used scaled interpolation from Interpolations.jl . However as code below shows interpolated value is lower than any value from the surrounding voxels, and as far as I understand it should be basically weighted mean of them - so i suppose it is an error ?
Secondly given a point 5.5;5.5;5.5 spacing should in principle not affect the value of interpolation as all points on a grid surrounding point I query are in the same distance hence should have the same weights, and a weighted mean should be independent of spacing.

In the code I overwrite scale function as it gives some strange errors on bound checking otherwise (I am sampling far from boundaries - so should not be an issue here).

``````using Interpolations
function scale(itp::AbstractInterpolation{T,N,IT}, ranges::Vararg{AbstractRange,N}) where {T,N,IT}
# overwriting this function becouse check_ranges giving error
# check_ranges(itpflag(itp), axes(itp), ranges)
ScaledInterpolation{T,N,typeof(itp),IT,typeof(ranges)}(itp, ranges)
end

function interpolate_my(point,input_array,input_array_spacing)

old_size=size(input_array)
itp = interpolate(input_array, BSpline(Linear()))
#we indicate on each axis the spacing from area we are sampling
A_x1 = 1:input_array_spacing[1]:(old_size[1])
A_x2 = 1:input_array_spacing[2]:(old_size[2])
A_x3 = 1:input_array_spacing[3]:(old_size[3])

itp=extrapolate(itp, 0.0)
itp = scale(itp, A_x1, A_x2,A_x3)
return itp(point[1],point[2],point[3])
end#interpolate_my

input_array = reshape(collect(1:1000), (10, 10, 10))
point=[5.5,5.5,5.5]
input_array_spacing=[1.1,1.2,1.5]

input_array[5,5,5]#445
input_array[6,5,5]#446
input_array[5,6,5]#455
input_array[5,5,6]#545
input_array[5,6,6]#555
input_array[6,6,5]#456
input_array[6,5,6]#546
input_array[6,6,6]#556

interpolate_my(point,input_array,input_array_spacing)#324.59

``````

Is there an error in code, library or my reasoning?

I am not following the details closely, but Iād seriously consider other packages if your applications require non-regular grids or general unstructured meshes. The `Array` representation that Interpolations.jl relies on assumes a certain topology that is not adequate for when vertices are free to move around.

1 Like