# Scatteredinterpolant (linear) from symmetric data does not produce symmetric isolines

2 views (last 30 days)
ES_Thorny on 17 Jul 2024
Edited: Bruno Luong on 26 Jul 2024
I utilised the scatteredinterpolant function to generate an interpolation from which I derived isolines. My data are situated on a non-equispaced grid of points that are symmetric with respect to the midline. In fact, I only have data on one side, so I placed data on the other side by copying the values from the original data set, exploiting the symmetry.
When I generate iso-lines using the NATURAL method, the isolines have a symmetric trend. If I use the simplest method, i.e. LINEAR, the iso-lines are not symmetric, which does not make sense.
Do you know what may cause this issue and how to sort it out?

Bruno Luong on 17 Jul 2024
scatteredinterpolant all methods is based on triangulation of the data points. Even the data points are symmetric, the triangulation migh not.
Bruno Luong on 26 Jul 2024
x_PP_sym=x_PP;
y_PP_sym=-y_PP;
PP_i_sym=PP_i;
% Adding other points symmetrically with respect to y=0
x_PP_sym=x_PP;
y_PP_sym=-y_PP;
PP_i_sym=PP_i;
You create twice the variable and do not use it anywhere later. Clearly Your code is NOT correct.
Bruno Luong on 26 Jul 2024
Edited: Bruno Luong on 26 Jul 2024
This demo shows how to enforce the interpolation output to be symmetric, as it is an a priori expectation characteristic, whatever the input might be and or breaking symmetric due to scattering interpolation algorithm.
[x_PP,y_PP,PP_i] = peaks(20);
x_PP=x_PP(:);
y_PP=y_PP(:);
P_v=PP_i(:);
% ---------------
% Scattered Interpolant
% ---------------
% Grid
x0=min(x_PP);
x1=max(x_PP);
y0=min(y_PP);
y1=-y0; %max(y_PP); % Change by Bruno
N=50;
xll=linspace(x0,x1,N) ;
yll=linspace(y0,y1,N) ;
[X,Y] = meshgrid(xll,yll) ;
P=[x_PP,y_PP];
V=PP_i;
F = scatteredInterpolant(x_PP,y_PP,P_v);
F.Method ='linear';
F.ExtrapolationMethod ='none';
Z=F(X,Y);
Z=(Z+flip(Z,1))/2; % Add by Bruno, symmetrize the Z with to Y
% Contour plot
clevels=linspace(-4,4,10)
clevels = 1x10
-4.0000 -3.1111 -2.2222 -1.3333 -0.4444 0.4444 1.3333 2.2222 3.1111 4.0000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
[ch0,ch]=contour(X,Y,Z,10);
ch.LineWidth = 2;
axis equal
xlabel('x (mm)')
ylabel('y (mm)');
colormap(jet)
Cbar=colorbar;
Cbar.Label.String = 'Pressure (kPa)';
caxis([clevels(1) clevels(end)])
yline(0)

### Categories

Find more on Interpolation in Help Center and File Exchange

R2022b

### Community Treasure Hunt

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

Start Hunting!