Filter löschen
Filter löschen

4D Table Interpolation

23 Ansichten (letzte 30 Tage)
Fawad Farooq Ashraf
Fawad Farooq Ashraf am 5 Feb. 2023
Kommentiert: Voss am 5 Feb. 2023
I have a data set in four variables (alpha,beta,gamma,lambda).
Here alpha is a 10 element vector, beta is a 8 element vector, both gamma and lambda have four values each.
The data is given such that for each value of lambda, there are 4 tables, and those 4 tables correspond to each value of gamma. Each of those four tables is a 8x10 matrix whose rows correspond to values of beta and columns correspond to values of alpha.
I tried to implement it this way (sample code using random values):
alpha = 1:10;
beta = 1:8;
gamma = 1:4;
lambda = 1:4;
m = length(beta);
n = length(alpha);
Data(:,:,1,1) = rand(m,n); % alpha in first dimension, beta is 2nd dimension, gamma in 3rd and lambda in 4th
Data(:,:,2,1) = rand(m,n);
Data(:,:,3,1) = rand(m,n);
Data(:,:,4,1) = rand(m,n);
Data(:,:,1,2) = rand(m,n);
Data(:,:,2,2) = rand(m,n);
Data(:,:,3,2) = rand(m,n);
Data(:,:,4,2) = rand(m,n);
Data(:,:,1,3) = rand(m,n);
Data(:,:,2,3) = rand(m,n);
Data(:,:,3,3) = rand(m,n);
Data(:,:,4,3) = rand(m,n);
Data(:,:,1,4) = rand(m,n);
Data(:,:,2,4) = rand(m,n);
Data(:,:,3,4) = rand(m,n);
Data(:,:,4,4) = rand(m,n);
idat = interpn(alpha,beta,gamma,lambda,Data,1,2,3,4);
Error using griddedInterpolant
Sample points vector corresponding to grid dimension 1 must contain 8 elements.

Error in interpn (line 149)
F = griddedInterpolant(X, V, method,extrap);
This code gives me errors. How can I resolve it? Do I need to create an n-dimensional grid? or am I making some mistake in the making of 4D tables.

Akzeptierte Antwort

Voss
Voss am 5 Feb. 2023
Bearbeitet: Voss am 5 Feb. 2023
Swap your definitions of m and n (or equivalently use rand(n,m)). Like you said, alpha is 1st dimension, beta is 2nd.
alpha = 1:10;
beta = 1:8;
gamma = 1:4;
lambda = 1:4;
m = length(alpha);
n = length(beta);
Data(:,:,1,1) = rand(m,n); % alpha in first dimension, beta is 2nd dimension, gamma in 3rd and lambda in 4th
Data(:,:,2,1) = rand(m,n);
Data(:,:,3,1) = rand(m,n);
Data(:,:,4,1) = rand(m,n);
Data(:,:,1,2) = rand(m,n);
Data(:,:,2,2) = rand(m,n);
Data(:,:,3,2) = rand(m,n);
Data(:,:,4,2) = rand(m,n);
Data(:,:,1,3) = rand(m,n);
Data(:,:,2,3) = rand(m,n);
Data(:,:,3,3) = rand(m,n);
Data(:,:,4,3) = rand(m,n);
Data(:,:,1,4) = rand(m,n);
Data(:,:,2,4) = rand(m,n);
Data(:,:,3,4) = rand(m,n);
Data(:,:,4,4) = rand(m,n);
idat = interpn(alpha,beta,gamma,lambda,Data,1,2,3,4);
disp(idat)
0.7127
Edit to show that the interpolated value matches the input table:
Data(1,2,3,4)
ans = 0.7127
  7 Kommentare
Fawad Farooq Ashraf
Fawad Farooq Ashraf am 5 Feb. 2023
Yes, you're actually right. Thank you for your help.
Voss
Voss am 5 Feb. 2023
You're welcome.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by