exponenta event banner

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'

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

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], выполняет кубическую интерполяцию для получения кусочных многочленов с непрерывными производными первого порядка (С1). Алгоритм сохраняет наклон и избегает волнистости в плоских областях. Плоская область возникает всякий раз, когда существуют три или более последовательных коллинеарных точек, которые алгоритм соединяет прямой линией. Чтобы обеспечить плоскую область между двумя точками данных, вставьте дополнительную точку данных между этими двумя точками.

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

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

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

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

развернуть все

В R2020b изменилось поведение

Ссылки

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

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

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

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