Данные , имеющие разбросы состоят из набора точек 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);
Создайте триангуляцию Делоне, поднимите вершины и вычислите интерполяцию в точке запроса 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');
Этот шаг обычно включает в себя прохождение структуры данных триангуляции, чтобы найти треугольник, который окружает точку запроса. Когда вы находите точку, последующие шаги для вычисления значения зависят от метода интерполяции. Можно вычислить ближайшую точку в районе и использовать значение в этой точке (метод интерполяции по ближайшему соседу). Можно также вычислить взвешенную сумму значений трех вершин заключающего треугольника (метод линейной интерполяции). Эти методы и их варианты описаны в текстах и ссылках на данный , имеющий разброс.
Хотя рисунок подсвечивает 2-D интерполяцию, можно применить этот метод к более высоким размерностям. В более общих терминах, учитывая набор точек X
и соответствующие значения V
можно создать интерполяцию формы V = F(X)
. Интерполяцию можно вычислить в точке запроса Xq
, чтобы дать Vq = F(Xq)
. Это - однозначная функция; для любой точки запроса Xq
в выпуклую оболочку X
это даст уникальное значение Vq
. Принято, что выборочные данные уважают это свойство в порядок получения удовлетворительной интерполяции.
MATLAB® предоставляет два способа выполнения интерполяции данных , имеющих разбросов на основе триангуляции:
The scatteredInterpolant
класс
griddata
функция поддерживает 2-D интерполяцию данных , имеющих разбросов. griddatan
функция поддерживает данный , имеющий разброс в N-D; однако это нецелесообразно по размерностям выше 6-D для умеренных и больших наборов точек из-за экспоненциального роста памяти, требуемого базовой триангуляцией.
The scatteredInterpolant
класс поддерживает данный , имеющий разброс в 2-D и трехмерном пространстве. Использование этого класса поощряется, поскольку он более эффективен и легко адаптируется к более широкой области значений задач интерполяции.
griddata
и griddatan
функции берут набор точек выборки, X
, соответствующие значения, V
, и точки запроса, Xq
, и возвращает интерполированные значения, Vq
. Синтаксис вызова аналогичен для каждой функции; основным отличием является 2-D/ 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
создать набор 2-D точек сетки в плоскости долготы и широты и затем использовать 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
вызывается функция. Это может повлиять на эффективность, если один и тот же набор данных интерполируется неоднократно с различными точками запроса. The scatteredInterpolant
класс, описанный в Интерполяции данных, имеющих разброс, Использование класса scatteredInterpolant более эффективно в этом отношении.
MATLAB также обеспечивает griddatan
для поддержки интерполяции в более высоких размерностях. Синтаксис вызова аналогичен griddata
.
griddata
функция полезна, когда необходимо выполнить интерполяцию, чтобы найти значения в наборе предопределенных местоположений точек сетки. На практике проблемы интерполяции часто являются более общими, и scatteredInterpolant
класс обеспечивает большую гибкость. Класс имеет следующие преимущества:
Это создает интерполяционную функцию, которая может быть эффективно запрошена. То есть базовая триангуляция создается один раз и повторно используется для последующих запросов.
Метод интерполяции может быть изменен независимо от триангуляции.
Значения в точках данных могут быть изменены независимо от триангуляции.
Точки данных могут быть постепенно добавлены к существующей интерполяции, не вызывая полного пересчета. Точки данных также могут быть удалены и эффективно перемещены, при условии, что отредактированное число точек мало относительно общего количества точек выборки.
Он обеспечивает функциональность экстраполяции для аппроксимации значений в точках, которые падают за пределы выпуклой оболочки. Для получения дополнительной информации см. раздел Экстраполяция данных , имеющих разбросов.
scatteredInterpolant
предоставляет следующие методы интерполяции:
'nearest'
- интерполяция по ближайшему соседу, где интерполирующая поверхность является прерывистой.
'linear'
- Линейная интерполяция (по умолчанию), где интерполирующая поверхность C0 непрерывна.
'natural'
- Интерполяция по естественному соседу, где интерполирующая поверхность C1 непрерывна, кроме как в точках выборки.
The scatteredInterpolant
класс поддерживает данный , имеющий разброс в 2-D и трехмерном пространстве. Вы можете создать интерполяцию, позвонив scatteredInterpolant
и передачи местоположений точек и соответствующих значений, и, опционально, методов интерполяции и экстраполяции. Смотрите scatteredInterpolant
Страница с описанием для получения дополнительной информации о синтаксисах, которые можно использовать для создания и оценки scatteredInterpolant
.
В этом примере показано, как использовать scatteredInterpolant
для интерполяции рассеянной выборки peaks
функция.
Создайте данный , имеющий разброс набор.
rng default;
X = -3 + 6.*rand([250 2]);
V = peaks(X(:,1),X(:,2));
Создайте интерполяцию.
F = scatteredInterpolant(X,V)
F = scatteredInterpolant with properties: Points: [250x2 double] Values: [250x1 double] Method: 'linear' ExtrapolationMethod: 'linear'
The Points
свойство представляет координаты точек данных и Values
свойство представляет связанные значения. The Method
свойство представляет метод интерполяции, который выполняет интерполяцию. The ExtrapolationMethod
свойство представляет метод экстраполяции, используемый, когда точки запроса оказываются вне выпуклой оболочки.
Вы можете получить доступ к свойствам F
таким же образом вы получаете доступ к полям struct
. Для примера используйте F.Points
для исследования координат точек данных.
Оцените интерполяцию.
scatteredInterpolant
обеспечивает подписанную оценку интерполяции. Он оценивается так же, как функция. Интерполяцию можно вычислить следующим образом. В этом случае значение в местоположении запроса задается как Vq
. Вычислить можно в одной точке запроса:
Vq = F([1.5 1.25])
Vq = 1.4838
Можно также передать отдельные координаты:
Vq = F(1.5, 1.25)
Vq = 1.4838
Вычислить можно в векторе местоположений точек:
Xq = [0.5 0.25; 0.75 0.35; 1.25 0.85]; Vq = F(Xq)
Vq = 3×1
0.4057
1.2199
2.1639
Можно оценить 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';
Переоцените и постройте график интерполяции как и прежде.
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
). Можно интерполировать каждый из компонентов скорости, присвоив их свойству values (V
) в свою очередь. Это имеет важные преимущества эффективности, потому что позволяет повторно использовать ту же интерполяцию, не неся накладных расходов на вычисление новой каждый раз.
Следующие шаги показывают, как изменить значения в нашем примере. Значения будут вычисляться с помощью выражения, .
V = X(:,1).*exp(-X(:,1).^2-X(:,2).^2); F.Values = V;
Оцените интерполяцию и постройте график результата.
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)')
Добавьте дополнительные местоположения и значения точек к существующей интерполяции.
Это выполняет эффективное обновление в отличие от полного пересчета с использованием дополненного набора данных.
При добавлении выборочных данных важно добавить и местоположения точек, и соответствующие значения.
Продолжая пример, создайте новые точки выборки следующим образом:
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;
Оцените уточненную интерполяцию и постройте график результата.
Vq = F(Xq,Yq); figure surf(Xq,Yq,Vq); xlabel('X','fontweight','b'), ylabel('Y','fontweight','b'); zlabel('Value - V','fontweight','b');
Удалите данные из интерполяции.
Можно пошагово удалить выборочные точки выборочных данных из интерполяции. Можно также удалить точки данных и соответствующие значения из интерполяции. Это полезно для удаления ложных выбросов.
При удалении выборочных данных важно удалить и расположение точки, и соответствующее значение.
Удалите 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')
Этот пример показывает, как интерполировать данные , имеющие разбросы, когда значение в каждом местоположении выборки комплексно.
Создайте выборочные данные.
rng('default')
X = -3 + 6*rand([250 2]);
V = complex(X(:,1).*X(:,2), X(:,1).^2 + X(:,2).^2);
Создайте интерполяцию.
F = scatteredInterpolant(X,V);
Создайте сетку точек запроса и вычислите интерполяцию в точках сетки.
[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');
Многие иллюстративные примеры в предыдущих разделах касались интерполяции наборов точек, которые были отобраны на гладких поверхностях. В сложение точки были относительно равномерно разнесены. Например, кластеры точек не были разделены относительно большими расстояниями. В сложение интерполяцию оценивали хорошо в выпуклую оболочку из точечных местоположений.
При решении реальных проблем интерполяции данные могут оказаться более сложными. Это может быть из измерительного оборудования, которое, вероятно, даст неточные показания или выбросы. Базовые данные могут изменяться не гладко, значения могут резко прыгать из точки в точку. В этом разделе приведены некоторые инструкции по идентификации и решению проблем с данным , имеющим разбросом.
Необходимо предварительно обработать выборочные данные, которые содержат NaN
значения для удаления NaN
значения, поскольку эти данные не могут способствовать интерполяции. Если a NaN
удаляется, соответствующие значения данных также должны быть удалены для обеспечения согласованности. Если NaN
значения присутствуют в выборочных данных, конструктор при вызове будет ошибаться.
Следующий пример иллюстрирует, как удалить NaN
с.
Создайте некоторые данные и замените некоторые записи на 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 и затем создайте интерполяцию: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);
Создайте интерполяцию. Заметьте, что 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
Создайте интерполяцию. scatteredInterpolant
объединяет повторяющиеся местоположения, и интерполяция содержит 99 уникальных точки выборки:
F = scatteredInterpolant(x,y,V1)
F.Values = V2
означает присвоение 100 значений 99 выборкам. Контекст предыдущей операции слияния потерян; количество расположений выборок не совпадает с количеством значений выборок. Интерполяция потребует устранения несогласованности для поддержки запросов.В этом более сложном сценарии необходимо удалить дубликаты перед созданием и редактированием интерполяции. Используйте 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
для интерполяции первого набора данных. Затем можно заменить значения, чтобы интерполировать второй набор данных.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'
способ соответствует ожидаемой фактической поверхности.