scatteredInterpolant

Интерполируйте 2D или 3-D данные, имеющий разброс

Описание

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

Используйте griddedInterpolant, чтобы выполнить интерполяцию с данными с координатной сеткой.

Создание

Синтаксис

F = scatteredInterpolant
F = scatteredInterpolant(x,y,v)
F = scatteredInterpolant(x,y,z,v)
F = scatteredInterpolant(P,v)
F = scatteredInterpolant(___,Method)
F = scatteredInterpolant(___,Method,ExtrapolationMethod)

Описание

F = scatteredInterpolant создает пустые данные, имеющий разброс interpolant объект.

пример

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

пример

F = scatteredInterpolant(x,y,z,v) создает 3-D interpolant формы 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
самый близкий

Самая близкая соседняя интерполяция

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

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

C1 (кроме в точках выборки)

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

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

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

самый близкий

Самая близкая соседняя экстраполяция. Этот метод оценивает к значению самого близкого соседа на контуре. Значение по умолчанию, когда Method является 'nearest'.

'none'

Никакая экстраполяция. Любые запросы вне выпуклой оболочки Points возвращают NaN.

Свойства

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

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

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

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

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

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

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

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

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

Используйте scatteredInterpolant, чтобы создать interpolant, 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}) задают точки запроса как векторы сетки. Используйте этот синтаксис, чтобы сохранить память когда это необходимо, чтобы запросить большую сетку точек.

Примеры

свернуть все

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

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));

Создайте interpolant.

F = scatteredInterpolant(x,y,v);

Оцените interpolant в местоположениях запроса (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')

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

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

P = -2.5 + 5*gallery('uniformdata',[200 3],0);
v = sin(P(:,1).^2 + P(:,2).^2 + P(:,3).^2)./(P(:,1).^2+P(:,2).^2+P(:,3).^2);

Создайте interpolant.

F = scatteredInterpolant(P,v);

Оцените interpolant в местоположениях запроса (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)

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

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

x = -2.5 + 5*gallery('uniformdata',[50 1],0);
y = -2.5 + 5*gallery('uniformdata',[50 1],1);
v = x.*exp(-x.^2-y.^2);

Создайте interpolant.

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

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

Оцените interpolant в (1.40,1.90).

F(1.40,1.90)
ans = 0.0029

Измените interpolant демонстрационные значения и переоцените interpolant в той же точке.

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

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

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

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

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

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')

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')

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
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')

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

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

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

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

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

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

Оцените interpolant вне выпуклой оболочки.

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

Отключите экстраполяцию и оцените 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)
    
  • Чтобы изменить демонстрационные значения интерполяции или метод интерполяции, более эффективно обновить свойства interpolant объекта F, чем это должно создать новый объект scatteredInterpolant. Когда вы обновляете Values или Method, базовая Триангуляция Делоне входных данных не изменяется, таким образом, можно вычислить новые результаты быстро.

Алгоритмы

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

Ссылки

[1] Amidror, Айзек. “Методы интерполяции данных, имеющий разброс для электронных систем обработки изображений: обзор”. Журнал Электронной Обработки изображений. Издание 11, № 2, апрель 2002, стр 157–176.

Смотрите также

| | | |

Введенный в R2013a

Была ли эта тема полезной?