29.1 Одномерная интерполяция
Octave поддерживает несколько методов одномерной интерполяции, большинство из которых описаны в этом разделе. Полиномиальная интерполяция и Интерполяция на рассеянных данных описывают дополнительные методы.
- yi = interp1 (x, y, xi)
- yi = interp1 (y, xi)
- yi = interp1 (…, method)
- yi = interp1 (…, extrap)
- yi = interp1 (…, "left")
- yi = interp1 (…, "right")
- pp = interp1 (…, "pp")
-
Одномерная интерполяция.
Интерполирует входные данные, чтобы определить значение yi в точках xi. Если не указано, x принимается как индексы y (
1:length (y)). Если y является матрицей или N-мерным массивом, интерполяция выполняется по каждой колонке y.Метод интерполяции method может быть одним из следующих:
"nearest"-
Возвращает ближайшего соседа.
"previous"-
Возвращает предыдущего соседа.
"next"-
Возвращает следующего соседа.
-
"linear"(по умолчанию) -
Линейная интерполяция от ближайших соседей.
"pchip"-
Кубический полином Эрмита (кубическая интерполяция Эрмита)—интерполяция, сохраняющая форму с плавным первым производным.
"cubic"-
Кубическая интерполяция (такая же, как
"pchip"). "spline"Кубическая интерполяция сплайном — плавные первая и вторая производные по всей кривой.
Добавление «*» в начало любого метода выше заставляет
interp1предполагать, что x равномерно распределен, и используются толькоx(1)иx(2). Это обычно быстрее и никогда не медленнее. Метод по умолчанию —"linear".Если extrap — строка
"extrap", то значения за пределами конечных точек экстраполируются с использованием текущего method. Если extrap — число, то значения за пределами конечных точек заменяются этим числом. Если не указано, extrap по умолчаниюNA.Если указан строковый аргумент
"pp", то xi не должно быть указано, иinterp1возвращает объект кускового полинома. Этот объект позже может быть использован сppvalдля оценки интерполяции. Существует эквивалентность, такая чтоppval (interp1 (x, y, method,."pp"), xi) == interp1 (x, y, xi, method,"extrap")Повторяющиеся точки в x определяют разрывную интерполяцию. Может быть не более 2 последовательных точек с одинаковым значением. Если x возрастает, по умолчанию разрывная интерполяция является правонепрерывной. Если x убывает, по умолчанию разрывная интерполяция является левонепрерывной. Условие непрерывности интерполянта может быть указано с помощью параметров
"left"или"right"для выбора левонепрерывного или правонепрерывного интерполянта, соответственно. Разрывная интерполяция допускается только для методов"nearest"и"linear"; во всех остальных случаях значения x должны быть уникальными.Пример использования
interp1:xf = [0:0.05:10]; yf = sin (2*pi*xf/5); xp = [0:10]; yp = sin (2*pi*xp/5); lin = interp1 (xp, yp, xf); near = interp1 (xp, yp, xf, "nearest"); pch = interp1 (xp, yp, xf, "pchip"); spl = interp1 (xp, yp, xf, "spline"); plot (xf,yf,"r", xf,near,"g", xf,lin,"b", xf,pch,"c", xf,spl,"m", xp,yp,"r*"); legend ("original", "nearest", "linear", "pchip", "spline");См. также: pchip, spline, interpft, interp2, interp3, interpn.
Существуют некоторые важные различия между различными методами интерполяции. Метод "spline" обеспечивает непрерывность первой и второй производной интерполированных значений, в то время как другие методы этого не делают. Это означает, что результаты метода "spline" обычно более гладкие. Если интерполируемая функция фактически гладкая, то "spline" даст отличные результаты. Однако, если интерполируемая функция каким-либо образом разрывна, то интерполяция "pchip" может дать лучшие результаты.
Это можно продемонстрировать кодом:
t = -2:2;
dt = 1;
ti =-2:0.025:2;
dti = 0.025;
y = sign (t);
ys = interp1 (t,y,ti,"spline");
yp = interp1 (t,y,ti,"pchip");
ddys = diff (diff (ys)./dti) ./ dti;
ddyp = diff (diff (yp)./dti) ./ dti;
figure (1);
plot (ti,ys,"r-", ti,yp,"g-");
legend ("spline", "pchip", 4);
figure (2);
plot (ti,ddys,"r+", ti,ddyp,"g*");
legend ("spline", "pchip");
Результат которого можно увидеть на рисунке 29.1 и 29.2.
Рисунок 29.1: Сравнение методов интерполяции "pchip" и "spline" для ступенчатой функции
Рисунок 29.2: Сравнение второй производной методов интерполяции "pchip" и "spline" для ступенчатой функции
Интерполяция Фурье — это метод ресемплирования, где сигнал преобразуется в частотную область, дополняется нулями, а затем преобразуется обратно во временную область.
- interpft (x, n)
- interpft (x, n, dim)
-
Интерполяция Фурье.
Если x — вектор, то x пересэмплируется до n точек. Данные в x предполагаются равноотстоящими. Если x — матрица или N-мерный массив, интерполяция выполняется по каждой колонке x.
Если dim указан, то интерполяция выполняется вдоль размерности dim.
interpftпредполагает, что интерполируемая функция периодична, и поэтому делаются предположения о конечных точках интерполяции.См. также: interp1.
Существуют два существенных ограничения интерполяции Фурье. Во-первых, функция сигнала предполагается периодической, поэтому непериодические сигналы будут плохо представлены на границах. Во-вторых, как сигнал, так и его интерполяция должны быть сэмплированы в равноотстоящих точках. Пример использования interpft:
t = 0 : 0.3 : pi; dt = t(2)-t(1);
n = length (t); k = 100;
ti = t(1) + [0 : k-1]*dt*n/k;
y = sin (4*t + 0.3) .* cos (3*t - 0.1);
yp = sin (4*ti + 0.3) .* cos (3*ti - 0.1);
plot (ti, yp, "g", ti, interp1 (t, y, ti, "spline"), "b", ...
ti, interpft (y, k), "c", t, y, "r+");
legend ("sin(4t+0.3)cos(3t-0.1)", "spline", "interpft", "data");
который демонстрирует плохое поведение интерполяции Фурье для непериодических функций, как можно увидеть на рисунке 29.3.
Рисунок 29.3: Сравнение interp1 и interpft для непериодических данных
Кроме того, вспомогательные функции spline и lookup, лежащие в основе функции interp1, могут быть вызваны напрямую.
- pp = spline (x, y)
- yi = spline (x, y, xi)
-
Возвращает кубический сплайн-интерполянт точек x и y.
При вызове с двумя аргументами возвращает кусковой полином pp, который может быть использован с
ppvalдля оценки полинома в заданных точках.При вызове с тремя входными аргументами,
splineоценивает сплайн в точках xi. Третья форма вызоваspline (x, y, xi)эквивалентнаppval (spline (x, y), xi).Переменная x должна быть вектором длины n.
y может быть вектором или массивом. Если y — вектор, его длина должна быть либо n, либо
n + 2. Если длина y равна n, то используется условие"not-a-knot"на концах. Если длина y равнаn + 2, то первые и последние значения вектора y являются значениями первой производной кубического сплайна в конечных точках.Если y — массив, то размер y должен иметь вид
[s1, s2, …, sk, n]или[s1, s2, …, sk, n + 2]. Массив преобразуется в матрицу, где ведущая размерность задаётсяs1 * s2 * … * sk, а каждая строка этой матрицы затем обрабатывается отдельно. Обратите внимание, что это прямо противоположноinterp1, но сделано для совместимости с MATLAB.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/One_002ddimensional-Interpolation.html