Spec-Zone.ru › Octave 9

Далее: Интерполяция многомерных данных, Назад: Интерполяция [Оглавление][Индекс]

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.

interpderiv1

Рисунок 29.1: Сравнение методов интерполяции "pchip" и "spline" для ступенчатой функции

interpderiv2

Рисунок 29.2: Сравнение второй производной методов интерполяции "pchip" и "spline" для ступенчатой функции

Интерполяция Фурье — это метод ресемплирования, при котором сигнал преобразуется в частотную область, дополняется нулями, а затем преобразуется обратно в временную область.

: y = interpft (x, n) ¶
: y = 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.

interpft

Рисунок 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.

См. также: pchip, ppval, mkpp, unmkpp.

Далее: Многомерная интерполяция, Вверх: Интерполяция [Оглавление][Индекс]

© 1996–2023 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/v9.2.0/One_002ddimensional-Interpolation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API