interp1

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

Описание

пример

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

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

пример

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

Теперь оцените 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(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');

Интерполируйте точки данных, к которым добавляют метку времени.

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

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 должна соответствовать одному из следующих требований:

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

Если 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'

Примечание

Поведение interp1(...,'cubic') изменится в будущем релизе. В будущем релизе этот метод выполнит кубическую свертку.

То же самое как 'pchip'.

C1

Этот метод в настоящее время возвращает тот же результат как 'pchip'

'v5cubic'

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

C1

Точки должны быть однородно расположены с интервалами. 'cubic' заменит 'v5cubic' в будущем релизе

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

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

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

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

Ссылки

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

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

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

Смотрите также

| | |

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