MATLAB интерполяция неправильно экстраполирует на вогнутую границу
Я хочу построить свои поверхностные решения от Ansys Fluent в contourf
сюжет с MATLAB. Решением является таблица в формате ASCII с точками рассеяния (x,y,z), которые описывают плоскость и температуру в каждой из этих точек.
На первом изображении вы можете видеть график рассеяния со всеми точками и температурой в цвете. Здесь вы можете увидеть правильную геометрию границы.
Но если я хочу контурный график, мне нужно интерполировать рассеянные точки. На следующей картинке вы можете увидеть результат. Проблема в том, что MATLAB интерполирует "через" границу, например, внизу. Я думаю, что проблема как-то связана с вогнутой границей и триангуляцией Делоне.
Мой код
clear all
close all
clc
data_txt = importdata('file'); % 5Columns: NodeNumber, x,y,z,temperature
data_int = scatteredInterpolant(data_txt.data(:,3),data_txt.data(:,4),data_txt.data(:,5),'natural','none');
x_min=min(data_txt.data(:,2));
x_max=max(data_txt.data(:,2));
y_min=min(data_txt.data(:,3));
y_max=max(data_txt.data(:,3));
z_min=min(data_txt.data(:,4));
z_max=max(data_txt.data(:,4));
x = x_min:0.0001:x_max;
y = y_min:0.0001:y_max;
z = z_min:0.0001:z_max;
[Y, Z] = meshgrid(y, z);
data_int_ = data_int(Y,Z);
figure_handle=figure;
contourf(Y,Z,data_int_,100,'Edgecolor','none');
В этом случае координата x является постоянной. Я могу сделать это с каждой координатой, используя матрицу вращения. Чем у меня топор, у, проблема с данными.
Есть ли способ интерполировать мои разбросанные точки, но чтобы получить правильную форму границы? Как я могу остановить Matlab от интерполяции вогнутых областей без данных?