How to use scatteredInterpolant in case of dimensions more than 3

조회 수: 8(최근 30일)
Hello everyone I am trying to do a multivariate interpolation and i get the following error :
Error using interpn
NTIMES must be a single numeric value.
Error in FVP (line 277)
phi{i,k} = interpn(X',Val_phi{i,k}');
The same code works fine for 2D , however in case of 2D i used
phi{i,k} = scatteredInterpolant(X',Val_phi{i,k}');
and here is the piece of code that genrates the error:
%% Interpolate
for i = 1:size(Val_phi,1)
textwaitbar(i, size(Val_phi,1), "Interpolating")
for k = 1:size(Val_phi,2)
disp('size of X')
disp('Size of val_phi')
phi{i,k} = interpn(X',Val_phi{i,k}');
phi{i,k} = @(x)(phi{i,k}(x')');
VAL_PHI_CONCAT = [VAL_PHI_CONCAT ; Val_phi{i,k} ];
Some information about the dimension of the variables :
X : 6 12010
Val_phi{i,k} : 1 12010
It works fine for the first iteration of i.e. for i=1 and k = 1 and then throws error for k=2 ,i=1
Any suggestion on what possibly I am doing wrong?
Thank you .
  댓글 수: 4
Ajai Singh
Ajai Singh 2022년 8월 23일
So i tried doing the same thing on a small problem of where the data has two independent columns and I used scatterInterpolant , and everything worked fine. Now I am trying to generlize it to 6 independent columns and later to 18.
This is what I have been doing so far:
So My actual problem has 6 dimensions of independent data, I assumed the first five columns are independent variables and the fifth column is the dependent variable that I seek an interpolation value for.
To use interpn, I need to supply the function with a multidimensional array – with the number of rows matching the number of rows of independent variables ?

댓글을 달려면 로그인하십시오.

채택된 답변

Bruno Luong
Bruno Luong 2022년 8월 23일
편집: Bruno Luong 2022년 8월 24일
Here is a linear scattered interpolation in any-dimension.
It's bare calculation for a single query point, up to you to adapt for multiple point.
I think it become fragile in larger dimension, and to enhance the bobustess you might need to scale independent variables so they are unity.
% "Independent" variables
% "Dependent variable"
% Preparation, update only when X changes
S = delaunayn(X);
% Query point, take centroid as example
% Interpolation
t = tsearchn(X,S,xq);
if isnan(t) % Fix bug
yq = NaN;
st = S(t,:);
M = X(st,:)-xq;
w = [zeros(1,n),1] / [M,ones(n+1,1)]; % NOTE: the last eqt might needs to be rescale to be "compatible" with M
yq = w*y(st);
  댓글 수: 3
Bruno Luong
Bruno Luong 2022년 8월 24일
griddata interpolation is alway better if your data have the right shape requirement.

댓글을 달려면 로그인하십시오.

추가 답변(0개)


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!

Translated by