interp1

1-D интерполяция данных (поиск таблицы)

Описание

пример

vq = interp1(x,v,xq) возвращает интерполированные значения функции 1-D в определенных точках запроса с помощью линейной интерполяции. Векторные x содержит выборочные точки и v содержит соответствующие значения, v (x). Векторные xq содержит координаты точек запроса.

Если у вас есть несколько наборов данных, которые дискретизированы в одних и тех же координатах точки, то можно пройти v как массив. Каждый столбец массива v содержит другой набор 1-D выборочных значений.

пример

vq = interp1(x,v,xq,method) задает альтернативный метод интерполяции: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'v5cubic', 'makima', или 'spline'. Метод по умолчанию 'linear'.

пример

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

vq = interp1(v,xq,method,extrapolation) задает стратегию экстраполяции и использует точки выборки по умолчанию.

pp = interp1(x,v,method,'pp') возвращает кусочный полином форму v (x) с помощью 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');

Figure contains an axes. The axes with title (Default) Linear Interpolation contains 2 objects of type line.

Теперь оцените v в тех же точках, где используется 'spline' способ.

figure
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('Spline Interpolation');

Figure contains an axes. The axes with title Spline Interpolation contains 2 objects of type line.

Задайте набор значений функций.

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent v, vq.

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

x = 1:10;

Задайте значения функции, v(x)=5x+x2i, в точки выборки.

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

Figure contains an axes. The axes contains 4 objects of type line.

Интерполяция маркированных по времени точек данных.

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

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')

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

Интерполируйте набор данных, чтобы предсказать показания температуры в течение каждой минуты дня. Поскольку данные являются периодическими, используйте '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')

Figure contains an axes. The axes contains 2 objects of type line.

Задайте точки выборки, 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;

Figure contains an axes. The axes contains 6 objects of type line.

Круги на графике представляют v, и сплошные линии представляют vq.

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

свернуть все

Точки выборки, заданная как строка или вектор-столбец вещественных чисел. Значения в 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 является матрицей или массивом, затем каждый столбец содержит отдельный набор 1-D значений.

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

Пример: rand(1,10)

Пример: rand(10,1)

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

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

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

Пример: 5

Пример: 1:0.05:10

Пример: (1:0.05:10)'

Пример: [0 1 2 7.5 10]

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

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

Метод

Описание

Непрерывность

Комментарии

'linear'

Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних точках сетки в каждой соответствующей размерности. Это метод интерполяции по умолчанию.

C0

  • Требуется не менее 2 точки

  • Требуется больше памяти и времени расчета, чем у ближайшего соседа

'nearest'

Интерполяция по ближайшему соседу. Интерполированное значение в точке запроса является значением в ближайшей точке сетки расчета.

Прерывистый

  • Требуется не менее 2 точки

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

  • Самое быстрое время расчета

'next'

Следующая соседняя интерполяция. Интерполированное значение в точке запроса является значением в следующей точке сетки расчета.

Прерывистый

  • Требуется не менее 2 точки

  • Те же требования к памяти и времени расчета, что и 'nearest'

'previous'

Предыдущая соседняя интерполяция. Интерполированное значение в точке запроса является значением в предыдущей точке сетки образца.

Прерывистый

  • Требуется не менее 2 точки

  • Те же требования к памяти и времени расчета, что и 'nearest'

'pchip'

Кусочно-кубическая интерполяция с сохранением формы. Интерполированное значение в точке запроса основано на кусочно-кубической интерполяции значений в соседних точках сетки с сохранением формы.

C1

  • Требуется не менее 4 точки

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

'cubic'

Кубическая свертка, используемая в MATLAB® 5.

C1

  • Требуется не менее 3 точки

  • Точки должны быть равномерно разнесены

  • Этот метод возвращается к 'spline' интерполяция для данных с нерегулярными интерполяциями

  • Аналогичные требования к памяти и времени расчета как 'pchip'

'v5cubic'

То же, что и 'cubic'.

C1

'makima'

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

C1

  • Требуется не менее 2 точки

  • Производит меньше волн, чем 'spline', но не уплощается так агрессивно, как 'pchip'

  • Расчеты стоят дороже 'pchip', но обычно меньше 'spline'

  • Требования к памяти аналогичны требованиям к 'spline'

'spline'

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

C2

  • Требуется не менее 4 точки

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

Стратегия экстраполяции, заданная как 'extrap' или действительное скалярное значение.

  • Задайте 'extrap' когда вы хотите interp1 для вычисления точек вне области с помощью того же метода, который он использует для интерполяции.

  • Задайте скалярное значение, когда хотите interp1 для возврата определенного постоянного значения для точек вне области.

Поведение по умолчанию зависит от входных параметров:

  • Если вы задаете 'pchip', 'spline', или 'makima' методы интерполяции, тогда поведение по умолчанию 'extrap'.

  • Все другие методы интерполяции возвращаются NaN по умолчанию для точек запроса вне области.

Пример: 'extrap'

Пример: 5

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

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

свернуть все

Интерполированные значения, возвращенные как скаляр, вектор, матрица или массив. Размер 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].

Кусочный полином, возвращенная как структура, которую можно передать в ppval функция для оценки.

Подробнее о

свернуть все

Интерполяция Акима и Сплайн

Алгоритм Акимы для одномерной интерполяции, описанный в [1] и [2], выполняет кубическую интерполяцию, чтобы получить кусочные полиномы с непрерывными производными первого порядка (C1). Алгоритм сохраняет уклон и избегает волнообразных в плоских областях. Плоская область возникает каждый раз, когда существует три или более последовательных коллинеарных точек, которые алгоритм соединяет с прямой линией. Чтобы убедиться, что область между двумя точками данных плоская, вставьте дополнительную точку данных между этими двумя точками.

Когда две плоские области с различными склонами встречаются, изменение, сделанное в исходном алгоритме Akima, дает больше веса стороне, где уклон ближе к нулю. Эта модификация придает приоритет стороне, которая ближе к горизонтали, что более интуитивно понятно и избегает перерегулирования. (Исходный алгоритм Akima дает равные веса точкам с обеих сторон, таким образом равномерно разделяя волнообразие.)

Алгоритм сплайна, с другой стороны, выполняет кубическую интерполяцию, чтобы получить кусочные полиномы с непрерывными производными второго порядка (C2). Результат сопоставим с регулярной полиномиальной интерполяцией, но менее восприимчив к тяжелым колебаниям между точками данных для высоких степеней. Тем не менее, этот метод может быть восприимчивым к перерегулированиям и колебаниям между точками данных.

По сравнению с алгоритмом сплайна, алгоритм Akima производит меньше волн и лучше подходит для борьбы с быстрыми изменениями между плоскими областями. Это различие проиллюстрировано ниже с использованием тестовых данных, которые соединяют несколько плоских областей.

Вопросы совместимости

расширить все

Поведение изменено в R2020b

Ссылки

[1] Акима, Хироси. «Новый метод интерполяции и сглаживания аппроксимирования кривыми на основе локальных процедур». Журнал ACM (JACM), 17.4, 1970, стр. 589-602.

[2] Акима, Хироси. Метод двухмерной интерполяции и сглаживания поверхностных подборов кривой, основанный на локальных процедурах. Сообщения АКМ, 17.1, 1974, стр. 18-20.

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

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