Giving interpn vector inputs of unknown dimension

2 views (last 30 days)
I have been struggling to apply interpn to sets of data of unknown dimension without using a bunch of if statements - not very pretty. I will use the notation from the Matlab documentation rather than copy pasting my codes. Quoting the documentation for interpn:
  • Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)
  • X1,X2,...,Xn contain the coordinates of the sample points.
  • V contains the corresponding function values at each sample point.
  • Xq1,Xq2,...,Xqn contain the coordinates of the query points.
For my problem, the dimension n of the interpolation is not fixed. I have a cell X, containing the coordinates of the sample points X1,...,Xn, an n-dimensional vector V, and the vector of query points Xq. Is there a way to split a vector/cell to be given as individual arguments for interpn (or any function for that matter)? So that I could write something like
Vq = interpn(split(X),V,split(Xq))
and Matlab would read in split(X) as X1,X2,...,Xn? My current implementation is very clunky, and is limited to a finite set of n:
if (numel(X) == 1)
out = interpn(X{1},V,Xq(:,1),'linear');
elseif (numel(X) == 2)
out = interpn(X{1},X{2},V,Xq(:,1),Xq(:,2),'linear');
elseif (numel(X) == 3)
out = interpn(X{1},X{2},X{3},V,Xq(:,1),Xq(:,2),Xq(:,3),'linear');
end
Any advice would be great. Thanks.

Accepted Answer

Walter Roberson
Walter Roberson on 12 Jun 2020
XqC = num2cell(Xq,1); %splits into columns
out = interpn(X{:}, V, XqC{:}, 'linear')

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!