1D интерполяция данных (поиск по таблице)
vq = interp1(x,v,xq)
vq = interp1(x,v,xq,method)
vq = interp1(x,v,xq,method,extrapolation)
vq = interp1(v,xq)
vq = interp1(v,xq,method)
vq = interp1(v,xq,method,extrapolation)
pp = interp1(x,v,method,'pp')
возвращает интерполированные значения 1D функции в определенных точках запроса с помощью линейной интерполяции. Векторный vq
= interp1(x
,v
,xq
)x
содержит точки выборки, и v
содержит соответствующие значения, v (x). Векторный xq
содержит координаты точек запроса.
Если у вас есть несколько наборов данных, которые выбираются в тех же координатах точки, то можно передать v
как массив. Каждый столбец массива v
содержит различный набор 1D демонстрационных значений.
задает стратегию оценки точек, которые лежат вне области vq
= interp1(x
,v
,xq
,method
,extrapolation
)x
. Установите extrapolation
на 'extrap'
когда это необходимо использовать алгоритм method
для экстраполяции. Также можно задать скалярное значение, в этом случае, interp1
возвращает то значение для всех точек вне области x
.
возвращает интерполированные значения и принимает набор по умолчанию координат точки выборки. Точки по умолчанию являются последовательностью чисел от vq
= interp1(v
,xq
)1
до n
, где n
зависит от формы v
:
Когда v является вектором, точками по умолчанию является 1:length(v)
.
Когда v является массивом, точками по умолчанию является 1:size(v,1)
.
Используйте этот синтаксис, когда вы не будете обеспокоены абсолютными расстояниями между точками.
задает стратегию экстраполяции и использует точки выборки по умолчанию.vq
= interp1(v
,xq
,method
,extrapolation
)
возвращает форму кусочного полинома v (x) с помощью алгоритма pp
= interp1(x
,v
,method
,'pp')method
.
Этот синтаксис не рекомендуется. Используйте griddedInterpolant
вместо этого.
Задайте точки выборки, x
, и соответствующие демонстрационные значения, v
.
x = 0:pi/4:2*pi; v = sin(x);
Задайте точки запроса, чтобы быть более прекрасной выборкой в области значений x
.
xq = 0:pi/16:2*pi;
Интерполируйте функцию в точках запроса и постройте результат.
figure vq1 = interp1(x,v,xq); plot(x,v,'o',xq,vq1,':.'); xlim([0 2*pi]); title('(Default) Linear Interpolation');
Теперь оцените v
в тех же точках с помощью метода 'spline'
.
figure vq2 = interp1(x,v,xq,'spline'); plot(x,v,'o',xq,vq2,':.'); xlim([0 2*pi]); title('Spline Interpolation');
Задайте набор значений функции.
v = [0 1.41 2 1.41 0 -1.41 -2 -1.41 0];
Задайте набор точек запроса, которые падают между точками по умолчанию, 1:9
. В этом случае точками по умолчанию является 1:9
, потому что v
содержит значения 9
.
xq = 1.5:8.5;
Оцените v
в xq
.
vq = interp1(v,xq);
Постройте результат.
figure plot((1:9),v,'o',xq,vq,'*'); legend('v','vq');
Задайте набор точек выборки.
x = 1:10;
Задайте значения функции, , в точках выборки.
v = (5*x)+(x.^2*1i);
Задайте точки запроса, чтобы быть более прекрасной выборкой в области значений x
.
xq = 1:0.25:10;
Интерполируйте v
в точках запроса.
vq = interp1(x,v,xq);
Постройте действительную часть результата красного цвета и мнимой части синего цвета.
figure plot(x,real(v),'*r',xq,real(vq),'-r'); hold on plot(x,imag(v),'*b',xq,imag(vq),'-b');
Интерполируйте точки данных, к которым добавляют метку времени.
Рассмотрите набор данных, содержащий температурные показания, которые измеряются каждые четыре часа. Составьте таблицу с ценностью одного дня данных и отобразите данные на графике.
x = (datetime(2016,1,1):hours(4):datetime(2016,1,2))'; x.Format = 'MMM dd, HH:mm'; T = [31 25 24 41 43 33 31]'; WeatherData = table(x,T,'VariableNames',{'Time','Temperature'})
WeatherData=7×2 table
Time Temperature
_____________ ___________
Jan 01, 00:00 31
Jan 01, 04:00 25
Jan 01, 08:00 24
Jan 01, 12:00 41
Jan 01, 16:00 43
Jan 01, 20:00 33
Jan 02, 00:00 31
plot(WeatherData.Time, WeatherData.Temperature, 'o')
Интерполируйте набор данных, чтобы предсказать температуру, читающую в течение каждой минуты дня. Поскольку данные являются периодическими, используйте метод интерполяции 'spline'
.
xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';
V = interp1(WeatherData.Time, WeatherData.Temperature, xq, 'spline');
Постройте интерполированные точки.
hold on plot(xq,V,'r')
Задайте точки выборки, x
, и соответствующие демонстрационные значения, v
.
x = [1 2 3 4 5]; v = [12 16 31 10 6];
Задайте точки запроса, xq
, которые расширяют вне области x
.
xq = [0 0.5 1.5 5.5 6];
Оцените v
в xq
с помощью метода 'pchip'
.
vq1 = interp1(x,v,xq,'pchip')
vq1 = 1×5
19.3684 13.6316 13.2105 7.4800 12.5600
Затем, оцените v
в xq
с помощью метода 'linear'
.
vq2 = interp1(x,v,xq,'linear')
vq2 = 1×5
NaN NaN 14 NaN NaN
Теперь, используйте метод 'linear'
с опцией 'extrap'
.
vq3 = interp1(x,v,xq,'linear','extrap')
vq3 = 1×5
8 10 14 4 2
'pchip'
экстраполирует по умолчанию, но 'linear'
не делает.
Задайте точки выборки, x
, и соответствующие демонстрационные значения, v
.
x = [-3 -2 -1 0 1 2 3]; v = 3*x.^2;
Задайте точки запроса, xq
, которые расширяют вне области x
.
xq = [-4 -2.5 -0.5 0.5 2.5 4];
Теперь оцените v
в xq
с помощью метода 'pchip'
и присвойте любые значения вне области x
к значению, 27
.
vq = interp1(x,v,xq,'pchip',27)
vq = 1×6
27.0000 18.6562 0.9375 0.9375 18.6562 27.0000
Задайте точки выборки.
x = (-5:5)';
Демонстрационные три различных параболических функции в точках заданы в x
.
v1 = x.^2; v2 = 2*x.^2 + 2; v3 = 3*x.^2 + 4;
Создайте матричный v
, столбцы которого являются векторами, v1
, v2
и v3
.
v = [v1 v2 v3];
Задайте набор точек запроса, xq
, чтобы быть более прекрасной выборкой в области значений x
.
xq = -5:0.1:5;
Выполните все три функции в xq
и постройте результаты.
vq = interp1(x,v,xq,'pchip'); figure plot(x,v,'o',xq,vq); h = gca; h.XTick = -5:5;
Круги в графике представляют v
, и сплошные линии представляют vq
.
x
'SamplePoints' Точки выборки, заданные как строка или вектор-столбец вещественных чисел. Значения в x
должны быть отличными. Длина x
должна соответствовать одному из следующих требований:
Если v
является вектором, то length(x)
должен равняться length(v)
.
Если v
является массивом, то length(x)
должен равняться size(v,1)
.
Пример: [1 2 3 4 5 6 7 8 9 10]
Пример: 1:10
Пример: [3 7 11 15 19 23 27 31]'
Типы данных: single
| double
| duration
| datetime
v
Демонстрационные значенияДемонстрационные значения, заданные как вектор, матрица или массив вещественных или комплексных чисел. Если v
является матрицей или массивом, то каждый столбец содержит отдельный набор 1D значений.
Если v
содержит комплексные числа, то interp1
интерполирует действительные и мнимые части отдельно.
Пример: rand(1,10)
Пример: rand(10,1)
Пример: rand(10,3)
Типы данных: single
| double
| duration
| datetime
Поддержка комплексного числа: Да
xq
Точки запросаТочки запроса, заданные как скаляр, вектор, матрица или массив вещественных чисел.
Пример 5
Пример: 1:0.05:10
Пример: (1:0.05:10)'
Пример: [0 1 2 7.5 10]
Типы данных: single
| double
| duration
| datetime
method
— Метод интерполяции'linear'
(значение по умолчанию) | 'nearest'
| 'next'
| 'previous'
| 'pchip'
| 'cubic'
| 'v5cubic'
| 'makima'
| 'spline'
Метод интерполяции, заданный как одна из опций в этой таблице.
Метод |
Описание |
Непрерывность |
Комментарии |
---|---|---|---|
|
Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних узлах решетки в каждой соответствующей размерности. Это - метод интерполяции по умолчанию. |
C0 |
|
|
Самая близкая соседняя интерполяция. Интерполированное значение в точке запроса является значением в самом близком демонстрационном узле решетки. |
Прерывистый |
|
|
Следующая соседняя интерполяция. Интерполированное значение в точке запроса является значением в следующем демонстрационном узле решетки. |
Прерывистый |
|
|
Предыдущая соседняя интерполяция. Интерполированное значение в точке запроса является значением в предыдущем демонстрационном узле решетки. |
Прерывистый |
|
|
Сохраняющая форму кусочная кубичная интерполяция. Интерполированное значение в точке запроса основано на сохраняющей форму кусочной кубичной интерполяции значений в соседних узлах решетки. |
C1 |
|
ПримечаниеПоведение
|
То же самое как |
C1 |
Этот метод в настоящее время возвращает тот же результат как |
|
Кубическая свертка используется в MATLAB® 5. |
C1 |
Точки должны быть однородно расположены с интервалами. |
|
Измененный Акима кубическая интерполяция Эрмита. Интерполированное значение в точке запроса основано на кусочной функции полиномов со степенью самое большее три. Формула Акима изменяется, чтобы избежать перерегулирований. |
C1 |
|
|
Интерполяция сплайна с помощью граничных условий не-узла. Интерполированное значение в точке запроса основано на кубичной интерполяции значений в соседних узлах решетки в каждой соответствующей размерности. |
C2 |
|
extrapolation
— Стратегия экстраполяции'extrap'
| скалярное значениеСтратегия экстраполяции, заданная как 'extrap'
или действительное скалярное значение.
Задайте 'extrap'
когда это необходимо interp1
, чтобы оценить точки вне области с помощью того же метода, который это использует для интерполяции.
Задайте скалярное значение когда это необходимо interp1
, чтобы возвратить определенное постоянное значение для точек вне области.
Поведение по умолчанию зависит от входных параметров:
Если вы задаете 'pchip'
, 'spline'
или методы интерполяции 'makima'
, то поведением по умолчанию является 'extrap'
.
Все другие методы интерполяции возвращают NaN
по умолчанию для точек запроса вне области.
Пример: 'extrap'
Пример 5
Типы данных: char
| string
| single
| double
vq
Интерполированные значенияИнтерполированные значения, возвращенные как скаляр, вектор, матрица или массив. Размер vq
зависит от формы v
и xq
.
Форма v | Форма xq | Размер Vq | Пример |
---|---|---|---|
Вектор | Вектор | size(xq) | Если size(v) = [1 100] и size(xq) = [1 500] , затем size(vq) = [1 500] . |
Вектор | Матрица или массив N-D | size(xq) | Если size(v) = [1 100] и size(xq) = [50 30] , затем size(vq) = [50 30] . |
Матрица или массив N-D | Вектор | [length(xq) size(v,2),...,size(v,n)] | Если size(v) = [100 3] и size(xq) = [1 500] , затем size(vq) = [500 3] . |
Матрица или массив N-D | Матрица или массив N-D | [size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)] | Если size(v) = [4 5 6] и size(xq) = [2 3 7] , затем size(vq) = [2 3 7 5 6] . |
pp
— Кусочный полиномКусочный полином, возвращенный как структура, которую можно передать функции ppval
для оценки.
Алгоритм Акима для одномерной интерполяции, описанной в [1] и [2], выполняет кубичную интерполяцию, чтобы произвести кусочные полиномы с непрерывными производными первого порядка (C1). Алгоритм сохраняет наклон и избегает волнистостей в плоских областях. Плоская область происходит каждый раз, когда существует три или больше последовательных коллинеарных точки, которые алгоритм соединяет с прямой линией. Чтобы гарантировать, что область между двумя точками данных является плоской, вставьте дополнительную точку данных между теми двумя точками.
Когда две плоских области с различными наклонами встречаются, модификация, сделанная к исходному алгоритму Акима, дает больше веса стороне, где наклон ближе к нулю. Эта модификация уделяет первостепенное значение стороне, которая ближе к горизонтали, которая более интуитивна и избегает перерегулирования. (Исходный алгоритм Акима дает равные веса точкам с обеих сторон, таким образом равномерно деля волнистость.)
Алгоритм сплайна, с другой стороны, выполняет кубичную интерполяцию, чтобы произвести кусочные полиномы с непрерывными производными второго порядка (C2). Результат сопоставим с регулярной полиномиальной интерполяцией, но менее восприимчив к тяжелому колебанию между точками данных для высоких степеней. Однако, этот метод может быть восприимчив к перерегулированиям и колебаниям между точками данных.
По сравнению с алгоритмом сплайна алгоритм Акима производит меньше волнистостей и лучше подходит для соглашения с быстрыми изменениями между плоскими областями. Это различие проиллюстрировано ниже использования тестовых данных, который соединяет несколько плоских областей.
[1] Акима, Хироши. "Новый метод интерполяции и плавной кривой, соответствующей на основе локальных процедур". Журнал ACM (JACM), 17.4, 1970, стр 589-602.
[2] Акима, Хироши. "Метод двумерной интерполяции и сглаженной поверхности, соответствующей на основе локальных процедур". Коммуникации ACM, 17.1, 1974, стр 18-20.
Указания и ограничения по применению:
Генерация кода не поддерживает методы интерполяции 'makima'
или 'cubic'
.
Входной параметр x
(точки выборки) должен строго увеличиваться или строго уменьшаться. Индексы не переупорядочиваются.
Если входной параметр, v
(демонстрационные значения) является вектором переменной длины (1 :
или :
-by-1), то форма вывода vq
совпадает с формой в MATLAB.
Если входной параметр, v
является переменным размером, не является вектором переменной длины и становится вектором - строкой во время выполнения, то ошибка происходит.
Если входной параметр, xq
(точки запроса) является переменным размером, не является вектором переменной длины и становится строкой или вектор-столбцом во время выполнения, то ошибка происходит.
Указания и ограничения по применению:
x
должен быть конечным, увеличивающимся вектором, не повторяя элементы. x
должен быть двойным или одним.
v
должен быть массивом типа double или один. Размер первой неодноэлементной размерности v
должен совпасть с длиной x
. V
может быть комплексным.
xq
должен быть массивом типа double или один.
method
должен быть 'linear'
, 'nearest'
, 'v5cubic'
или 'spline'
.
Для получения дополнительной информации смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.