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 или 3-D пробеле. Каждая строка 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

Для просмотра документации необходимо авторизоваться на сайте