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

4 ビュー (過去 30 日間)
ES_Thorny
ES_Thorny 2024 年 7 月 17 日
編集済み: Bruno Luong 2024 年 7 月 26 日
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?

回答 (1 件)

Bruno Luong
Bruno Luong 2024 年 7 月 17 日
scatteredinterpolant all methods is based on triangulation of the data points. Even the data points are symmetric, the triangulation migh not.
  10 件のコメント
Bruno Luong
Bruno Luong 2024 年 7 月 26 日
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
Bruno Luong 2024 年 7 月 26 日
編集済み: Bruno Luong 2024 年 7 月 26 日
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)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeInterpolation についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by