Receiving "Error using griddedInterpolant. Grid arrays must have NDGRID structure." error when interpolating 3D data.

176 views (last 30 days)
Dear community
I am using the griddedInterpolant() function to fit N-D data. In my particular case, the input has dimension 19x4x4.
The special thing is that one of the axes, the x-axis, is not constructed using incresing numbers (like from linspace or logspace). Instead, it comes from a separate .csv file because its values are also dependent on Y and Z.
Here is a code example:
clc; clear; close all; format shorteng;
X_range = zeros(1,19); % Placeholder for external data
Y_range = logspace(log10(210e-9),log10(100e-6),4);
Z_range = logspace(log10(180e-9),log10(100e-6),4);
[X,Y,Z] = ndgrid(X_range, Y_range,Z_range);
for k=1:19
% In reality, this data is read from a .csv file.
% For this example, let's use some random numbers
X(k,:,:) = randn(4,4);
end
% Generate a random result matrix
res = randn(19,4,4);
% Compute spline interpolation
F = griddedInterpolant(X,Y,Z,res,'spline');
Error using griddedInterpolant
Grid arrays must have NDGRID structure.
This results in a "Grid array must have NDGRID structure" error. What is the problem here?
Edit 28.12.2021
I want to update my question according to the suggestion in the comments.
scatteredInterpolant() wants its data in a specific format according to the documentation.
Namely, "scatteredInterpolant(P,v) specifies the coordinates of the sample points as an array. The rows of P contain the (x, y) or (x, y, z) coordinates for the values in v."
Below is an example that converts my case to this encoding (this time with real data).
clc; clear; close all; format shorteng;
X_matrix = [2.11300000000000e-12 1.76200000000000e-12 1.02000000000000e-11 7.76800000000000e-11 1.49400000000000e-13 1.28200000000000e-13 6.73000000000000e-13 4.99800000000000e-12 2.99000000000000e-14 2.63200000000000e-14 1.50400000000000e-13 1.12900000000000e-12 3.85900000000000e-15 3.36900000000000e-15 1.94600000000000e-14 1.46200000000000e-13
3.16900000000000e-11 2.65800000000000e-11 1.54000000000000e-10 1.17300000000000e-09 2.23800000000000e-12 1.93600000000000e-12 1.01700000000000e-11 7.55300000000000e-11 4.45700000000000e-13 3.96800000000000e-13 2.27000000000000e-12 1.70400000000000e-11 5.75000000000000e-14 5.07800000000000e-14 2.93600000000000e-13 2.20700000000000e-12
4.61500000000000e-10 3.95600000000000e-10 2.29800000000000e-09 1.75000000000000e-08 3.24500000000000e-11 2.89000000000000e-11 1.52400000000000e-10 1.13200000000000e-09 6.35900000000000e-12 5.89600000000000e-12 3.38600000000000e-11 2.54300000000000e-10 8.18200000000000e-13 7.54100000000000e-13 4.37800000000000e-12 3.29200000000000e-11
6.10000000000000e-09 5.60600000000000e-09 3.28600000000000e-08 2.50400000000000e-07 4.23400000000000e-10 4.14100000000000e-10 2.21100000000000e-09 1.64500000000000e-08 7.93500000000000e-11 8.31300000000000e-11 4.84100000000000e-10 3.64100000000000e-09 1.01400000000000e-11 1.06100000000000e-11 6.24500000000000e-11 4.70400000000000e-10
6.43600000000000e-08 6.82100000000000e-08 4.10000000000000e-07 3.13200000000000e-06 4.39800000000000e-09 5.21900000000000e-09 2.89300000000000e-08 2.16100000000000e-07 7.69000000000000e-10 1.00400000000000e-09 6.07200000000000e-09 4.58700000000000e-08 9.74000000000000e-11 1.27500000000000e-10 7.79000000000000e-10 5.89300000000000e-09
4.95500000000000e-07 6.09800000000000e-07 3.81500000000000e-06 2.92400000000000e-05 3.41900000000000e-08 5.07500000000000e-08 2.99900000000000e-07 2.25800000000000e-06 5.51200000000000e-09 9.24900000000000e-09 5.91200000000000e-08 4.49700000000000e-07 6.91400000000000e-10 1.16700000000000e-09 7.53300000000000e-09 5.73700000000000e-08
2.38000000000000e-06 3.90700000000000e-06 2.53600000000000e-05 0.000195000000000000 1.71000000000000e-07 3.63800000000000e-07 2.31200000000000e-06 1.75700000000000e-05 2.48500000000000e-08 6.23000000000000e-08 4.24700000000000e-07 3.25700000000000e-06 3.08100000000000e-09 7.82000000000000e-09 5.37500000000000e-08 4.12600000000000e-07
6.70400000000000e-06 1.72100000000000e-05 0.000117600000000000 0.000908300000000000 5.16300000000000e-07 1.69800000000000e-06 1.17100000000000e-05 8.99400000000000e-05 6.96700000000000e-08 2.64200000000000e-07 1.92400000000000e-06 1.48800000000000e-05 8.56900000000000e-09 3.28800000000000e-08 2.40900000000000e-07 1.86500000000000e-06
1.32000000000000e-05 4.82600000000000e-05 0.000346900000000000 0.00269000000000000 1.10600000000000e-06 4.91600000000000e-06 3.59100000000000e-05 0.000277900000000000 1.43500000000000e-07 7.09400000000000e-07 5.38300000000000e-06 4.18700000000000e-05 1.75700000000000e-08 8.76900000000000e-08 6.68500000000000e-07 5.20200000000000e-06
2.12200000000000e-05 9.61100000000000e-05 0.000713500000000000 0.00554900000000000 1.94200000000000e-06 1.02400000000000e-05 7.71300000000000e-05 0.000599400000000000 2.46700000000000e-07 1.41600000000000e-06 1.09800000000000e-05 8.56200000000000e-05 3.01400000000000e-08 1.74400000000000e-07 1.35700000000000e-06 1.05900000000000e-05
3.02900000000000e-05 0.000155900000000000 0.00117900000000000 0.00918800000000000 3.02000000000000e-06 1.75700000000000e-05 0.000134400000000000 0.00104700000000000 3.79600000000000e-07 2.37600000000000e-06 1.86200000000000e-05 0.000145400000000000 4.63400000000000e-08 2.92100000000000e-07 2.29600000000000e-06 1.79400000000000e-05
4.01000000000000e-05 0.000223800000000000 0.00171200000000000 0.0133500000000000 4.33800000000000e-06 2.67800000000000e-05 0.000206500000000000 0.00161000000000000 5.42300000000000e-07 3.57700000000000e-06 2.81900000000000e-05 0.000220400000000000 6.61400000000000e-08 4.39400000000000e-07 3.47300000000000e-06 2.71600000000000e-05
5.03800000000000e-05 0.000297200000000000 0.00228900000000000 0.0178600000000000 5.88500000000000e-06 3.77100000000000e-05 0.000292200000000000 0.00228000000000000 7.34000000000000e-07 5.00600000000000e-06 3.95900000000000e-05 0.000309600000000000 8.95000000000000e-08 6.14900000000000e-07 4.87500000000000e-06 3.81300000000000e-05
6.09500000000000e-05 0.000374300000000000 0.00289600000000000 0.0226100000000000 7.64600000000000e-06 5.02100000000000e-05 0.000390100000000000 0.00304400000000000 9.53400000000000e-07 6.64700000000000e-06 5.26500000000000e-05 0.000411800000000000 1.16200000000000e-07 8.16500000000000e-07 6.48400000000000e-06 5.07300000000000e-05
7.16700000000000e-05 0.000453600000000000 0.00352200000000000 0.0275000000000000 9.60200000000000e-06 6.40800000000000e-05 0.000498600000000000 0.00389100000000000 1.19900000000000e-06 8.48000000000000e-06 6.72200000000000e-05 0.000525900000000000 1.46200000000000e-07 1.04200000000000e-06 8.28000000000000e-06 6.47900000000000e-05
8.24400000000000e-05 0.000534400000000000 0.00415800000000000 0.0324800000000000 1.17300000000000e-05 7.91400000000000e-05 0.000616000000000000 0.00480800000000000 1.46700000000000e-06 1.04800000000000e-05 8.31000000000000e-05 0.000650100000000000 1.78900000000000e-07 1.28800000000000e-06 1.02400000000000e-05 8.01200000000000e-05
9.31900000000000e-05 0.000615800000000000 0.00479900000000000 0.0374900000000000 1.40000000000000e-05 9.51600000000000e-05 0.000740700000000000 0.00578200000000000 1.75600000000000e-06 1.26200000000000e-05 0.000100100000000000 0.000783000000000000 2.14200000000000e-07 1.55200000000000e-06 1.23400000000000e-05 9.65400000000000e-05
0.000103900000000000 0.000697300000000000 0.00544100000000000 0.0425100000000000 1.64000000000000e-05 0.000111900000000000 0.000871100000000000 0.00679900000000000 2.06300000000000e-06 1.48800000000000e-05 0.000118000000000000 0.000922900000000000 2.51600000000000e-07 1.83100000000000e-06 1.45500000000000e-05 0.000113800000000000
0.000114400000000000 0.000778600000000000 0.00608100000000000 0.0475100000000000 1.88900000000000e-05 0.000129300000000000 0.00100500000000000 0.00784700000000000 2.38300000000000e-06 1.72400000000000e-05 0.000136600000000000 0.00106800000000000 2.90800000000000e-07 2.12100000000000e-06 1.68500000000000e-05 0.000131900000000000];
V_matrix = [-0.508800000000000 -0.625100000000000 -0.637000000000000 -0.638000000000000 -0.503700000000000 -0.602700000000000 -0.614500000000000 -0.616000000000000 -0.486500000000000 -0.581400000000000 -0.590900000000000 -0.592100000000000 -0.484000000000000 -0.578900000000000 -0.588000000000000 -0.589200000000000
-0.408800000000000 -0.525100000000000 -0.537000000000000 -0.538000000000000 -0.403700000000000 -0.502700000000000 -0.514500000000000 -0.516000000000000 -0.386500000000000 -0.481400000000000 -0.490900000000000 -0.492100000000000 -0.384000000000000 -0.478900000000000 -0.488000000000000 -0.489200000000000
-0.308800000000000 -0.425100000000000 -0.437000000000000 -0.438000000000000 -0.303700000000000 -0.402700000000000 -0.414500000000000 -0.416000000000000 -0.286500000000000 -0.381400000000000 -0.390900000000000 -0.392100000000000 -0.284000000000000 -0.378900000000000 -0.388000000000000 -0.389200000000000
-0.208800000000000 -0.325100000000000 -0.337000000000000 -0.338000000000000 -0.203700000000000 -0.302700000000000 -0.314500000000000 -0.316000000000000 -0.186500000000000 -0.281400000000000 -0.290900000000000 -0.292100000000000 -0.184000000000000 -0.278900000000000 -0.288000000000000 -0.289200000000000
-0.108800000000000 -0.225100000000000 -0.237000000000000 -0.238000000000000 -0.103700000000000 -0.202700000000000 -0.214500000000000 -0.216000000000000 -0.0864800000000000 -0.181400000000000 -0.190900000000000 -0.192100000000000 -0.0840200000000000 -0.178900000000000 -0.188000000000000 -0.189200000000000
-0.00884400000000000 -0.125100000000000 -0.137000000000000 -0.138000000000000 -0.00365500000000000 -0.102700000000000 -0.114500000000000 -0.116000000000000 0.0135200000000000 -0.0814400000000000 -0.0909100000000000 -0.0921100000000000 0.0159800000000000 -0.0788800000000000 -0.0880300000000000 -0.0891900000000000
0.0911600000000000 -0.0250600000000000 -0.0370000000000000 -0.0380300000000000 0.0963400000000000 -0.00272500000000000 -0.0144900000000000 -0.0159800000000000 0.113500000000000 0.0185600000000000 0.00908500000000000 0.00788900000000000 0.116000000000000 0.0211200000000000 0.0119700000000000 0.0108100000000000
0.191200000000000 0.0749400000000000 0.0630000000000000 0.0619700000000000 0.196300000000000 0.0972800000000000 0.0855100000000000 0.0840200000000000 0.213500000000000 0.118600000000000 0.109100000000000 0.107900000000000 0.216000000000000 0.121100000000000 0.112000000000000 0.110800000000000
0.291200000000000 0.174900000000000 0.163000000000000 0.162000000000000 0.296300000000000 0.197300000000000 0.185500000000000 0.184000000000000 0.313500000000000 0.218600000000000 0.209100000000000 0.207900000000000 0.316000000000000 0.221100000000000 0.212000000000000 0.210800000000000
0.391200000000000 0.274900000000000 0.263000000000000 0.262000000000000 0.396300000000000 0.297300000000000 0.285500000000000 0.284000000000000 0.413500000000000 0.318600000000000 0.309100000000000 0.307900000000000 0.416000000000000 0.321100000000000 0.312000000000000 0.310800000000000
0.491200000000000 0.374900000000000 0.363000000000000 0.362000000000000 0.496300000000000 0.397300000000000 0.385500000000000 0.384000000000000 0.513500000000000 0.418600000000000 0.409100000000000 0.407900000000000 0.516000000000000 0.421100000000000 0.412000000000000 0.410800000000000
0.591200000000000 0.474900000000000 0.463000000000000 0.462000000000000 0.596300000000000 0.497300000000000 0.485500000000000 0.484000000000000 0.613500000000000 0.518600000000000 0.509100000000000 0.507900000000000 0.616000000000000 0.521100000000000 0.512000000000000 0.510800000000000
0.691200000000000 0.574900000000000 0.563000000000000 0.562000000000000 0.696300000000000 0.597300000000000 0.585500000000000 0.584000000000000 0.713500000000000 0.618600000000000 0.609100000000000 0.607900000000000 0.716000000000000 0.621100000000000 0.612000000000000 0.610800000000000
0.791200000000000 0.674900000000000 0.663000000000000 0.662000000000000 0.796300000000000 0.697300000000000 0.685500000000000 0.684000000000000 0.813500000000000 0.718600000000000 0.709100000000000 0.707900000000000 0.816000000000000 0.721100000000000 0.712000000000000 0.710800000000000
0.891200000000000 0.774900000000000 0.763000000000000 0.762000000000000 0.896300000000000 0.797300000000000 0.785500000000000 0.784000000000000 0.913500000000000 0.818600000000000 0.809100000000000 0.807900000000000 0.916000000000000 0.821100000000000 0.812000000000000 0.810800000000000
0.991200000000000 0.874900000000000 0.863000000000000 0.862000000000000 0.996300000000000 0.897300000000000 0.885500000000000 0.884000000000000 1.01400000000000 0.918600000000000 0.909100000000000 0.907900000000000 1.01600000000000 0.921100000000000 0.912000000000000 0.910800000000000
1.09100000000000 0.974900000000000 0.963000000000000 0.962000000000000 1.09600000000000 0.997300000000000 0.985500000000000 0.984000000000000 1.11400000000000 1.01900000000000 1.00900000000000 1.00800000000000 1.11600000000000 1.02100000000000 1.01200000000000 1.01100000000000
1.19100000000000 1.07500000000000 1.06300000000000 1.06200000000000 1.19600000000000 1.09700000000000 1.08600000000000 1.08400000000000 1.21400000000000 1.11900000000000 1.10900000000000 1.10800000000000 1.21600000000000 1.12100000000000 1.11200000000000 1.11100000000000
1.29100000000000 1.17500000000000 1.16300000000000 1.16200000000000 1.29600000000000 1.19700000000000 1.18600000000000 1.18400000000000 1.31400000000000 1.21900000000000 1.20900000000000 1.20800000000000 1.31600000000000 1.22100000000000 1.21200000000000 1.21100000000000];
y_range = logspace(log10(210e-9),log10(100e-6),4);
z_range = logspace(log10(180e-9),log10(100e-6),4);
% Encode data in P and v
% Note: I am pretty sure there are better ways to do this
P = zeros(19*4*4,3);
v = zeros(19*4*4,1);
x_cnt = 1;
y_cnt = 1;
z_cnt = 1;
for i=1:19
for j=1:(4*4)
v(x_cnt,1) = V_matrix(i,j);
P(x_cnt,1) = X_matrix(i,j);
P(x_cnt,2) = y_range(y_cnt);
P(x_cnt,3) = z_range(z_cnt);
x_cnt = x_cnt + 1;
y_cnt = y_cnt + 1;
if(y_cnt>4)
y_cnt = 1;
z_cnt = z_cnt + 1;
if(z_cnt>4)
z_cnt = 1;
end
end
end
end
% Interpolate
F_Veff_ne = scatteredInterpolant(P,v,'natural');
% Visualization
xx = logspace(log10(5e-15),log10(20e-6),20); % This range is slimmer because values above 20e-6 are not of interest.
yy = logspace(log10(210e-9),log10(100e-6),20);
zz = logspace(log10(180e-9),log10(100e-6),20);
[xq,yq,zq] = meshgrid(xx,yy,zz);
vq = F_Veff_ne(xq,yq,zq);
xslice = [5e-15, 5e-12, 5e-9, 5e-6];
yslice = [0.5e-6, 5e-6, 50e-6];
zslice = [0.5e-6, 5e-6, 50e-6];
slice(xq,yq,zq,vq,xslice,yslice,zslice)
set(gca,'XScale','log')
set(gca,'YScale','log')
set(gca,'ZScale','log')
xlabel('x')
ylabel('y')
zlabel('z')
cb = colorbar;
cb.Label.String = 'v';
Problem:
The scatteredInterpolant method returns many NaN values when I use the "natural" method (to achieve C1 smoothness). Why? How to avoid this?
  5 Comments
