exponenta event banner

griddedInterpolant

Интерполяция данных с привязкой к сетке

Описание

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

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

Создание

Описание

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

пример

F = griddedInterpolant(x,v) создает 1-D интерполятор из вектора точек выборки x и соответствующие значения v.

пример

F = griddedInterpolant(X1,X2,...,Xn,V) создает интерполятор 2-D, 3-D или N-D с использованием полной сетки точек выборки, переданных как набор n-мерные массивы X1,X2,...,Xn. V массив содержит значения образцов, связанные с расположениями точек в X1,X2,...,Xn. Каждый из массивов X1,X2,...,Xn должен быть того же размера, что и V.

пример

F = griddedInterpolant(V) использует сетку по умолчанию для создания интерполятора. При использовании этого синтаксиса griddedInterpolant определяет сетку как набор точек, интервал между которыми равен 1 и диапазон составляет [1, size(V,i)] в i-е измерение. Используйте этот синтаксис, когда требуется сохранить память и не беспокоитесь об абсолютных расстояниях между точками.

пример

F = griddedInterpolant(gridVecs,V) задает массив ячеек gridVecs который содержит n векторы сетки для описания n- размерная сетка точек выборки. Этот синтаксис используется при необходимости использования определенной сетки и экономии памяти.

пример

F = griddedInterpolant(___,Method) задает метод интерполяции: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'makima', или 'spline'. Можно указать Method в качестве последнего входного аргумента в любом из предыдущих синтаксисов.

пример

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

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

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

Выборочные точки, указанные как вектор. x и v должен быть одинакового размера. Выборочные точки в x должен быть уникальным.

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

Выборочные значения, указанные как вектор, матрица или многомерный массив. Элементы v являются значениями, которые соответствуют точкам выборки в x.

  • Для интерполяции с использованием одного набора значений: x и v должны быть векторами одинаковой длины.

  • Для интерполяции с использованием нескольких наборов значений v может быть массивом с дополнительными размерами по сравнению с x. Размер первого измерения v должно соответствовать количеству точек выборки в xи каждый столбец в v определяет отдельный набор значений 1-D. Например, если x является вектором столбца с 10 элементами, можно указать v в виде матрицы 10 на 4 для интерполяции с использованием четырех различных наборов значений.

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

Образцы точек в форме полной сетки, указанные как отдельные n-мерные массивы. Точки выборки должны быть уникальными и отсортированными. Можно создать массивы X1,X2,...,Xn с использованием ndgrid функция. Эти массивы имеют одинаковый размер, и каждый из них имеет тот же размер, что и V.

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

Выборочные точки в виде вектора сетки, заданные как массив ячеек векторов сетки {xg1,xg2,...,xgn}. Точки выборки должны быть уникальными и отсортированными. Векторы должны указывать сетку того же размера, что и V. Другими словами, size(V) = [length(xg1) length(xg2),...,length(xgn)]. Используйте эту форму в качестве альтернативы полной сетке для сохранения памяти, когда сетка очень велика.

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

Образцы значений, заданные как массив. Элементы V - значения, соответствующие точкам выборки. Первое N размеры V должны иметь те же размеры, что и соответствующие размеры в полной сетке точек выборки, где N - количество размеров сетки.

  • Для интерполяции с использованием одного набора значений укажите V как массив с тем же размером, что и полная сетка точек выборки. Например, если точки выборки образуют сетку с размером 100 на 100, можно указать значения с матрицей того же размера.

  • Для интерполяции с использованием нескольких наборов значений укажите V как массив с дополнительными размерами по сравнению с сеткой точек выборки. Дополнительные размеры определяют несколько значений в каждой точке образца. Например, если типовые пункты формируют сетку с размером 100 на 100, Вы можете определить ценности как множество с размером 100 на 100 на 4, чтобы интерполировать использование четырех различных наборов ценностей 100 на 100.

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

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

МетодОписаниеНепрерывностьКомментарии
'linear' (по умолчанию)Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних точках сетки в каждом соответствующем измерении. C0
  • Требуется не менее 2 точек сетки в каждом измерении

  • Требуется больше памяти, чем 'nearest'

'nearest'Интерполяция ближайшего соседа. Интерполированное значение в точке запроса - это значение в ближайшей выборочной точке сетки. Прерывистый
  • Требуется 2 точки сетки в каждом измерении

  • Быстрое вычисление с умеренными требованиями к памяти

'next'Интерполяция следующего соседа (только для 1-D). Интерполированное значение в точке запроса - это значение в следующей выборочной точке сетки.Прерывистый
  • Требуется не менее 2 баллов

  • Те же требования к памяти и время вычислений, что и 'nearest'

'previous'Предыдущая интерполяция соседей (только для 1-D). Интерполированное значение в точке запроса - это значение в предыдущей выборочной точке сетки.Прерывистый
  • Требуется не менее 2 баллов

  • Те же требования к памяти и время вычислений, что и 'nearest'

