exponenta event banner

scatteredInterpolant

Интерполяция 2-D или 3-D разрозненных данных

Описание

Использовать scatteredInterpolant для выполнения интерполяции 2-D или 3-D набора данных разрозненных данных. scatteredInterpolant возвращает интерполятор F для данного набора данных. Вы можете оценить F в наборе точек запроса, таких как (xq,yq) в 2-D, для получения интерполированных значений vq = F(xq,yq).

Использовать griddedInterpolant для выполнения интерполяции с привязанными к сетке данными.

Создание

Описание

F = scatteredInterpolant создает пустой объект интерполяции рассеянных данных.

пример

F = scatteredInterpolant(x,y,v) создает интерполятор, который подходит к поверхности формы v = F (x, y). Векторыx и y укажите (x,y) координаты точек выборки. v - вектор, содержащий значения выборки, связанные с точками; (x,y).

пример

F = scatteredInterpolant(x,y,z,v) создает 3-D интерполятор вида v = F (x, y, z).

пример

F = scatteredInterpolant(P,v) задает координаты точек выборки в виде массива. Строки P содержат координаты (x, y) или (x, y, z) для значений в v.

пример

F = scatteredInterpolant(___,Method) задает метод интерполяции: 'nearest', 'linear', или 'natural'. Определить Method в качестве последнего входного аргумента в любом из первых трех синтаксисов.

пример

F = scatteredInterpolant(___,Method,ExtrapolationMethod) определяет методы интерполяции и экстраполяции. Проход Method и ExtrapolationMethod вместе в качестве последних двух входных аргументов в любом из первых трех синтаксисов.

  • Method могут быть: 'nearest', 'linear', или 'natural'.

  • ExtrapolationMethod могут быть: 'nearest', 'linear', или 'none'.

Входные аргументы

развернуть все

Точки выборки, указанные как векторы того же размера, что и v. Точки выборки должны быть уникальными. Однако, если точки выборки содержат дубликаты, scatteredInterpolant отображает предупреждение и объединяет дубликаты в одну точку.

Типы данных: double

Массив точек выборки, указанный как mоколо-n матрица, где m - количество точек и n - размер пространства, в котором находятся точки. Каждая строка P содержит координаты (x, y) или (x, y, z) точки выборки. Точки выборки должны быть уникальными. Однако, если точки выборки содержат дубликаты, scatteredInterpolant отображает предупреждение и объединяет дубликаты в одну точку.

Типы данных: double

Значения выборки, заданные как вектор, определяющий значения функции в точках выборки, v = F (x, y, z).

Типы данных: double

Метод интерполяции, указанный в качестве одной из этих опций.

МетодОписаниеНепрерывность
'linear' (по умолчанию)

Линейная интерполяция

C0
'nearest'

Интерполяция ближайшего соседа

Прерывистый
'natural'

Интерполяция естественного соседа

C1 (за исключением точек выборки)

Метод экстраполяции, указанный в качестве одной из этих опций.

ExtrapolationMethodОписание
'linear'

Линейная экстраполяция на основе граничных градиентов. По умолчанию, когда Method является 'linear' или 'natural'.

'nearest'

Экстраполяция ближайшего соседа. Этот метод вычисляет значение ближайшего соседа на границе. По умолчанию, когда Method является 'nearest'.

'none'

Экстраполяция отсутствует. Любые запросы за пределами выпуклого корпуса Points вернуть NaN.

Свойства

развернуть все

Выборочные точки, указанные как матрица. Размер матрицы: mоколо-2 или mоколо-3 представлять m точки в 2-D или 3-D пространстве. Каждая строка Points содержит координаты (x, y) или (x, y, z) уникальной точки выборки. Строки в Points соответствуют значениям функций в Values.

Типы данных: double

Значения функций в точках выборки, заданные как вектор значений, связанных с каждой точкой в Points.

Типы данных: double

Метод интерполяции, указанный как 'linear','nearest' , или 'natural'. Посмотрите Method для описания этих методов.

Метод экстраполяции, указанный как 'nearest', 'linear', или 'none'. Посмотрите ExtrapolationMethod для описания этих методов.

Типы данных: double

Использование

Использовать scatteredInterpolant для создания интерполятора, F. Затем можно оценить F в конкретных точках с использованием любого из следующих синтаксисов:

