interpn

Интерполяция для 1-D, 2-D, 3-D и N-D данных с сеткой в формате ndgrid

Описание

пример

Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn) возвращает интерполированные значения функции от переменных n в определенных точках запроса с помощью линейной интерполяции. Результаты всегда проходят через исходную выборку функции. X1,X2,...,Xn содержать координаты точек выборки. V содержит соответствующие значения функций в каждой точке выборки. Xq1,Xq2,...,Xqn содержать координаты точек запроса.

Vq = interpn(V,Xq1,Xq2,...,Xqn) принимает сетку точек выборки по умолчанию. Сетка по умолчанию состоит из точек, 1,2,3,... ni в каждой размерности. Значение ni является длиной i-го размерности в V. Используйте этот синтаксис, когда вы хотите сохранить память и не обеспокоены абсолютными расстояниями между точками.

Vq = interpn(V) возвращает интерполированные значения на уточненной сетке, формируемой путем деления интервала между выборочными значениями один раз в каждой размерности.

пример

Vq = interpn(V,k) возвращает интерполированные значения на уточненной сетке, формируемой многократным сокращением интервалов вдвое k времени в каждой размерности. Это приводит к 2^k-1 интерполированные точки между выборочными значениями.

пример

Vq = interpn(___,method) задает альтернативный метод интерполяции: 'linear', 'nearest', 'pchip', 'cubic', 'makima', или 'spline'. Метод по умолчанию 'linear'.

пример

Vq = interpn(___,method,extrapval) также задает extrapvalскалярное значение, которое назначается всем запросам, которые находятся вне области точек выборки.

Если вы опускаете extrapval аргумент для запросов вне области точек выборки, затем основанный на method аргумент interpn возвращает одно из следующих значений:

  • Экстраполированные значения для 'spline' и 'makima' методы

  • NaN значения для других методов интерполяции

Примеры

свернуть все

Задайте точки выборки и значения.

x = [1 2 3 4 5];
v = [12 16 31 10 6];

Определите точки запроса, xq, и интерполировать.

xq = (1:0.1:5);
vq = interpn(x,v,xq,'cubic');

Постройте график результата.

figure
plot(x,v,'o',xq,vq,'-');
legend('Samples','Cubic Interpolation');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Samples, Cubic Interpolation.

Создайте набор точек сетки и соответствующих значений выборок.

[X1,X2] = ndgrid((-5:1:5));
R = sqrt(X1.^2 + X2.^2)+ eps;
V = sin(R)./(R);

Интерполяция по более мелкой сетке с помощью ntimes=1.

Vq = interpn(V,'cubic');
mesh(Vq);

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

Создайте векторы сетки, x1, x2, и x3. Эти векторы определяют точки, связанные со значениями в V.

x1 = 1:100;
x2 = (1:50)';
x3 = 1:30;

Определите значения выборки, чтобы быть массивом случайных чисел 100 на 50 на 30, V. Используйте gallery функция для создания массива.

rng('default')
V = rand(100,50,30);

Оценка V в трех точках вне области x1, x2, и x3. Задайте extrapval = -1.

xq1 = [0 0 0];
xq2 = [0 0 51];
xq3 = [0 101 102];
vq = interpn(x1,x2,x3,V,xq1,xq2,xq3,'linear',-1)
vq = 1×3

    -1    -1    -1

Все три точки вычисляются как -1 потому что они находятся вне области x1, x2, и x3.

Задайте анонимную функцию, которая представляет.$f = te^{-x^{2}-y^{2}-z^{2}}$

f = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2);

Создайте сетку точек в. $R^4$Затем передайте точки через функцию, чтобы создать выборочные значения, V.

[x,y,z,t] = ndgrid(-1:0.2:1,-1:0.2:1,-1:0.2:1,0:2:10);
V = f(x,y,z,t);

Теперь создайте сетку запросов.

