Интерполяция для 1D, 2D, 3-D, и данных с координатной сеткой N-D в ndgrid формате
возвращает интерполированные значения функции переменных n в определенных точках запроса с помощью линейной интерполяции. Результаты всегда проходят через исходную выборку функции. Vq
= interpn(X1,X2,...,Xn
,V
,Xq1,Xq2,...,Xqn
)X1,X2,...,Xn
содержите координаты точек выборки. V
содержит соответствующие значения функции в каждой точке выборки. Xq1,Xq2,...,Xqn
содержите координаты точек запроса.
принимает сетку по умолчанию точек выборки. Сетка по умолчанию состоит из точек, 1,2,3... ni в каждой размерности. Значение ni является длиной ith размерности в Vq
= interpn(V
,Xq1,Xq2,...,Xqn
)V
. Используйте этот синтаксис, когда это необходимо, чтобы сохранить память, и не касаются абсолютных расстояний между точками.
также задает 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
— Демонстрационные узлы решеткиДемонстрационные узлы решетки, заданные как действительные массивы или векторы. Демонстрационные узлы решетки должны быть уникальными.
Если 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
— Демонстрационные значенияДемонстрационные значения, заданные как действительный или комплексный массив. Требования размера для 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
— Точки запросаТочки запроса, заданные как действительные скаляры, векторы или массивы.
Если 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
k
— Фактор улучшения
(значение по умолчанию) | действительный, неотрицательный, целочисленный скалярФактор улучшения, заданный как действительное, неотрицательное, целочисленный скаляр. Это значение задает число раз, чтобы неоднократно разделить интервалы усовершенствованной сетки в каждой размерности. Это приводит к 2^k-1
интерполированные точки между демонстрационными значениями.
Если k
0
, затем Vq
совпадает с V
.
interpn(V,1)
совпадает с interpn(V)
.
Следующий рисунок изображает k=2
в R 2. Существует 72 интерполированных значения красного цвета и 9 демонстрационных значений черного цвета цвета.
Пример: interpn(V,2)
Типы данных: single
| double
method
метод интерполяции'linear'
(значение по умолчанию) | 'nearest'
| 'pchip'
| 'cubic'
| 'spline'
| 'makima'
Метод интерполяции, заданный как одна из опций в этой таблице.
Метод | Описание | Непрерывность | Комментарии |
---|---|---|---|
'linear' | Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних узлах решетки в каждой соответствующей размерности. Это - метод интерполяции по умолчанию. | C0 |
|
'nearest' | Интерполированное значение в точке запроса является значением в самом близком демонстрационном узле решетки. | Прерывистый |
|
'pchip' | Сохраняющая форму кусочная кубичная интерполяция (только для 1D). Интерполированное значение в точке запроса основано на сохраняющей форму кусочной кубичной интерполяции значений в соседних узлах решетки. | C1 |
|
'cubic' | Интерполированное значение в точке запроса основано на кубичной интерполяции значений в соседних узлах решетки в каждой соответствующей размерности. Интерполяция основана на кубической свертке. | C1 |
|
'makima' | Модифицированный Акима кубическая интерполяция Эрмита. Интерполированное значение в точке запроса основано на кусочно-линейной функции полиномов со степенью самое большее три оцененных использования значений соседних узлов решетки в каждой соответствующей размерности. Формула Акима изменяется, чтобы избежать перерегулирований. | C1 |
|
'spline' | Интерполированное значение в точке запроса основано на кубичной интерполяции значений в соседних узлах решетки в каждой соответствующей размерности. Интерполяция основана на кубическом сплайне с помощью граничных условий не-узла. | C2 |
|
extrapval
— Значение функции вне области X1,X2,...,Xn
Значение функции вне области X1,X2,...,Xn
, заданный как действительный или комплексный скаляр. interpn
возвращает это постоянное значение для всех точек вне области X1,X2,...,Xn
.
Пример 5
Пример: 5+1i
Типы данных: single
| double
Поддержка комплексного числа: Да
Vq
— Интерполированные значенияИнтерполированные значения, возвращенные как действительный или комплексный скаляр, вектор или массив. Размер и форма 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' | Массив, в который длина | В 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)
, таким образом, это не является монотонным вообще.
Для 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];
Указания и ограничения по применению:
Для лучших результатов обеспечьте X1,X2,...,Xn
как векторы.
Генерация кода не поддерживает 'makima'
метод интерполяции.
Генерация кода не поддерживает 'cubic'
или 'spline'
методы интерполяции для 2D и более высокой интерполяции.
Метод интерполяции должен быть постоянным вектором символов.
Указания и ограничения по применению:
Максимум пяти размерностей поддерживается.
V
должен быть двойной или один массив N-D. V
может быть действительным или комплексным.
X1,X2,...,Xn
Y
должен:
Имейте тот же тип (дважды или один).
Будьте конечными векторами или массивами N-D с увеличением и неповторением элементов в соответствующих размерностях.
Выровняйтесь с осями декартовой системы координат когда X1,X2,...,Xn
массивы N-D (как будто они были произведены ndgrid
).
Имейте размерности, сопоставимые с V
.
X1,X2,...,Xn
должны быть векторы или массивы того же типа (дважды или один). Если X1,X2,...,Xn
массивы, затем у них должен быть тот же размер. Если они - векторы с различными длинами, то у одного из них должна быть различная ориентация.
method
должен быть 'linear'
or'nearest'
.
Экстраполяция для входа из контура не поддержана.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.