griddedInterpolant

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

Описание

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

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

Создание

Описание

F = griddedInterpolant создает пустые данные с координатной сеткой interpolant объект.

пример

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

пример

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

пример

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

пример

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

пример

F = griddedInterpolant(___,Method) задает метод интерполяции: 'linear'самый близкий, '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 задает отдельный набор 1D значений. Например, если 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'Затем граничьте с интерполяцией (только для 1D). Интерполированное значение в точке запроса является значением в следующем демонстрационном узле решетки.Прерывистый
  • Требует по крайней мере 2 точек

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

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

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

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

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

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

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

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

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

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

  • Расчет является более дорогим, чем 'pchip', но обычно меньше, чем 'spline'

  • Требования к памяти похожи на те из 'spline'

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

Используйте griddedInterpolant создать interpolant, 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 интерполировать 1D набор данных.

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

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

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

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

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

Запросите interpolant 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 object. The axes object 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 object. The axes object contains an object of type surface.

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

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 object. The axes object 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 object. The axes object 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 object. The axes object 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]  [1 2 3 4 5 ... ]}
                 Values: [14x14 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

Запросите interpolant и постройте результаты.

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

Figure contains an axes object. The axes object 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;

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

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

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

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

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

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

Создайте interpolant, задав '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'

Запросите interpolant и включайте точки вне области F.

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

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

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

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

Figure contains an axes object. The axes object 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);

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

F = griddedInterpolant(X,Y,V);

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

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 objects. Axes object 1 with title f1 contains an object of type surface. Axes object 2 with title Interpolated f1 contains an object of type surface. Axes object 3 with title f2 contains an object of type surface. Axes object 4 with title Interpolated f2 contains an object of type surface. Axes object 5 with title f3 contains an object of type surface. Axes object 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