[xq,yq,zq,tq] = ...
ndgrid(-1:0.05:1,-1:0.08:1,-1:0.05:1,0:0.5:10);

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

Vq = interpn(x,y,z,t,V,xq,yq,zq,tq);

Создайте фильм, чтобы показать результаты.

figure('renderer','zbuffer');
nframes = size(tq, 4);
for j = 1:nframes
   slice(yq(:,:,:,j),xq(:,:,:,j),zq(:,:,:,j),...
         Vq(:,:,:,j),0,0,0);
   caxis([0 10]);
   M(j) = getframe;
end
movie(M);

Входные параметры

свернуть все

Дискретизируйте точки сетки, заданные как действительные массивы или векторы. Образец точек сетки должен быть уникальным.

  • Если X1,X2,...,Xn являются массивами, затем они содержат координаты полной сетки (в формате ndgrid). Используйте ndgrid функция для создания X1,X2,...,Xn массивы вместе. Размер этих массивов должен совпадать.

  • Если X1,X2,...,Xn являются векторами, затем они рассматриваются как векторы сетки. Значения в этих векторах должны быть строго монотонными, либо увеличивающимися, либо уменьшающимися.

Пример: [X1,X2,X3,X4] = ndgrid(1:30,-10:10,1:5,10:13)

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

Выборочные значения, заданные как действительный или комплексный массив. Требования к размеру для V зависят от размера X1,X2,...,Xn:

  • Если X1,X2,...,Xn являются массивами, представляющими полную сетку (в ndgrid формат), затем размер V соответствует размеру любого массива, X1,X2,...,Xn.

  • Если X1,X2,...,Xn являются векторами сетки, затем V - массив, чей ith - длина вектора сетки Xi, где i= 1,2,...n.

Если V содержит комплексные числа, затем interpn интерполирует действительную и мнимую части отдельно.

Пример: rand(10,5,3,2)

Типы данных: single | double
Поддержка комплексного числа: Да

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

  • Если Xq1,Xq2,...,Xqn являются скалярами, тогда они являются координатами одной точки запроса в Rn.

  • Если Xq1,Xq2,...,Xqn являются векторами различной ориентации, тогда Xq1,Xq2,...,Xqn рассматриваются как векторы сетки в Rn.

  • Если Xq1,Xq2,...,Xqn являются векторами одного размера и ориентации, затем Xq1,Xq2,...,Xqn рассматриваются как рассеянные точки в Rn.

  • Если Xq1,Xq2,...,Xqn являются массивами одинакового размера, затем они представляют собой либо полную сетку точек запроса (в ndgrid формат) или рассеянные точки в Rn.

Пример: [X1,X2,X3,X4] = ndgrid(1:10,1:5,7:9,10:11)

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

Коэффициент уточнения, заданный как действительный, неотрицательный, целочисленный скаляр. Это значение задает количество раз, чтобы неоднократно делить интервалы уточненной сетки в каждой размерности. Это приводит к 2^k-1 интерполированные точки между выборочными значениями.

Если k является 0, затем Vq то же, что и V.

interpn(V,1) то же, что и interpn(V).

Следующий рисунок изображает k=2 в R2. Существует 72 интерполированные значения в красном цвете и 9 значений в чёрной выборке.

Пример: interpn(V,2)

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

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

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

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

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

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

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

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

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

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

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

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

  • Производит меньше волн, чем 'spline'

  • Время расчета обычно меньше 'spline', но требования к памяти схожи

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

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

Значение функции вне области X1,X2,...,Xn, заданный как действительный или комплексный скаляр. interpn возвращает это постоянное значение для всех точек за пределами области X1,X2,...,Xn.

Пример: 5

Пример: 5+1i

Типы данных: single | double
Поддержка комплексного числа: Да

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

свернуть все

Интерполированные значения, возвращенные как действительный или комплексный скаляр, вектор или массив. Размер и форма Vq зависит от используемого синтаксиса и, в некоторых случаях, от размера и значения входных параметров.

