The function griddata
is your friend for these tasks, It uses scatteredInterpolant
under the hood, but in my opinion is more user friendly.
Keeping the same example code you gave, replacing the last line with:
>> need_y = griddata(x_all,z_all,y_all,want_x, want_z)
need_y =
0.329506024096386
The function can take vector inputs for want_x
and want_z
and return a vector output of need_y
if you need to query more than one point.
You can also specify the interpolation method (linear
, cubic
, etc …).
And just to make sure it worked as desired:
>> F = scatteredInterpolant(x_all.', z_all.', y_all.', 'linear'); %NOT y_all, z_all
need_y = F(want_x, want_z)
need_y =
0.329506024096386 % same result, yay!
For more details about using griddata
, you can have a look at my answer to this question extremely similar to yours (just worded a bit differently): Interpolation between two curves (matlab)
CLICK HERE to find out more related problems solutions.