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

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

Типы данных: 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 значения, которые соответствуют точкам выборки. Размер V должен быть размер полной сетки точек выборки.

  • Если вы задаете точки выборки как полную сетку, состоящую из массивов N-D, то V должен быть одного размера с любым из X1,X2,...,Xn.

  • Если вы задаете точки выборки как векторы сетки, то size(V) = [length(xg1) length(xg2) ... length(xgn)].

Типы данных: 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. Узлы решетки должны быть уникальными.

Основанное на индексе редактирование свойств F не поддерживается. Вместо этого полностью замените GridVectors или Values массивы по мере необходимости.

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

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

Основанное на индексе редактирование свойств F не поддерживается. Вместо этого полностью замените GridVectors или Values массивы по мере необходимости.

Типы данных: 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')

Интерполируйте 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)

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

F = griddedInterpolant(x,y,z);

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

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

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

  • Когда вы задаете векторы сетки вместо того, чтобы использовать 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)

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

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

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

Интерполируйте данные с помощью сетки по умолчанию.

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'

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

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

Интерполируйте грубо выборочные данные с помощью полной сетки с разрядкой 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);

Сравните результаты запроса 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')

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

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

Больше о

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

Советы

  • Это быстрее, чтобы оценить 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