СинтаксисыОсобые условияРазмер VqПример
interpn(X1,...,Xn,V,Xq1,...,Xqn)
interpn(V,Xq1,...,Xqn)
и изменения этих синтаксисов, которые включают method или extrapval
Xq1,...,Xqn являются скалярамиСкалярsize(Vq) = [1 1] когда вы проходите Xq1,...,Xqn как скаляры.
То же, что и вышеXq1,...,Xqn являются векторами одного размера и ориентацииВектор того же размера и ориентации, что и Xq1,...,XqnВ 3-D, если
size(Xq1) = [100 1],
и size(Xq2) = [100 1],
и size(Xq3) = [100 1],
затем size(Vq) = [100 1].
То же, что и вышеXq1,...,Xqn являются векторами смешанной ориентацииsize(Vq) = [length(Xq1),...,length(Xqn)]В 3-D, если
size(Xq1) = [1 100],
и size(Xq2) = [50 1],
и size(Xq3) = [1 5],
затем size(Vq) = [100 50 5].
То же, что и вышеXq1,...,Xqn являются массивами одинакового размераМассив того же размера, что и Xq1,...,XqnВ 3-D, если
size(Xq1) = [50 25],
и size(Xq2) = [50 25],
и size(Xq3) = [50 25],
затем size(Vq) = [50 25].
interpn(V,k)
и изменения этого синтаксиса, которые включают method или extrapval
Ничего

Массив, в котором длина ith размерность является
2^k * (size(V,i)-1)+1,

В 3-D, если
size(V) = [10 12 5],
и k = 3,
затем size(Vq) = [73 89 33].

Подробнее о

свернуть все

Строго монотонный

A множества значений, которые всегда увеличиваются или уменьшаются, без обращений. Для примера, последовательности, a = [2 4 6 8] является строго монотонным и увеличивается. Последовательность, b = [2 4 4 6 8] не является строго монотонным, потому что нет никакого изменения в значении между b(2) и b(3). Последовательность, c = [2 4 6 8 6] содержит сторнирование между c(4) и c(5), так что это вовсе не монотонно.

Полная сетка (в формате ndgrid)

Для interpn, полная сетка состоит из n массивов, X1,X2,...,Xn, элементы которого представляют сетку точек в Rn. I-й массив, Xi, содержит строго монотонные, увеличивающиеся значения, которые изменяются наиболее быстро по i-му размерности.

Используйте ndgrid функция для создания полной сетки, в которую можно перейти interpn. Например, следующий код создает полную сетку в R2 для области, 1 ≤ <reservedrangesplaceholder1> ≤ 3, 1 ≤ <reservedrangesplaceholder0> ≤ 4.

[X1,X2] = ndgrid(-1:3,(1:4))
X1 =

    -1    -1    -1    -1
     0     0     0     0
     1     1     1     1
     2     2     2     2
     3     3     3     3


X2 =

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

Векторы сетки

Для interpnвекторы сетки состоят из n векторов смешанной ориентации, которые определяют точки сетки в Rn.

Например, следующий код создает векторы сетки в R3 для области, 1 ≤ <reservedrangesplaceholder2> ≤ 3, 4 ≤ <reservedrangesplaceholder1> ≤ 5 и 6  <reservedrangesplaceholder0>  8:

x1 = 1:3;
x2 = (4:5)';
x3 = 6:8;

Рассеянные точки

Для interpnрассеянные точки состоят из n массивов или векторов, Xq1,Xq2,...,Xqn, которые определяют набор точек, рассеянных в Rn. The ith-й массив, Xi, содержит координаты в ith размерности.

Например, следующий код задает точки (1, 19, 10), (6, 40, 1), (15, 33, 22) и (0, 61, 13) в R3.

Xq1 = [1 6; 15 0];
Xq2 = [19 40; 33 61];
Xq3 = [10 1; 22 13];

Расширенные возможности

.

См. также

| | |

Представлено до R2006a