Данные, имеющий разброс состоят из набора точек X
и соответствующие значения V
, где точки не имеют никакой структуры или порядка между их относительными местоположениями. Существуют различные подходы к интерполяции данных, имеющий разброс. Один широко используемый подход использует Триангуляцию Делоне точек.
В этом примере показано, как создать поверхность интерполяции путем триангулирования точек и подъема вершин величиной V
в размерность, ортогональную к X
.
Существуют изменения о том, как можно применить этот подход. В этом примере интерполяция разломана на отдельные шаги; обычно, полный процесс интерполяции выполняется с одним вызовом функции.
Создайте набор данных, имеющий разброс на поверхности параболоида.
X = [-1.5 3.2; 1.8 3.3; -3.7 1.5; -1.5 1.3; ... 0.8 1.2; 3.3 1.5; -4.0 -1.0; -2.3 -0.7; 0 -0.5; 2.0 -1.5; 3.7 -0.8; -3.5 -2.9; ... -0.9 -3.9; 2.0 -3.5; 3.5 -2.25]; V = X(:,1).^2 + X(:,2).^2; hold on plot3(X(:,1),X(:,2),zeros(15,1), '*r') axis([-4, 4, -4, 4, 0, 25]); grid stem3(X(:,1),X(:,2),V,'^','fill') hold off view(322.5, 30);
Создайте Триангуляцию Делоне, снимите вершины и оцените interpolant в точке запроса Xq
.
figure('Color', 'white') t = delaunay(X(:,1),X(:,2)); hold on trimesh(t,X(:,1),X(:,2), zeros(15,1), ... 'EdgeColor','r', 'FaceColor','none') defaultFaceColor = [0.6875 0.8750 0.8984]; trisurf(t,X(:,1),X(:,2), V, 'FaceColor', ... defaultFaceColor, 'FaceAlpha',0.9); plot3(X(:,1),X(:,2),zeros(15,1), '*r') axis([-4, 4, -4, 4, 0, 25]); grid plot3(-2.6,-2.6,0,'*b','LineWidth', 1.6) plot3([-2.6 -2.6]',[-2.6 -2.6]',[0 13.52]','-b','LineWidth',1.6) hold off view(322.5, 30); text(-2.0, -2.6, 'Xq', 'FontWeight', 'bold', ... 'HorizontalAlignment','center', 'BackgroundColor', 'none');
Этот шаг обычно включает пересечение структуры данных триангуляции, чтобы найти треугольник, который заключает точку запроса. Если вы находите точку, последующие шаги, чтобы вычислить значение зависят от метода интерполяции. Вы могли вычислить самую близкую точку в окружении и использовать значение в той точке (метод интерполяции ближайшего соседа). Вы могли также вычислить взвешенную сумму значений трех вершин треугольника включения (метод линейной интерполяции). Эти методы и их варианты охвачены в текстах и ссылках на интерполяции данных, имеющий разброс.
Хотя рисунок подсвечивает 2D интерполяцию, можно применить этот метод к более высоким размерностям. В более общих чертах, учитывая набор точек X
и соответствующие значения V
, можно создать interpolant формы V = F(X)
. Можно оценить interpolant в точке запроса Xq
, дать Vq = F(Xq)
. Это - однозначная функция; для любой точки запроса Xq
в выпуклой оболочке X
, это произведет уникальное значение Vq
. Выборочные данные приняты, чтобы уважать это свойство для того, чтобы произвести удовлетворительную интерполяцию.
MATLAB® обеспечивает два способа выполнить основанную на триангуляции интерполяцию данных, имеющий разброс:
scatteredInterpolant
класс
griddata
функционируйте поддерживает 2D интерполяцию данных, имеющий разброс. griddatan
функционируйте поддерживает интерполяцию данных, имеющий разброс в N-D; однако, это не практично в размерностях выше, чем 6-D для умеренного к большим наборам точки, из-за экспоненциального роста в памяти, требуемой базовой триангуляцией.
scatteredInterpolant
класс поддерживает интерполяцию данных, имеющий разброс в 2D и трехмерном пространстве. Использование этого класса поощряется, когда это более эффективно и с готовностью адаптируется к более широкой области значений проблем интерполяции.
griddata
и griddatan
функции берут набор точек выборки, X
, соответствующие значения, V
, и точки запроса, Xq
, и возвратите интерполированные значения, Vq
. Синтаксис вызова подобен для каждой функции; первичное различие является 2D / 3-D griddata
функция позволяет вам задать точки в терминах X
Y
X
Y
Z
координаты. Эти две функции интерполируют данные, имеющий разброс в предопределенных местоположениях узла решетки; намерение состоит в том, чтобы произвести данные с координатной сеткой, отсюда имя. Интерполяция является более общей на практике. Вы можете хотеть запросить в произвольных местоположениях в выпуклой оболочке точек.
В этом примере показано, как griddata
функция интерполирует данные, имеющий разброс в наборе узлов решетки и использует эти данные с координатной сеткой, чтобы создать контурный график.
Постройте seamount
набор данных (подводная гора является подводной горой). Набор данных состоит из набора долготы (x
) и широта (y
) местоположения и соответствующий seamount
вертикальные изменения (z
) измеренный в тех координатах.
load seamount plot3(x,y,z,'.','markersize',12) xlabel('Longitude') ylabel('Latitude') zlabel('Depth in Feet') grid on
Используйте meshgrid
создать набор 2D узлов решетки в плоскости широты долготы и затем использовать griddata
интерполировать соответствующую глубину в тех точках.
figure [xi,yi] = meshgrid(210.8:0.01:211.8, -48.5:0.01:-47.9); zi = griddata(x,y,z,xi,yi); surf(xi,yi,zi); xlabel('Longitude') ylabel('Latitude') zlabel('Depth in Feet')
Теперь, когда данные находятся в формате с координатной сеткой, вычислите и постройте контуры.
figure [c,h] = contour(xi,yi,zi); clabel(c,h); xlabel('Longitude') ylabel('Latitude')
Можно также использовать griddata
интерполировать в произвольных местоположениях в выпуклой оболочке набора данных. Например, глубиной в координатах (211.3,-48.2) дают:
zi = griddata(x,y,z, 211.3, -48.2);
Базовая триангуляция вычисляется каждый раз griddata
функция вызвана. Это может повлиять на производительность, если тот же набор данных неоднократно интерполируется с различными точками запроса. scatteredInterpolant
класс, описанный в Интерполяции данных, имеющих разброс, с помощью scatteredInterpolant Класс, более эффективен в этом отношении.
Программное обеспечение MATLAB также обеспечивает griddatan
поддерживать интерполяцию в более высоких размерностях. Синтаксис вызова похож на griddata
.
griddata
функция полезна, когда необходимо интерполировать, чтобы найти значения в наборе предопределенных местоположений узла решетки. На практике проблемы интерполяции являются часто более общими, и scatteredInterpolant
класс обеспечивает большую гибкость. Класс имеет следующие преимущества:
Это производит функцию интерполяции, которая может быть запрошена эффективно. Таким образом, базовая триангуляция создается однажды и снова используется для последующих запросов.
Метод интерполяции может быть изменен независимо от триангуляции.
Значения в точках данных могут быть изменены независимо от триангуляции.
Точки данных могут быть инкрементно добавлены к существующему interpolant, не инициировав полный перерасчет. Точки данных могут также быть удалены и перемещены эффективно, обеспечены, отредактированное число точек мало относительно общего количества точек выборки.
Это обеспечивает функциональность экстраполяции для аппроксимации значений в точках, которые выходят за пределы выпуклой оболочки. Смотрите Данные, имеющий разброс Экстраполирования для получения дополнительной информации.
scatteredInterpolant
обеспечивает следующие методы интерполяции:
'nearest'
— Интерполяция ближайшего соседа, где поверхность интерполяции прерывиста.
'linear'
— Линейная интерполяция (значение по умолчанию), где поверхность интерполяции C0 непрерывный.
'natural'
— Естественно-соседняя интерполяция, где поверхность интерполяции C1 непрерывный кроме в точках выборки.
scatteredInterpolant
класс поддерживает интерполяцию данных, имеющий разброс в 2D и трехмерном пространстве. Можно создать interpolant путем вызова scatteredInterpolant
и передача местоположений точки и соответствующих значений, и опционально методов интерполяции и экстраполяции. Смотрите scatteredInterpolant
страница с описанием для получения дополнительной информации о синтаксисах можно использовать, чтобы создать и оценить scatteredInterpolant
.
В этом примере показано, как использовать scatteredInterpolant
интерполировать рассеянную выборку peaks
функция.
Создайте набор данных, имеющий разброс.
X = -3 + 6.*gallery('uniformdata',[250 2],0);
V = peaks(X(:,1),X(:,2));
Создайте interpolant.
F = scatteredInterpolant(X,V)
F = scatteredInterpolant with properties: Points: [250x2 double] Values: [250x1 double] Method: 'linear' ExtrapolationMethod: 'linear'
Points
свойство представляет координаты точек данных и Values
свойство представляет присваиваемые значения. Method
свойство представляет метод интерполяции, который выполняет интерполяцию. ExtrapolationMethod
свойство представляет метод экстраполяции, используемый, когда точки запроса выходят за пределы выпуклой оболочки.
Можно получить доступ к свойствам F
таким же образом вы получаете доступ к полям struct
. Например, используйте F.Points
исследовать координаты точек данных.
Оцените interpolant.
scatteredInterpolant
обеспечивает преобразованную в нижний индекс оценку interpolant. Это оценено тот же путь как функция. Можно оценить interpolant можно следующим образом. В этом случае значение в местоположении запроса дано Vq
. Можно оценить в точке единого запроса:
Vq = F([1.5 1.25])
Vq = 1.3966
Можно также передать отдельные координаты:
Vq = F(1.5, 1.25)
Vq = 1.3966
Можно оценить в векторе местоположений точки:
Xq = [0.5 0.25; 0.75 0.35; 1.25 0.85]; Vq = F(Xq)
Vq = 3×1
1.0880
1.8127
2.3472
Можно оценить F
в местоположениях узла решетки и графике результат.
[Xq,Yq] = meshgrid(-2.5:0.125:2.5); Vq = F(Xq,Yq); surf(Xq,Yq,Vq); xlabel('X','fontweight','b'), ylabel('Y','fontweight','b'); zlabel('Value - V','fontweight','b'); title('Linear Interpolation Method','fontweight','b');
Измените метод интерполяции.
Можно изменить метод интерполяции на лету. Установите метод на 'nearest'
.
F.Method = 'nearest';
Переоцените и постройте interpolant как прежде.
Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'),ylabel('Y','fontweight','b') zlabel('Value - V','fontweight','b') title('Nearest neighbor Interpolation Method','fontweight','b');
Измените метод интерполяции для естественного соседа, переоцените и постройте результаты.
F.Method = 'natural'; Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'),ylabel('Y','fontweight','b') zlabel('Value - V','fontweight','b') title('Natural neighbor Interpolation Method','fontweight','b');
Замените значения в местоположениях выборочных данных.
Можно изменить значения V
в местоположениях выборочных данных, X
, на лету. Это полезно на практике, когда некоторые проблемы интерполяции могут иметь несколько множеств значений в тех же местоположениях. Например, предположите, что вы хотите интерполировать 3-D скоростное поле, которое задано местоположениями (x
Y
Z
) и соответствующие разбитые на компоненты векторы скорости (Vx
, Vy
, Vz
). Можно интерполировать каждый из скоростных компонентов путем присвоения их свойству значений (V
) в свою очередь. Это имеет важные выигрыши в производительности, потому что это позволяет вам снова использовать тот же interpolant, не подвергаясь издержкам вычисления нового каждый раз.
Следующие шаги показывают, как изменить значения в нашем примере. Вы вычислите значения с помощью выражения, .
V = X(:,1).*exp(-X(:,1).^2-X(:,2).^2); F.Values = V;
Оцените interpolant и постройте результат.
Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'), ylabel('Y','fontweight','b') zlabel('Value - V','fontweight','b') title('Natural neighbor interpolation of v = x.*exp(-x.^2-y.^2)')
Добавьте дополнительные местоположения точки и значения к существующему interpolant.
Это выполняет эффективное обновление в противоположность полному перерасчету с помощью увеличенного набора данных.
При добавлении выборочных данных важно добавить и местоположения точки и соответствующие значения.
При продолжении примера создайте новые точки выборки можно следующим образом:
X = -1.5 + 3.*rand(100,2); V = X(:,1).*exp(-X(:,1).^2-X(:,2).^2);
Добавьте новые точки и соответствующие значения к триангуляции.
F.Points(end+(1:100),:) = X; F.Values(end+(1:100)) = V;
Оцените усовершенствованный interpolant и постройте результат.
Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'), ylabel('Y','fontweight','b'); zlabel('Value - V','fontweight','b');
Удалите данные из interpolant.
Можно инкрементно удалить точки выборочных данных из interpolant. Также можно удалить точки данных и соответствующие значения от interpolant. Это полезно для удаления побочных выбросов.
При удалении выборочных данных важно удалить и местоположение точки и соответствующее значение.
Удалите 25-ю точку.
F.Points(25,:) = []; F.Values(25) = [];
Удалите точки 5 - 15.
F.Points(5:15,:) = []; F.Values(5:15) = [];
Сохраните 150 точек и удалите остальных.
F.Points(150:end,:) = []; F.Values(150:end) = [];
Это создает более грубую поверхность, когда вы оцениваете и строите:
Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'), ylabel('Y','fontweight','b'); zlabel('Value - V','fontweight','b'); title('Interpolation of v = x.*exp(-x.^2-y.^2) with sample points removed')
В этом примере показано, как интерполировать данные, имеющий разброс, когда значение в каждом демонстрационном местоположении является комплексным.
Создайте выборочные данные.
X = -3 + 6 .* gallery('uniformdata',[250 2],0);
V = complex(X(:,1).*X(:,2), X(:,1).^2 + X(:,2).^2);
Создайте interpolant.
F = scatteredInterpolant(X,V);
Создайте сетку точек запроса и оцените interpolant в узлах решетки.
[Xq,Yq] = meshgrid(-2.5:0.125:2.5); Vq = F(Xq,Yq);
Постройте действительный компонент Vq
.
VqReal = real(Vq); figure surf(Xq,Yq,VqReal); xlabel('X'); ylabel('Y'); zlabel('Real Value - V'); title('Real Component of Interpolated Value');
Постройте мнимый компонент Vq
.
VqImag = imag(Vq); figure surf(Xq,Yq,VqImag); xlabel('X'); ylabel('Y'); zlabel('Imaginary Value - V'); title('Imaginary Component of Interpolated Value');
Многие иллюстративные примеры в предыдущих разделах имели дело с интерполяцией наборов точки, которые были произведены на сглаженных поверхностях. Кроме того, точки относительно были расположены равными интервалами. Например, кластеры точек не были разделены относительно большими расстояниями. Кроме того, interpolant был оценен хорошо в выпуклой оболочке местоположений точки.
При контакте с реальными проблемами интерполяции данные могут быть более сложными. Это может прибыть из измерительного оборудования, которое, вероятно, произведет неточные показания или выбросы. Базовые данные не могут варьироваться гладко, значения могут перейти резко от точки до точки. Этот раздел предоставляет вам некоторые инструкции, чтобы идентифицировать и решить проблемы с интерполяцией данных, имеющий разброс.
Необходимо предварительно обработать выборочные данные, которые содержат NaN
значения, чтобы удалить NaN
значения как эти данные не могут способствовать интерполяции. Если NaN
удален, соответствующие значения/координаты данных должны также быть удалены, чтобы гарантировать непротиворечивость. Если NaN
значения присутствуют в выборочных данных, конструктор будет ошибка, когда названо.
Следующий пример иллюстрирует, как удалить NaN
s.
Создайте некоторые данные и замените некоторые записи на NaN
:
x = rand(25,1)*4-2; y = rand(25,1)*4-2; V = x.^2 + y.^2; x(5) = NaN; x(10) = NaN; y(12) = NaN; V(14) = NaN;
F = scatteredInterpolant(x,y,V);
NaN
s и затем создают interpolant:nan_flags = isnan(x) | isnan(y) | isnan(V); x(nan_flags) = []; y(nan_flags) = []; V(nan_flags) = []; F = scatteredInterpolant(x,y,V);
NaN
значения.X = rand(25,2)*4-2; V = X(:,1).^2 + X(:,2).^2; X(5,1) = NaN; X(10,1) = NaN; X(12,2) = NaN; V(14) = NaN;
F = scatteredInterpolant(X,V);
nan_flags = isnan(X(:,1)) | isnan(X(:,2)) | isnan(V); X(nan_flags,:) = []; V(nan_flags) = []; F = scatteredInterpolant(X,V);
griddata
и griddatan
возвратите NaN
значения, когда вы точки запроса вне выпуклой оболочки с помощью 'linear'
или 'natural'
методы. Однако можно ожидать числовые результаты, если вы запросите те же точки с помощью 'nearest'
метод. Это вызвано тем, что самый близкий сосед точки запроса существует и внутри и снаружи выпуклой оболочки.
Если вы хотите вычислить приближенные значения вне выпуклой оболочки, необходимо использовать scatteredInterpolant
. Смотрите Данные, имеющий разброс Экстраполирования для получения дополнительной информации.
Входные данные редко “совершенны”, и вашему приложению придется обработать дублирующиеся местоположения точки данных. Две или больше точки данных в том же местоположении в вашем наборе данных могут иметь различные соответствующие значения. В этом сценарии, scatteredInterpolant
объединяет точки и вычисляет среднее значение соответствующих значений. В этом примере показано, как scatteredInterpolant
выполняет интерполяцию на наборе данных с дублирующимися точками.
Создайте некоторые выборочные данные, которые находятся на плоской поверхности:
x = rand(100,1)*6-3; y = rand(100,1)*6-3; V = x + y;
Введите дублирующееся местоположение точки путем присвоения координат точки 50 к точке 100:
x(50) = x(100); y(50) = y(100);
Создайте interpolant. Заметьте тот F
содержит 99 уникальных точек данных:
F = scatteredInterpolant(x,y,V)
Проверяйте значение, сопоставленное с 50-й точкой:
F.Values(50)
Это значение является средним значением исходного 50-го и 100-го значения, когда эти две точки данных имеют то же расположение:
(V(50)+V(100))/2
В некоторых проблемах интерполяции несколько наборов демонстрационных значений могут соответствовать тем же местоположениям. Например, множество значений может быть зарегистрировано в тех же местоположениях в различные периоды вовремя. Для КПД можно интерполировать один набор показаний и затем заменить значения, чтобы интерполировать следующий набор.
Всегда используйте сопоставимое управление данными когда заменяющий значения в присутствии дублирующихся местоположений точки. Предположим, что у вас есть два множества значений, сопоставленные с 100 местами точки данных, и требуется интерполировать каждый набор в свою очередь, заменяя значения.
Рассмотрите два множества значений:
V1 = x + 4*y; V2 = 3*x + 5*y
Создайте interpolant. scatteredInterpolant
объединяет дублирующиеся местоположения, и interpolant содержит 99 уникальных точек выборки:
F = scatteredInterpolant(x,y,V1)
F.Values = V2
средние значения, присваивающие 100 значений 99 выборкам. Контекст предыдущей операции слияния потерян; количество демонстрационных местоположений не будет совпадать с количеством демонстрационных значений. interpolant потребует, чтобы несоответствие было разрешено, чтобы поддержать запросы.В этом более комплексном сценарии необходимо удалить копии до создания и редактирования interpolant. Используйте unique
функционируйте, чтобы найти индексы уникальных точек. unique
может также выходные аргументы, которые идентифицируют индексы дублирующихся точек.
[~, I, ~] = unique([x y],'first','rows'); I = sort(I); x = x(I); y = y(I); V1 = V1(I); V2 = V2(I); F = scatteredInterpolant(x,y,V1)
F
интерполировать набор First Data. Затем можно заменить значения, чтобы интерполировать второй набор данных.F.Values = V2;
scatteredInterpolant
позволяет вам редактировать свойства, представляющие демонстрационные значения (F.Values
) и метод интерполяции (F.Method
). Поскольку эти свойства независимы от базовой триангуляции, редактирования могут быть выполнены эффективно. Однако как работа с большим массивом, необходимо заботиться, чтобы не случайно создать ненужные копии при редактировании данных. Копии сделаны, когда больше чем одна ссылка на переменную массив и тот массив затем редактируется.
Копия не сделана в следующем:
A1 = magic(4) A1(4,4) = 11
A1
и A2
больше не может совместно использовать те же данные, если редактирование сделано:A1 = magic(4) A2 = A1 A1(4,4) = 32
scatteredInterpolant
содержит данные, и они ведут себя как массив — на языке MATLAB, они называются объектом значения. Язык MATLAB спроектирован, чтобы дать оптимальную производительность, когда ваше приложение структурировано в функции, которые находятся в файлах. Прототипирование в командной строке не может дать к тому же уровню производительности.Следующий пример демонстрирует это поведение, но нужно отметить, что увеличение производительности в этом примере не делает вывод к другим функциям в MATLAB.
Этот код не производит оптимальную производительность:
x = rand(1000000,1)*4-2; y = rand(1000000,1)*4-2; z = x.*exp(-x.^2-y.^2); tic; F = scatteredInterpolant(x,y,z); toc tic; F.Values = 2*z; toc
Когда MATLAB выполняет программу, которая состоит из функций, которые находятся в файлах, он имеет полное изображение подписания кода; это позволяет MATLAB оптимизировать для производительности. При вводе код в командной строке, MATLAB не может ожидать то, что вы собираетесь ввести затем, таким образом, это не может выполнить тот же уровень оптимизации. Разработка приложений посредством создания допускающих повторное использование функций является общей практикой и методическими рекомендациями, и MATLAB оптимизирует производительность в этой установке.
Триангуляция Делоне хорошо подходит для проблем интерполяции данных, имеющий разброс, потому что она имеет благоприятные геометрические свойства, которые приводят к хорошим результатам. Эти свойства:
Отклонение треугольников/тетраэдров, имеющих форму щепки в пользу большего количества единиц равносторонней формы.
Пустое свойство описанного круга, которое неявно задает отношение ближайшего соседа между точками.
Пустое свойство описанного круга гарантирует, что интерполированные значения под влиянием точек выборки в окружении местоположения запроса. Несмотря на эти качества, в некоторых ситуациях распределение точек данных может привести к плохим результатам, и это обычно происходит около выпуклой оболочки набора выборочных данных. Когда интерполяция приводит к неожиданным результатам, график выборочных данных и базовой триангуляции может часто обеспечивать понимание проблемы.
Этот пример показывает интерполированную поверхность, которая ухудшается около контура.
Создайте набор выборочных данных, который покажет проблемы около контура.
t = 0.4*pi:0.02:0.6*pi; x1 = cos(t)'; y1 = sin(t)'-1.02; x2 = x1; y2 = y1*(-1); x3 = linspace(-0.3,0.3,16)'; y3 = zeros(16,1); x = [x1;x2;x3]; y = [y1;y2;y3];
Теперь снимите эти точки выборки на поверхность и интерполируйте поверхность.
z = x.^2 + y.^2; F = scatteredInterpolant(x,y,z); [xi,yi] = meshgrid(-0.3:.02:0.3, -0.0688:0.01:0.0688); zi = F(xi,yi); mesh(xi,yi,zi) xlabel('X','fontweight','b'), ylabel('Y','fontweight','b') zlabel('Value - V','fontweight','b') title('Interpolated Surface');
Фактическая поверхность:
zi = xi.^2 + yi.^2;
figure
mesh(xi,yi,zi)
title('Actual Surface')
Чтобы изучить, почему поверхность интерполяции ухудшается около контура, полезно посмотреть на базовую триангуляцию:
dt = delaunayTriangulation(x,y); figure plot(x,y,'*r') axis equal hold on triplot(dt) plot(x1,y1,'-r') plot(x2,y2,'-r') title('Triangulation Used to Create the Interpolant') hold off
Треугольники в красных контурах относительно хорошо формируются; они создаются из точек, которые находятся в непосредственной близости, и интерполяция работает хорошо в этой области. Вне красного контура треугольники подобны щепке и соединяют точки, которые являются удаленными друг от друга. Нет достаточной выборки, чтобы точно получить поверхность, таким образом, не удивительно, что результаты в этих областях плохи. В 3-D, визуальном осмотре триангуляции становится немного более хитрым, но рассмотрение распределения точки может часто помогать проиллюстрировать потенциальные проблемы.
MATLAB® 4 griddata
метод, 'v4'
, не основано на триангуляции и не затронут ухудшением поверхности интерполяции около контура.
[xi,yi] = meshgrid(-0.3:.02:0.3, -0.0688:0.01:0.0688); zi = griddata(x,y,z,xi,yi,'v4'); mesh(xi,yi,zi) xlabel('X','fontweight','b'), ylabel('Y','fontweight','b') zlabel('Value - V','fontweight','b') title('Interpolated surface from griddata with v4 method','fontweight','b');
Интерполированная поверхность от griddata
использование 'v4'
метод соответствует ожидаемой фактической поверхности.