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-by- 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-by- 2 или m-by- 3 для представления m точки в 2-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' методы. При каждом изменении метода интерполяции необходимо запросить interpolant, чтобы получить обновленные результаты.

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