'pchip'Фасонно-сохраняющая кусочно-кубическая интерполяция (только для 1-D). Интерполированное значение в точке запроса основано на сохраняющей форму кусочно-кубической интерполяции значений в соседних точках сетки.C1
  • Требуется не менее 4 баллов

  • Требуется больше памяти и времени вычислений, чем 'linear'

'cubic'Кубическая интерполяция. Интерполированное значение в точке запроса основано на кубической интерполяции значений в соседних точках сетки в каждом соответствующем измерении. Интерполяция основана на кубическом свертке.C1
  • Сетка должна иметь одинаковый интервал, хотя интервал в каждом измерении не должен быть одинаковым

  • Требуется не менее 4 точек в каждом измерении

  • Требуется больше памяти и времени вычислений, чем 'linear'

'makima'Модифицированная Akima кубическая эрмитовая интерполяция. Интерполированное значение в точке запроса основано на кусочной функции многочленов со степенью не более трех, вычисленной с использованием значений соседних точек сетки в каждом соответствующем измерении. Формула Акимы модифицируется, чтобы избежать переполнения.C1
  • Требуется не менее 2 точек в каждом измерении

  • Производит меньше волнистостей, чем 'spline', но не распрямляется так агрессивно, как 'pchip'

  • Вычисление дороже, чем 'pchip', но обычно меньше, чем 'spline'

  • Требования к памяти аналогичны требованиям 'spline'

'spline'Интерполяция кубического сплайна. Интерполированное значение в точке запроса основано на кубической интерполяции значений в соседних точках сетки в каждом соответствующем измерении. Интерполяция основана на кубическом сплайне, использующем условия конца без узла.C2
  • Требуется 4 точки в каждом измерении

  • Требуется больше памяти и времени вычислений, чем 'cubic'

Метод экстраполяции, указанный как 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline', или 'makima'. Кроме того, можно указать 'none' если вы хотите, чтобы запросы за пределами области вашей сетки возвращались NaN значения.

Если опустить ExtrapolationMethod, значением по умолчанию является значение, указанное для Method. Если опустить оба Method и ExtrapolationMethod аргументы, оба значения по умолчанию 'linear'.

Свойства

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

Векторы сетки, заданные как массив ячеек {xg1,xg2,...,xgn}. Эти векторы определяют точки сетки (местоположения) для значений в Values. Точки сетки должны быть уникальными.

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

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

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

Метод интерполяции, заданный как символьный вектор. Method могут быть: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline', или 'makima'. Посмотрите Method для описания этих методов.

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

Метод экстраполяции, заданный как символьный вектор. ExtrapolationMethod могут быть: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline', 'makima', или 'none'. Значение 'none' указывает, что экстраполяция отключена. Значением по умолчанию является значение Method.

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

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

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

Vq = F(Xq)
Vq = F(xq1,xq2,...,xqn)
Vq = F(Xq1,Xq2,...,Xqn)
Vq = F({xgq1,xgq2,...,xgqn})

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

  • Vq = F(xq1,xq2,...,xqn) указывает точки запроса xq1,xq2,...,xqn как векторы столбцов длины m представление m точки, разбросанные в n-мерное пространство.

  • Vq = F(Xq1,Xq2,...,Xqn) указывает точки запроса с помощью n-мерные массивы Xq1,Xq2,...,Xqn, которые определяют полную сетку точек.

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

Примеры

свернуть все

Использовать griddedInterpolant для интерполяции набора данных 1-D.

Создание вектора точек рассеянной выборки v. Точки дискретизируются в случайных 1-D местоположениях от 0 до 20.

x = sort(20*rand(100,1));
v = besselj(0,x);

Создайте объект интерполяции с сеткой для данных. По умолчанию griddedInterpolant использует 'linear' способ интерполяции.