Walter Roberson
Walter Roberson on 28 Dec 2021
I do not see why that would be a problem? scatteredInterpolant does not require that the mesh be equally dense for the query locations.

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 28 Dec 2021
Edited: Walter Roberson on 28 Dec 2021
clc; clear; close all; format shorteng;
X_matrix = [2.11300000000000e-12 1.76200000000000e-12 1.02000000000000e-11 7.76800000000000e-11 1.49400000000000e-13 1.28200000000000e-13 6.73000000000000e-13 4.99800000000000e-12 2.99000000000000e-14 2.63200000000000e-14 1.50400000000000e-13 1.12900000000000e-12 3.85900000000000e-15 3.36900000000000e-15 1.94600000000000e-14 1.46200000000000e-13
3.16900000000000e-11 2.65800000000000e-11 1.54000000000000e-10 1.17300000000000e-09 2.23800000000000e-12 1.93600000000000e-12 1.01700000000000e-11 7.55300000000000e-11 4.45700000000000e-13 3.96800000000000e-13 2.27000000000000e-12 1.70400000000000e-11 5.75000000000000e-14 5.07800000000000e-14 2.93600000000000e-13 2.20700000000000e-12
4.61500000000000e-10 3.95600000000000e-10 2.29800000000000e-09 1.75000000000000e-08 3.24500000000000e-11 2.89000000000000e-11 1.52400000000000e-10 1.13200000000000e-09 6.35900000000000e-12 5.89600000000000e-12 3.38600000000000e-11 2.54300000000000e-10 8.18200000000000e-13 7.54100000000000e-13 4.37800000000000e-12 3.29200000000000e-11
6.10000000000000e-09 5.60600000000000e-09 3.28600000000000e-08 2.50400000000000e-07 4.23400000000000e-10 4.14100000000000e-10 2.21100000000000e-09 1.64500000000000e-08 7.93500000000000e-11 8.31300000000000e-11 4.84100000000000e-10 3.64100000000000e-09 1.01400000000000e-11 1.06100000000000e-11 6.24500000000000e-11 4.70400000000000e-10
6.43600000000000e-08 6.82100000000000e-08 4.10000000000000e-07 3.13200000000000e-06 4.39800000000000e-09 5.21900000000000e-09 2.89300000000000e-08 2.16100000000000e-07 7.69000000000000e-10 1.00400000000000e-09 6.07200000000000e-09 4.58700000000000e-08 9.74000000000000e-11 1.27500000000000e-10 7.79000000000000e-10 5.89300000000000e-09
4.95500000000000e-07 6.09800000000000e-07 3.81500000000000e-06 2.92400000000000e-05 3.41900000000000e-08 5.07500000000000e-08 2.99900000000000e-07 2.25800000000000e-06 5.51200000000000e-09 9.24900000000000e-09 5.91200000000000e-08 4.49700000000000e-07 6.91400000000000e-10 1.16700000000000e-09 7.53300000000000e-09 5.73700000000000e-08
2.38000000000000e-06 3.90700000000000e-06 2.53600000000000e-05 0.000195000000000000 1.71000000000000e-07 3.63800000000000e-07 2.31200000000000e-06 1.75700000000000e-05 2.48500000000000e-08 6.23000000000000e-08 4.24700000000000e-07 3.25700000000000e-06 3.08100000000000e-09 7.82000000000000e-09 5.37500000000000e-08 4.12600000000000e-07
6.70400000000000e-06 1.72100000000000e-05 0.000117600000000000 0.000908300000000000 5.16300000000000e-07 1.69800000000000e-06 1.17100000000000e-05 8.99400000000000e-05 6.96700000000000e-08 2.64200000000000e-07 1.92400000000000e-06 1.48800000000000e-05 8.56900000000000e-09 3.28800000000000e-08 2.40900000000000e-07 1.86500000000000e-06
1.32000000000000e-05 4.82600000000000e-05 0.000346900000000000 0.00269000000000000 1.10600000000000e-06 4.91600000000000e-06 3.59100000000000e-05 0.000277900000000000 1.43500000000000e-07 7.09400000000000e-07 5.38300000000000e-06 4.18700000000000e-05 1.75700000000000e-08 8.76900000000000e-08 6.68500000000000e-07 5.20200000000000e-06
2.12200000000000e-05 9.61100000000000e-05 0.000713500000000000 0.00554900000000000 1.94200000000000e-06 1.02400000000000e-05 7.71300000000000e-05 0.000599400000000000 2.46700000000000e-07 1.41600000000000e-06 1.09800000000000e-05 8.56200000000000e-05 3.01400000000000e-08 1.74400000000000e-07 1.35700000000000e-06 1.05900000000000e-05
3.02900000000000e-05 0.000155900000000000 0.00117900000000000 0.00918800000000000 3.02000000000000e-06 1.75700000000000e-05 0.000134400000000000 0.00104700000000000 3.79600000000000e-07 2.37600000000000e-06 1.86200000000000e-05 0.000145400000000000 4.63400000000000e-08 2.92100000000000e-07 2.29600000000000e-06 1.79400000000000e-05
4.01000000000000e-05 0.000223800000000000 0.00171200000000000 0.0133500000000000 4.33800000000000e-06 2.67800000000000e-05 0.000206500000000000 0.00161000000000000 5.42300000000000e-07 3.57700000000000e-06 2.81900000000000e-05 0.000220400000000000 6.61400000000000e-08 4.39400000000000e-07 3.47300000000000e-06 2.71600000000000e-05
5.03800000000000e-05 0.000297200000000000 0.00228900000000000 0.0178600000000000 5.88500000000000e-06 3.77100000000000e-05 0.000292200000000000 0.00228000000000000 7.34000000000000e-07 5.00600000000000e-06 3.95900000000000e-05 0.000309600000000000 8.95000000000000e-08 6.14900000000000e-07 4.87500000000000e-06 3.81300000000000e-05
6.09500000000000e-05 0.000374300000000000 0.00289600000000000 0.0226100000000000 7.64600000000000e-06 5.02100000000000e-05 0.000390100000000000 0.00304400000000000 9.53400000000000e-07 6.64700000000000e-06 5.26500000000000e-05 0.000411800000000000 1.16200000000000e-07 8.16500000000000e-07 6.48400000000000e-06 5.07300000000000e-05
7.16700000000000e-05 0.000453600000000000 0.00352200000000000 0.0275000000000000 9.60200000000000e-06 6.40800000000000e-05 0.000498600000000000 0.00389100000000000 1.19900000000000e-06 8.48000000000000e-06 6.72200000000000e-05 0.000525900000000000 1.46200000000000e-07 1.04200000000000e-06 8.28000000000000e-06 6.47900000000000e-05
8.24400000000000e-05 0.000534400000000000 0.00415800000000000 0.0324800000000000 1.17300000000000e-05 7.91400000000000e-05 0.000616000000000000 0.00480800000000000 1.46700000000000e-06 1.04800000000000e-05 8.31000000000000e-05 0.000650100000000000 1.78900000000000e-07 1.28800000000000e-06 1.02400000000000e-05 8.01200000000000e-05
9.31900000000000e-05 0.000615800000000000 0.00479900000000000 0.0374900000000000 1.40000000000000e-05 9.51600000000000e-05 0.000740700000000000 0.00578200000000000 1.75600000000000e-06 1.26200000000000e-05 0.000100100000000000 0.000783000000000000 2.14200000000000e-07 1.55200000000000e-06 1.23400000000000e-05 9.65400000000000e-05
0.000103900000000000 0.000697300000000000 0.00544100000000000 0.0425100000000000 1.64000000000000e-05 0.000111900000000000 0.000871100000000000 0.00679900000000000 2.06300000000000e-06 1.48800000000000e-05 0.000118000000000000 0.000922900000000000 2.51600000000000e-07 1.83100000000000e-06 1.45500000000000e-05 0.000113800000000000
0.000114400000000000 0.000778600000000000 0.00608100000000000 0.0475100000000000 1.88900000000000e-05 0.000129300000000000 0.00100500000000000 0.00784700000000000 2.38300000000000e-06 1.72400000000000e-05 0.000136600000000000 0.00106800000000000 2.90800000000000e-07 2.12100000000000e-06 1.68500000000000e-05 0.000131900000000000];
V_matrix = [-0.508800000000000 -0.625100000000000 -0.637000000000000 -0.638000000000000 -0.503700000000000 -0.602700000000000 -0.614500000000000 -0.616000000000000 -0.486500000000000 -0.581400000000000 -0.590900000000000 -0.592100000000000 -0.484000000000000 -0.578900000000000 -0.588000000000000 -0.589200000000000
-0.408800000000000 -0.525100000000000 -0.537000000000000 -0.538000000000000 -0.403700000000000 -0.502700000000000 -0.514500000000000 -0.516000000000000 -0.386500000000000 -0.481400000000000 -0.490900000000000 -0.492100000000000 -0.384000000000000 -0.478900000000000 -0.488000000000000 -0.489200000000000
-0.308800000000000 -0.425100000000000 -0.437000000000000 -0.438000000000000 -0.303700000000000 -0.402700000000000 -0.414500000000000 -0.416000000000000 -0.286500000000000 -0.381400000000000 -0.390900000000000 -0.392100000000000 -0.284000000000000 -0.378900000000000 -0.388000000000000 -0.389200000000000
-0.208800000000000 -0.325100000000000 -0.337000000000000 -0.338000000000000 -0.203700000000000 -0.302700000000000 -0.314500000000000 -0.316000000000000 -0.186500000000000 -0.281400000000000 -0.290900000000000 -0.292100000000000 -0.184000000000000 -0.278900000000000 -0.288000000000000 -0.289200000000000
-0.108800000000000 -0.225100000000000 -0.237000000000000 -0.238000000000000 -0.103700000000000 -0.202700000000000 -0.214500000000000 -0.216000000000000 -0.0864800000000000 -0.181400000000000 -0.190900000000000 -0.192100000000000 -0.0840200000000000 -0.178900000000000 -0.188000000000000 -0.189200000000000
-0.00884400000000000 -0.125100000000000 -0.137000000000000 -0.138000000000000 -0.00365500000000000 -0.102700000000000 -0.114500000000000 -0.116000000000000 0.0135200000000000 -0.0814400000000000 -0.0909100000000000 -0.0921100000000000 0.0159800000000000 -0.0788800000000000 -0.0880300000000000 -0.0891900000000000
0.0911600000000000 -0.0250600000000000 -0.0370000000000000 -0.0380300000000000 0.0963400000000000 -0.00272500000000000 -0.0144900000000000 -0.0159800000000000 0.113500000000000 0.0185600000000000 0.00908500000000000 0.00788900000000000 0.116000000000000 0.0211200000000000 0.0119700000000000 0.0108100000000000
0.191200000000000 0.0749400000000000 0.0630000000000000 0.0619700000000000 0.196300000000000 0.0972800000000000 0.0855100000000000 0.0840200000000000 0.213500000000000 0.118600000000000 0.109100000000000 0.107900000000000 0.216000000000000 0.121100000000000 0.112000000000000 0.110800000000000
0.291200000000000 0.174900000000000 0.163000000000000 0.162000000000000 0.296300000000000 0.197300000000000 0.185500000000000 0.184000000000000 0.313500000000000 0.218600000000000 0.209100000000000 0.207900000000000 0.316000000000000 0.221100000000000 0.212000000000000 0.210800000000000
0.391200000000000 0.274900000000000 0.263000000000000 0.262000000000000 0.396300000000000 0.297300000000000 0.285500000000000 0.284000000000000 0.413500000000000 0.318600000000000 0.309100000000000 0.307900000000000 0.416000000000000 0.321100000000000 0.312000000000000 0.310800000000000
0.491200000000000 0.374900000000000 0.363000000000000 0.362000000000000 0.496300000000000 0.397300000000000 0.385500000000000 0.384000000000000 0.513500000000000 0.418600000000000 0.409100000000000 0.407900000000000 0.516000000000000 0.421100000000000 0.412000000000000 0.410800000000000
0.591200000000000 0.474900000000000 0.463000000000000 0.462000000000000 0.596300000000000 0.497300000000000 0.485500000000000 0.484000000000000 0.613500000000000 0.518600000000000 0.509100000000000 0.507900000000000 0.616000000000000 0.521100000000000 0.512000000000000 0.510800000000000
0.691200000000000 0.574900000000000 0.563000000000000 0.562000000000000 0.696300000000000 0.597300000000000 0.585500000000000 0.584000000000000 0.713500000000000 0.618600000000000 0.609100000000000 0.607900000000000 0.716000000000000 0.621100000000000 0.612000000000000 0.610800000000000
0.791200000000000 0.674900000000000 0.663000000000000 0.662000000000000 0.796300000000000 0.697300000000000 0.685500000000000 0.684000000000000 0.813500000000000 0.718600000000000 0.709100000000000 0.707900000000000 0.816000000000000 0.721100000000000 0.712000000000000 0.710800000000000
0.891200000000000 0.774900000000000 0.763000000000000 0.762000000000000 0.896300000000000 0.797300000000000 0.785500000000000 0.784000000000000 0.913500000000000 0.818600000000000 0.809100000000000 0.807900000000000 0.916000000000000 0.821100000000000 0.812000000000000 0.810800000000000
0.991200000000000 0.874900000000000 0.863000000000000 0.862000000000000 0.996300000000000 0.897300000000000 0.885500000000000 0.884000000000000 1.01400000000000 0.918600000000000 0.909100000000000 0.907900000000000 1.01600000000000 0.921100000000000 0.912000000000000 0.910800000000000
1.09100000000000 0.974900000000000 0.963000000000000 0.962000000000000 1.09600000000000 0.997300000000000 0.985500000000000 0.984000000000000 1.11400000000000 1.01900000000000 1.00900000000000 1.00800000000000 1.11600000000000 1.02100000000000 1.01200000000000 1.01100000000000
1.19100000000000 1.07500000000000 1.06300000000000 1.06200000000000 1.19600000000000 1.09700000000000 1.08600000000000 1.08400000000000 1.21400000000000 1.11900000000000 1.10900000000000 1.10800000000000 1.21600000000000 1.12100000000000 1.11200000000000 1.11100000000000
1.29100000000000 1.17500000000000 1.16300000000000 1.16200000000000 1.29600000000000 1.19700000000000 1.18600000000000 1.18400000000000 1.31400000000000 1.21900000000000 1.20900000000000 1.20800000000000 1.31600000000000 1.22100000000000 1.21200000000000 1.21100000000000];
y_range = logspace(log10(210e-9),log10(100e-6),4);
z_range = logspace(log10(180e-9),log10(100e-6),4);
% Encode data in P and v
% Note: I am pretty sure there are better ways to do this
P = zeros(19*4*4,3);
v = zeros(19*4*4,1);
x_cnt = 1;
y_cnt = 1;
z_cnt = 1;
for i=1:19
for j=1:(4*4)
v(x_cnt,1) = V_matrix(i,j);
P(x_cnt,1) = X_matrix(i,j);
P(x_cnt,2) = y_range(y_cnt);
P(x_cnt,3) = z_range(z_cnt);
x_cnt = x_cnt + 1;
y_cnt = y_cnt + 1;
if(y_cnt>4)
y_cnt = 1;
z_cnt = z_cnt + 1;
if(z_cnt>4)
z_cnt = 1;
end
end
end
end
% Interpolate
F_Veff_ne = scatteredInterpolant(P,v,'natural');
% Visualization
xx = logspace(log10(5e-15),log10(20e-6),20); % This range is slimmer because values above 20e-6 are not of interest.
yy = logspace(log10(210e-9),log10(100e-6),20);
zz = logspace(log10(180e-9),log10(100e-6),20);
[xq,yq,zq] = meshgrid(xx,yy,zz);
min(P), max(P)
ans = 1×3
1.0e+00 * 3.3690e-015 210.0000e-009 180.0000e-009
ans = 1×3
47.5100e-003 100.0000e-006 100.0000e-006
[xx(1), yy(1), zz(1)], [xx(end), yy(end), zz(end)]
ans = 1×3
1.0e+00 * 5.0000e-015 210.0000e-009 180.0000e-009
ans = 1×3
1.0e+00 * 20.0000e-006 100.0000e-006 100.0000e-006
vq = F_Veff_ne(xq,yq,zq);
nnz(isnan(vq))
ans =
2.4730e+003
scatter3(P(:,1), P(:,2), P(:,3), 30, v)
hold on
colors = [0 1 1; 1 0 0];
cmap = colors(isnan(vq(:))+1,:);
scatter3(xq(:), yq(:), zq(:), 5, cmap, '.')
hold off
xlabel('x'); ylabel('y'); zlabel('z');
xlim(xx([1 end])); ylim(yy([1 end])); zlim(zz([1 end]));
set(gca,'xscale', 'log', 'yscale', 'log', 'zscale', 'log')
The large circles are places where there are data. The small cyan dots are query locations for which interpolation worked. The small red dots are query locations for which interpolation failed.
My interpretation would be that there is a "hole" in the data that 'natural' interpolation is not willing to work around. If you use 'linear' interpolation then you do not get the nans.
  2 Comments
Dominik Hiltbrunner
Dominik Hiltbrunner on 28 Dec 2021
I also noted that 'linear' or 'nearest' works. However, I am somewhat unhappy with the accuracy that those interpolation methods provide.
Due to the nature of the problem, I cannot extract V as a function of X,Y, and Z directly. The data points are aquired in two steps: once X as function of Y, Z, and a helper variable, let's call that W; and then V also as a function of X,Y, and also W.
So we have two .csv files: one with X(W,Y,Z) and one with V(W,Y,Z). The helper variable W is not of interest and left out for the interpolation. There is no guarantee that the X-data is unique or equaly dense i all regions. This is where the holes could come from. However, I do not see how I could avoid that problem.
Nevertheless, I do not see why I cannot use a normal gridded interpolation. For example, since we have the new encoding of the data in P, I could do
[~,idx] = sort(P(:,1));
Psorted = P(idx,:)
to get the X-datapoints in a sorted manner (along the first column, which holds the x-values). Shouldn't it be possible to somehow generate a data grid based on these data and apply it to e.g. a cubic spline interpolation? To my knowledge, cubic splines work with any grid.

Sign in to comment.

Categories

Find more on Interpolation in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!