1-D интерполяция данных (поиск таблицы)
возвращает интерполированные значения функции 1-D в определенных точках запроса с помощью линейной интерполяции. Векторные vq
= interp1(x
,v
,xq
)x
содержит выборочные точки и v
содержит соответствующие значения, v (x). Векторные xq
содержит координаты точек запроса.
Если у вас есть несколько наборов данных, которые дискретизированы в одних и тех же координатах точки, то можно пройти v
как массив. Каждый столбец массива v
содержит другой набор 1-D выборочных значений.
задает стратегию оценки точек, находящихся вне области 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
- Точки выборкиТочки выборки, заданная как строка или вектор-столбец вещественных чисел. Значения в 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
является матрицей или массивом, затем каждый столбец содержит отдельный набор 1-D значений.
Если 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 |
|
| Кубическая свертка, используемая в MATLAB® 5. |
C1 |
|
| То же, что и |
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). Алгоритм сохраняет уклон и избегает волнообразных в плоских областях. Плоская область возникает каждый раз, когда существует три или более последовательных коллинеарных точек, которые алгоритм соединяет с прямой линией. Чтобы убедиться, что область между двумя точками данных плоская, вставьте дополнительную точку данных между этими двумя точками.
Когда две плоские области с различными склонами встречаются, изменение, сделанное в исходном алгоритме Akima, дает больше веса стороне, где уклон ближе к нулю. Эта модификация придает приоритет стороне, которая ближе к горизонтали, что более интуитивно понятно и избегает перерегулирования. (Исходный алгоритм Akima дает равные веса точкам с обеих сторон, таким образом равномерно разделяя волнообразие.)
Алгоритм сплайна, с другой стороны, выполняет кубическую интерполяцию, чтобы получить кусочные полиномы с непрерывными производными второго порядка (C2). Результат сопоставим с регулярной полиномиальной интерполяцией, но менее восприимчив к тяжелым колебаниям между точками данных для высоких степеней. Тем не менее, этот метод может быть восприимчивым к перерегулированиям и колебаниям между точками данных.
По сравнению с алгоритмом сплайна, алгоритм Akima производит меньше волн и лучше подходит для борьбы с быстрыми изменениями между плоскими областями. Это различие проиллюстрировано ниже с использованием тестовых данных, которые соединяют несколько плоских областей.
'cubic'
метод interp1
выполняет кубическую сверткуПоведение изменено в R2020b
В R2020b, 'cubic'
метод интерполяции interp1
выполняет кубическую свертку. The 'v5cubic'
и 'cubic'
методы интерполяции теперь выполняют тот же тип интерполяции, что согласуется с поведением interp2
, interp3
, и interpn
. Метод кубической свертки интерполяции предназначен для равномерно распределенных данных, и он падает назад к 'spline'
интерполяция для данных с нерегулярными интервалами.
В предыдущих релизах 'cubic'
был таким же, как 'pchip'
и только 'v5cubic'
выполнена кубическая свертка.
[1] Акима, Хироси. «Новый метод интерполяции и сглаживания аппроксимирования кривыми на основе локальных процедур». Журнал ACM (JACM), 17.4, 1970, стр. 589-602.
[2] Акима, Хироси. Метод двухмерной интерполяции и сглаживания поверхностных подборов кривой, основанный на локальных процедурах. Сообщения АКМ, 17.1, 1974, стр. 18-20.
Указания и ограничения по применению:
Генерация кода не поддерживает 'cubic'
или 'makima'
методы интерполяции.
Входной параметр x
(точки расчета) должны быть строго увеличиваться или строго уменьшаться. Индексы не переупорядочиваются.
Если входной параметр v
(выборка значения) является вектором переменной длины (1-by- :
или :
-by-1), затем форма выхода vq
соответствует форме в MATLAB.
Если входной параметр v
является переменным размером, не является вектором переменной длины и становится вектором-строкой во время выполнения, затем возникает ошибка.
Если входной параметр xq
(точки запроса) имеет переменный размер, не является вектором переменной длины и становится вектором-столбцом во время выполнения, затем возникает ошибка.
Смотрите информацию о генерации кода функций тулбокса (MATLAB Coder) в разделе «Ограничения переменных размеров».
Указания и ограничения по применению:
Генерация кода не поддерживает 'cubic'
или 'makima'
методы интерполяции.
Входной параметр x
(точки расчета) должны быть строго увеличиваться или строго уменьшаться. Индексы не переупорядочиваются.
Если входной параметр v
(выборка значения) является вектором переменной длины (1-by- :
или :
-by-1), затем форма выхода vq
соответствует форме в MATLAB.
Если входной параметр v
является переменным размером, не является вектором переменной длины и становится вектором-строкой во время выполнения, затем возникает ошибка.
Если входной параметр xq
(точки запроса) имеет переменный размер, не является вектором переменной длины и становится вектором-столбцом во время выполнения, затем возникает ошибка.
Смотрите информацию о генерации кода функций тулбокса (MATLAB Coder) в разделе «Ограничения переменных размеров».
Указания и ограничения по применению:
method
должен быть 'linear'
, 'nearest'
, 'cubic'
, 'v5cubic'
, или 'spline'
.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите Запуск функций MATLAB с распределенными массивами (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.