interpn

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

Синтаксис

Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)
Vq = interpn(V,Xq1,Xq2,...,Xqn)
Vq = interpn(V)
Vq = interpn(V,k)
Vq = interpn(___,method)
Vq = interpn(___,method,extrapval)

Описание

пример

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 является длиной ith размерности в 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');

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

[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);

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

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

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

V = gallery('uniformdata',100,50,30,0);

Оцените 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 = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2);

Создайте сетку точек в. Затем передайте точки через функцию, чтобы создать демонстрационную стоимость, 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 является векторами, то они обработаны как векторы сетки. Значения в этих векторах должны быть строго монотонными и увеличиться.

Примечание

В будущем релизе interpn не примет смешанные комбинации векторов строки и столбца для выборки и запросит сетки. Вместо этого необходимо создать полную сетку с помощью ndgrid. Также, если у вас есть большой набор данных, можно использовать griddedInterpolant вместо interpn.

Пример: [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 является массивом, i которого th размерность является той же длиной как вектор сетки Xi, где i= 1,2,...n.

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

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

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

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

  • Если Xq1,Xq2,...,Xqn является скалярами, то они - координаты точки единого запроса в R n.

  • Если Xq1,Xq2,...,Xqn является векторами различных ориентаций, то Xq1,Xq2,...,Xqn обработан как векторы сетки в R n.

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

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

Примечание

В будущем релизе interpn не примет смешанные комбинации векторов строки и столбца для выборки и запросит сетки. Вместо этого необходимо создать полную сетку с помощью ndgrid. Также, если у вас есть большой набор данных, можно использовать griddedInterpolant вместо interpn.

Пример: [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 в R 2. Существует 72 интерполированных значения красного цвета и 9 демонстрационных значений черного цвета цвета.

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

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

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

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

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

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

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

'pchip'Сохраняющая форму кусочная кубичная интерполяция (только для 1D). Интерполированное значение в точке запроса основано на сохраняющей форму кусочной кубичной интерполяции значений в соседних узлах решетки.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
'none'

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

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

Больше о

свернуть все

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

Множество значений, которые всегда увеличиваются или уменьшаются без реверсирований. Например, последовательность, 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, элементы которого представляют сетку точек в R n. ith массив, Xi, содержит строго монотонные, увеличивающие значения, которые отличаются наиболее быстро по ith измерению.

Используйте функцию ndgrid, чтобы создать полную сетку, которую можно передать interpn. Например, следующий код создает полную сетку в R 2 для области, 1 ≤ X1 ≤ 3, 1 ≤ X2 ≤ 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 смешанной ориентации, которые задают точки сетки в R n.

Например, следующий код создает векторы сетки в R 3 для области, 1 ≤ x1 ≤ 3, 4 ≤ x2 ≤ 5, и 6 ≤x3 ≤ 8:

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

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

Для interpn рассеянные точки состоят из массивов n или векторов, Xq1,Xq2,...,Xqn, которые задают набор точек, рассеянных в R n. i th массив, Xi, содержит координаты в i th размерность.

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

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

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

Смотрите также

| | |

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