interp1 одномерная интерполяция в режиме nearest, linear или spline

## Синтаксис

              yp = interp1(y, xp)
              yp = interp1(x, y, xp)
              yp = interp1(.., xp, method)
              yp = interp1(.., xp, method, extrapolation)

## Аргументы

x
  вектор по меньшей мере из двух вещественных чисел: ось абсцисс известных узлов интерполяции, без повторов. По умолчанию
  - если `y` является вектором: `x=1:length(y)`.
  - если `y` является матрицей или гиперматрицей: `x=1:size(y,1)`.

y
  вектор, матрица или гиперматрица вещественных или комплексных чисел: значения в узлах интерполяции в соответствующих значениях оси абсцисс `x`.
  - если `y` является вектором, то `x` и `y` должны быть одной длины.
  - если `y` является матрицей или гиперматрицей, то мы должны иметь `length(x)==size(y,1)`. Каждый столбец `y` тогда интерполирован в зависимости от тех же значений оси абсцисс `x`, для указанного `xp`.

xp
  скаляр, вектор, матрица или гиперматрица десятичных чисел: ось абсцисс точек, чьи значения `yp` должны быть вычислены в соответствии с данными узлов интерполяции.

yp
  вектор, матрица или гиперматрица чисел: интерполированные значения `y` в указанном `xp`.
  - если `y` является вектором: `yp` имеет размер `xp`.

  - если `y` является матрицей или гиперматрицей:
    - если `xp` является скаляром или вектором: `size(yp)` равен `[length(xp) size(y)(2:$)]`
    - если `xp` является матрицей или гиперматрицей: `size(yp)` равен `[size(xp) size(y)(2:$)]`

method
  строковое значение, определяющее метод интерполяции. Возможными значениями и обработкой являются:

  "linear": | линейная интерполяция между последовательными узлами, используется по умолчанию.
  "spline": | интерполяция кубическими сплайнами
  "nearest": | для каждого значения `xp(j)` `yp(j)` принимает значение `y(i)`, соответствующее `x(i)`, ближайшего соседа `xp(j)`

extrapolation
  строковое значение или число, определяющее элементы `yp(j)` для значений `xp(j)` за пределами интервала `[x(1)=min(x),x($)=max(x)]`. Мы полагаем здесь и далее, что `x` и `y` уже соответственно отсортированы.

  "extrap": | `interp1(x,y,xp, method, "extrap")` эквивалентен `interp1(x,y,xp, method, method)`.
  "linear": | Может использоваться с методами интерполяции `"spline"` (и, очевидно, `"linear"`).
  "periodic": | Этот тип экстраполяции может использоваться с методами интерполяции `"linear"` или `"spline"`. Тогда: если `y` является вектором, то требуется, чтобы `y(1)==y($)`; в противном случае требуется, чтобы `y(1,:)==y($,:)`.
  "edgevalue": | Тогда `yp(i)=y(1)` для каждого `xp(i)<x(1)`, и `yp(i)=y($)` для каждого `xp(i)>x($)`.
  padding: | `padding` является десятичным или комплексным числом, используемым для установки `yp(i)=padding` для каждого `xp(i) ∉ [min(x),max(x)]`. Например: `yi=interp1(x,y,xp,method, 0)`.
  (none): | По умолчанию экстраполяция выполняется сплайнами, когда сплайны используются для интерполяции и дополнением значениями `%nan`, если интерполяция линейна или по "ближайшему" узлу.

## Описание

Указывая `(x,y,xp)`, данная функция вычисляет элементы `yp`, соответствующие `xp` с помощью интерполяции между известными данными, указанными в узлах `(x,y)`.

`x` предварительно отсортирован в порядке возрастания, а значения `y` либо по столбцам тогда сортируются соответственно.

Интерполяция комплексных значений: Если `y` является комплексным, то его вещественная и мнимая части интерполируются отдельно, и потом суммируются для формирования комплексного `yp`.

interp1(x,y,xp,"nearest"): Для любого `xp` в середине интервала `[x(i),x(i+1)]` верхняя граница `x(i+1)` рассматривается как ближайшее значение `x`, и присваивается `yp=y(i+1)`.

### линейные интерполяции

Они выполняются через функцию `linear_interpn(..)`, с соответствующей опцией интерполяции `"edgevalue"→"C0"`, `"linear"→"natural"`, `"periodic"→"periodic"`.

### интерполяции сплайнами

interp1(..,xp,"spline") или interp1(..,xp,"spline","spline") или interp1(..,xp,"spline","extrap") используют условия граней `не_узел`. Экстраполяция выполняется с помощью обоих сплайновых полиномов, вычисленных на гранях `(x,y)`.

interp1(..,xp,"spline","edgevalue") использует условия граней `не_узел`, а затем вызывает `interp(..,"C0")`, чтобы выполнить фактическую интерполяцию и экстраполяцию.

interp1(..,xp,"spline","periodic") вызывает оба `splin(..)`, а затем `interp(..)` с их опцией `"periodic"`.

interp1(..,xp,"spline","linear") вызывает `splin(..,"natural")` для условий линейных граней, а затем передаётся в `interp(..,"linear")`.

## Примеры

    x = linspace(0, 10, 11)';
    y = sin(x);
    xx = linspace(0,10,1000)';
    yy2 = interp1(x, y, xx, 'linear');
    yy1 = interp1(x, y, xx, 'nearest');
    yy3 = interp1(x, y, xx, 'spline');
    clf
    h = plot(xx, [yy1 yy2 yy3], x, y, '.')
    h(1).mark_size = 8;
    title "Interpolation of a poorly sampled sin() function" fontsize 3
    legend(['nearest','linear','spline','nodes'], "in_lower_left");

x = linspace(0, 10, 11)'; y = sin(x); xx = linspace(0,10,1000)'; yy2 = interp1(x, y, xx, 'linear'); yy1 = interp1(x, y, xx, 'nearest'); yy3 = interp1(x, y, xx, 'spline'); clf h = plot(xx, [yy1 yy2 yy3], x, y, '.') h(1).mark_size = 8; title "Interpolation of a poorly sampled sin() function" fontsize 3 legend(['nearest','linear','spline','nodes'], "in_lower_left"); gcf().axes_size = [600 400];

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

- interp
- splin
- linear_interpn

## История

6.1.1

- Для комплексных значений `y`, `imag(y)` более не игнорируется: `real(y)` и `imag(y)` части интерполируются раздельно.
- Экстраполяция `"periodic"` добавлена для линейной и сплайновой интерполяций.
- Экстраполяция `"edgevalue"` добавлена для всех интерполяций ближайшего соседа, линейной и сплайновой.
- Экстраполяция `"linear"` добавлена для сплайновой интерполяции.
- Когда `xp` является гиперматрицей и `size(xp,1)==1`, `size(yp)` теперь всегда `[size(xp) size(y)(2,$)` вместо `[size(xp,2:$), size(y)(2,$)`.