Vq = F(Pq)
Vq = F(Xq,Yq)
Vq = F(Xq,Yq,Zq)
Vq = F({xq,yq})
Vq = F({xq,yq,zq})

  • Vq = F(Pq) указывает точки запроса в матрице Pq. Каждая строка в Pq содержит координаты точки запроса.

  • Vq = F(Xq,Yq) и Vq = F(Xq,Yq,Zq) укажите точки запроса как две или три матрицы одинакового размера.

  • Vq = F({xq,yq}) и Vq = F({xq,yq,zq}) укажите точки запроса как векторы сетки. Этот синтаксис используется для экономии памяти при запросе большой сетки точек.

Примеры

свернуть все

Определите некоторые выборочные точки и рассчитайте значение тригонометрической функции в этих местах. Эти точки являются выборочными значениями для интерполятора.

t = linspace(3/4*pi,2*pi,50)';
x = [3*cos(t); 2*cos(t); 0.7*cos(t)];
y = [3*sin(t); 2*sin(t); 0.7*sin(t)];
v = repelem([-0.5; 1.5; 2],length(t));

Создайте интерполятор.

F = scatteredInterpolant(x,y,v);

Вычислите интерполятор в местах запроса (xq,yq).

tq = linspace(3/4*pi+0.2,2*pi-0.2,40)';
xq = [2.8*cos(tq); 1.7*cos(tq); cos(tq)];
yq = [2.8*sin(tq); 1.7*sin(tq); sin(tq)];
vq = F(xq,yq);

Постройте график результата.

plot3(x,y,v,'.',xq,yq,vq,'.'), grid on
title('Linear Interpolation')
xlabel('x'), ylabel('y'), zlabel('Values')
legend('Sample data','Interpolated query data','Location','Best')

Figure contains an axes. The axes with title Linear Interpolation contains 2 objects of type line. These objects represent Sample data, Interpolated query data.

Создайте интерполятор для набора точек рассеянной выборки, затем вычислите интерполятор в наборе точек 3-D запроса.

Определите 200 случайных точек и выполните выборку тригонометрической функции. Эти точки являются выборочными значениями для интерполятора.

rng default;
P = -2.5 + 5*rand([200 3]);
v = sin(P(:,1).^2 + P(:,2).^2 + P(:,3).^2)./(P(:,1).^2+P(:,2).^2+P(:,3).^2);

Создайте интерполятор.

F = scatteredInterpolant(P,v);

Вычислите интерполятор в местах запроса (xq,yq,zq).

[xq,yq,zq] = meshgrid(-2:0.25:2);
vq = F(xq,yq,zq);

Печать фрагментов результата.

xslice = [-.5,1,2]; 
yslice = [0,2]; 
zslice = [-2,0];
slice(xq,yq,zq,vq,xslice,yslice,zslice)

Figure contains an axes. The axes contains 7 objects of type surface.

Замените элементы в Values если требуется изменить значения в точках выборки. При вычислении нового интерполятора получаются немедленные результаты, поскольку исходная триангуляция не изменяется.

Создайте 50 случайных точек и выполните выборку экспоненциальной функции. Эти точки являются выборочными значениями для интерполятора.

rng('default')
x = -2.5 + 5*rand([50 1]);
y = -2.5 + 5*rand([50 1]);
v = x.*exp(-x.^2-y.^2);

Создайте интерполятор.

F = scatteredInterpolant(x,y,v)
F = 
  scatteredInterpolant with properties:

                 Points: [50x2 double]
                 Values: [50x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

Оценка интерполятора в (1.40,1.90).

F(1.40,1.90)
ans = 0.0069

Измените значения интерполяционной выборки и повторно оцените интерполяцию в той же точке.

vnew = x.^2 + y.^2;
F.Values = vnew;
F(1.40,1.90)
ans = 5.6491

Использовать groupsummary для устранения дубликатов точек выборки и контроля того, как они объединяются перед вызовом scatteredInterpolant.

Создайте матрицу точек выборки 200 на 3. Добавление повторяющихся точек в последних пяти строках.

P = -2.5 + 5*rand(200,3);
P(197:200,:) = repmat(P(196,:),4,1);

Создайте вектор случайных значений в точках выборки.

V = rand(size(P,1),1);

При попытке использования scatteredInterpolant при дублировании точек выборки он выдает предупреждение и усредняет соответствующие значения в V для создания единой уникальной точки. Тем не менее, вы можете использовать groupsummary для устранения повторяющихся точек перед созданием интерполятора. Это особенно полезно, если требуется объединить повторяющиеся точки с помощью метода, отличного от усреднения.

Использовать groupsummary для исключения повторяющихся точек выборки и сохранения максимального значения в V в точке дублирования. Укажите матрицу точек выборки в качестве переменной группировки и соответствующие значения в качестве данных.

[V_unique,P_unique] = groupsummary(V,P,@max);

Поскольку переменная группирования имеет три столбца, groupsummary возвращает уникальные группы P_unique в виде массива ячеек. Преобразуйте массив ячеек обратно в матрицу.

P_unique = [P_unique{:}];

Создайте интерполятор. Поскольку точки выборки теперь уникальны, scatteredInterpolant не выдает предупреждение.

I = scatteredInterpolant(P_unique,V_unique);

Сравнение результатов нескольких различных алгоритмов интерполяции, предлагаемых scatteredInterpolant.

Создайте набор данных выборки из 50 точек с разбросом. Количество точек искусственно мало для выделения различий между методами интерполяции.

x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);
v = sin(x).^4 .* cos(y);