F = griddedInterpolant(x,v)
F = 
  griddedInterpolant with properties:

            GridVectors: {[100x1 double]}
                 Values: [100x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

Запрос интерполятора F в 500 равномерно разнесенных точках между 0 и 20. Постройте график интерполированных результатов (xq,vq) поверх исходных данных (x,v).

xq = linspace(0,20,500);
vq = F(xq);
plot(x,v,'ro')
hold on
plot(xq,vq,'.')
legend('Sample Points','Interpolated Values')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Sample Points, Interpolated Values.

Интерполяция 3-D данных двумя методами для указания точек запроса.

Создайте и постройте график набора данных 3-D, представляющего функцию z (x, y) = sin (x2 + y2) x2 + y2, вычисленную в наборе точек выборки с сеткой в диапазоне [-5,5].

[x,y] = ndgrid(-5:0.8:5);
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
surf(x,y,z)

Figure contains an axes. The axes contains an object of type surface.

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

F = griddedInterpolant(x,y,z);

Используйте более тонкую сетку для запроса интерполятора и улучшения разрешения.

[xq,yq] = ndgrid(-5:0.1:5);
vq = F(xq,yq);
surf(xq,yq,vq)

Figure contains an axes. The axes contains an object of type surface.

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

  • При указании векторов сетки вместо использования ndgrid для создания полной сетки, griddedInterpolant избегает формирования полной сетки запросов для выполнения вычислений.

  • При передаче векторов сетки они обычно группируются как ячейки в массиве ячеек. {xg1, xg2, ..., xgn}. Векторы сетки представляют собой компактный способ представления точек полной сетки.

Либо выполните предыдущие команды с использованием векторов сетки.

x = -5:0.8:5;
y = x';
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
F = griddedInterpolant({x,y},z);
xq = -5:0.1:5;
yq = xq';
vq = F({xq,yq});
surf(xq,yq,vq)

Figure contains an axes. The axes contains an object of type surface.

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

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

x = (1:0.3:5)';
y = x';
V = cos(x) .* sin(y);
n = length(x);
surf(1:n,1:n,V)

Figure contains an axes. The axes contains an object of type surface.

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

F = griddedInterpolant(V)
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5 6 7 8 9 10 11 12 13 14]  [1x14 double]}
                 Values: [14x14 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

Выполните запрос интерполятора и постройте график результатов.

[xq,yq] = ndgrid(1:0.2:n);
Vq = F(xq,yq);
surf(xq',yq',Vq)

Figure contains an axes. The axes contains an object of type surface.

Интерполяция данных грубой выборки с использованием полной сетки с интервалом 0.5.

Определите точки образца как полную сетку с диапазоном [1, 10] в обоих измерениях.

[X,Y] = ndgrid(1:10,1:10);

Образец f (x, y) = x2 + y2 в точках сетки.

V = X.^2 + Y.^2;

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

F = griddedInterpolant(X,Y,V,'cubic');

Определение полной сетки точек запроса с помощью 0.5 шаг и оценка интерполятора в этих точках. Затем постройте график результата.

[Xq,Yq] = ndgrid(1:0.5:10,1:0.5:10);
Vq = F(Xq,Yq);
mesh(Xq,Yq,Vq);

Figure contains an axes. The axes contains an object of type surface.

Сравнение результатов запроса интерполятора за пределами области F с использованием 'pchip' и 'nearest' методы экстраполяции.

Создание интерполятора с указанием 'pchip' в качестве метода интерполяции и 'nearest' в качестве метода экстраполяции.

x = [1 2 3 4 5];
v = [12 16 31 10 6];
F = griddedInterpolant(x,v,'pchip','nearest')
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5]}
                 Values: [12 16 31 10 6]
                 Method: 'pchip'
    ExtrapolationMethod: 'nearest'

Запрос интерполятора и включение точек за пределами области F.

xq = 0:0.1:6;
vq = F(xq);
figure
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent v, vq.

Снова запросите интерполятор в тех же точках, на этот раз с помощью метода экстраполяции pchip.

F.ExtrapolationMethod = 'pchip';
figure
vq = F(xq);
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent v, vq.

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

Создайте сетку типовых вопросов с-5≤X≤5 и-3≤Y≤3.

gx = -5:5;
gy = -3:3;
[X,Y] = ndgrid(gx,gy);

Вычислите три различные функции в точках запроса, а затем объедините значения в 3-D массив. Размер V совпадает с X и Y сетки в первых двух измерениях, но размер дополнительного размера отражает количество значений, связанных с каждой точкой образца (в данном случае три).

f1 = X.^2 + Y.^2;
f2 = X.^3 + Y.^3;
f3 = X.^4 + Y.^4;
V = cat(3,f1,f2,f3);

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

F = griddedInterpolant(X,Y,V);

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

qx = -5:0.4:5;
qy = -3:0.4:3;
[XQ,YQ] = ndgrid(qx,qy);

Интерполяция всех трех наборов значений в точках запроса.

VQ = F(XQ,YQ);

Сравните исходные данные с интерполированными результатами.

tiledlayout(3,2)
nexttile
surf(X,Y,f1)
title('f1')
nexttile
surf(XQ,YQ,VQ(:,:,1))
title('Interpolated f1')
nexttile
surf(X,Y,f2)
title('f2')
nexttile
surf(XQ,YQ,VQ(:,:,2))
title('Interpolated f2')
nexttile
surf(X,Y,f3)
title('f3')
nexttile
surf(XQ,YQ,VQ(:,:,3))
title('Interpolated f3')

Figure contains 6 axes. Axes 1 with title f1 contains an object of type surface. Axes 2 with title Interpolated f1 contains an object of type surface. Axes 3 with title f2 contains an object of type surface. Axes 4 with title Interpolated f2 contains an object of type surface. Axes 5 with title f3 contains an object of type surface. Axes 6 with title Interpolated f3 contains an object of type surface.

Подробнее

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

Совет

  • Быстрее оценить griddedInterpolant объект F во многих различных наборах точек запроса, чем требуется для раздельного вычисления интерполяций с использованием interp1, interp2, interp3, или interpn. Например:

    % Fast to create interpolant F and evaluate multiple times
    F = griddedInterpolant(X1,X2,V)
    v1 = F(Xq1)
    v2 = F(Xq2)
    
    % Slower to compute interpolations separately using interp2
    v1 = interp2(X1,X2,V,Xq1)
    v2 = interp2(X1,X2,V,Xq2)
    
Представлен в R2011b