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. The V массив содержит выборки значений, сопоставленные с местоположениями точек в X1,X2,...,Xn. Каждый из массивов X1,X2,...,Xn должен быть того же размера, что и V.

пример

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

пример

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'Модифицированная кубическая эрмитовая интерполяция Акимы. Интерполированное значение в точке запроса основано на кусочно-линейной функции полиномов со степенью не более трех, оцененных с использованием значений соседних точек сетки в каждой соответствующей размерности. Формула Акимы изменена, чтобы избежать перерегулирования.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);

Используйте более мелкую сетку mesh, чтобы запросить interpolant и улучшить разрешение изображения.

[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 для интерполяции трёх различных множеств значений в одних и тех же точках запроса.

Создайте сетку точек выборки с -5X5 и -3Y3.

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

Вычислите три различные функции в точках запроса, а затем объедините значения в трехмерный массив. Размер 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