Создайте интерполятор и сетку точек запроса.

F = scatteredInterpolant(x,y,v);
[xq,yq] = meshgrid(-3:0.1:3);

Постройте график результатов с помощью 'nearest', 'linear', и 'natural' методы. При каждом изменении метода интерполяции необходимо запрашивать интерполятор для получения обновленных результатов.

F.Method = 'nearest';
vq1 = F(xq,yq);
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq1)
title('Nearest Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

Figure contains an axes. The axes with title Nearest Neighbor contains 2 objects of type line, surface. These objects represent Sample Points, Interpolated Surface.

F.Method = 'linear';
vq2 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq2)
title('Linear')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

Figure contains an axes. The axes with title Linear contains 2 objects of type line, surface. These objects represent Sample Points, Interpolated Surface.

F.Method = 'natural';
vq3 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq3)
title('Natural Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

Figure contains an axes. The axes with title Natural Neighbor contains 2 objects of type line, surface. These objects represent Sample Points, Interpolated Surface.

Постройте график точного решения.

figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,sin(xq).^4 .* cos(yq))
title('Exact Solution')
legend('Sample Points','Exact Surface','Location','NorthWest')

Figure contains an axes. The axes with title Exact Solution contains 2 objects of type line, surface. These objects represent Sample Points, Exact Surface.

Запрос интерполятора в одной точке за пределами выпуклого корпуса с использованием экстраполяции ближайшего соседа.

Определите матрицу из 200 случайных точек и выполните выборку экспоненциальной функции. Эти точки являются выборочными значениями для интерполятора.

rng('default')
P = -2.5 + 5*rand([200 2]);
x = P(:,1);
y = P(:,2);
v = x.*exp(-x.^2-y.^2);

Создайте интерполятор, задав линейную интерполяцию и экстраполяцию ближайшего соседа.

F = scatteredInterpolant(P,v,'linear','nearest')
F = 
  scatteredInterpolant with properties:

                 Points: [200x2 double]
                 Values: [200x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'nearest'

Оцените интерполяцию снаружи выпуклого корпуса.

vq = F(3.0,-1.5)
vq = 0.0029

Отключить экстраполяцию и оценку F в той же точке.

F.ExtrapolationMethod = 'none';
vq = F(3.0,-1.5)
vq = NaN

Подробнее

развернуть все

Совет

  • Быстрее оценить scatteredInterpolant объект F во многих различных наборах точек запроса, чем требуется для раздельного вычисления интерполяций с использованием функций griddata или griddatan. Например:

    % Fast to create interpolant F and evaluate multiple times
    F = scatteredInterpolant(X,Y,V)
    v1 = F(Xq1,Yq1)
    v2 = F(Xq2,Yq2)
    
    % Slower to compute interpolations separately using griddata
    v1 = griddata(X,Y,V,Xq1,Yq1)
    v2 = griddata(X,Y,V,Xq2,Yq2)
    
  • Чтобы изменить значения выборки интерполяции или метод интерполяции, более эффективно обновить свойства объекта интерполяции. F чем это для создания нового scatteredInterpolant объект. При обновлении Values или Method, базовая триангуляция Делоне входных данных не изменяется, поэтому можно быстро вычислить новые результаты.

  • Интерполяция разрозненных данных с помощью scatteredInterpolant использует триангуляцию Делоне данных, так что может быть чувствительным к проблемам масштабирования в точках выборки x, y, z, или P. Когда это происходит, можно использовать normalize для масштабирования данных и улучшения результатов. Дополнительные сведения см. в разделе Нормализация данных с различными величинами.

Алгоритмы

scatteredInterpolant использует триангуляцию Делоне точек рассеянной выборки для выполнения интерполяции [1].

Ссылки

[1] Амидрор, Исаак. «Методы интерполяции разрозненных данных для электронных систем визуализации: опрос». Журнал электронных изображений. Том 11, № 2, апрель 2002 г., стр. 157-176.

Представлен в R2013a