scatteredInterpolant

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

Описание

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

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

Создание

Описание

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- 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 точки в 2D или трехмерном пространстве. Каждая строка Points содержит (x, y) или (x, y, z) координаты уникальной точки выборки. Строки в Points соответствуйте значениям функции в Values.

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

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

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

Метод интерполяции в виде 'linear'самый близкий , или '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 в местоположениях запроса (xqyq ).

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 в местоположениях запроса (xqyq , 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 использует Триангуляцию Делоне данных, так может быть чувствительно к масштабированию проблем в точках выборки xYZ, или P. Когда это происходит, можно использовать normalize перемасштабировать данные и улучшить результаты. Смотрите Нормируют Данные с Отличающимися Величинами для получения дополнительной информации.

Алгоритмы

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

Ссылки

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

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

| | | |

Введенный в R2013a