# How to use scatteredInterpolant in case of dimensions more than 3

조회 수: 11 (최근 30일)
Ajai Singh 2022년 8월 23일
댓글: Bruno Luong 2022년 8월 24일
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
VAL_PHI_CONCAT = [];
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')
size(X)
disp('Size of val_phi')
size(Val_phi{i,k})
disp([num2str(i),num2str(k)])
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} ];
end
end
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이전 댓글 2개 표시이전 댓글 2개 숨기기
Bruno Luong 2022년 8월 23일
I guess you just have tried INTERPN randomy without knowing what it does. That's why you still ask question about the error.
So we cannot take it as what kind of interpolation you want to do.
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 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.
n=6;
m=max(n+1,100);
% "Independent" variables
X=rand(m,n);
% "Dependent variable"
y=rand(m,1);
% Preparation, update only when X changes
S = delaunayn(X);
% Query point, take centroid as example
xq=mean(X,1);
% Interpolation
t = tsearchn(X,S,xq);
if isnan(t) % Fix bug
yq = NaN;
else
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);
end
yq
##### 댓글 수: 3이전 댓글 1개 표시이전 댓글 1개 숨기기
Ajai Singh 2022년 8월 24일
이동: Bruno Luong 2022년 8월 24일
Thank you very much for taking time to resolve my problem, I really appreciate it.
I used griddatan and the time taken to process this increases significantly even with the increase in the number of data points ( keeping the dimension of the data constant).
I will try your code and will update you how it does.
Once again I really appreciate your help.
Thank you.
Bruno Luong 2022년 8월 24일
griddata interpolation is alway better if your data have the right shape requirement.

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

### 카테고리

Help CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

R2022a

### Community Treasure Hunt

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

Start Hunting!

Translated by