griddedInterpolant

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

Описание

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

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

Создание

Синтаксис

F = griddedInterpolant
F = griddedInterpolant(x,v)
F = griddedInterpolant(X1,X2,...,Xn,V)
F = griddedInterpolant(V)
F = griddedInterpolant(gridVecs,V)
F = griddedInterpolant(___,Method)
F = griddedInterpolant(___,Method,ExtrapolationMethod)

Описание

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', 'nearest', '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'

самый близкийСамая близкая соседняя интерполяция. Интерполированное значение в точке запроса является значением в самом близком демонстрационном узле решетки. Прерывистый
  • Требует 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'

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

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

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

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

Свойства

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

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

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

Типы данных: ячейка

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

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

Типы данных: 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, чтобы создать 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 набора данных, представляющего функцию, выполненную в наборе точек выборки с координатной сеткой в области значений [-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);

Выборка в узлах решетки.

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

Была ли эта тема полезной?