Модифицированная кусочно-кубическая эрмитовая интерполяция Акимы
Использование makima
для интерполяции кривой косинуса по неравномерно разнесенным точкам выборки.
x = [0 1 2.5 3.6 5 7 8.1 10]; y = cos(x); xq = 0:.25:10; yq = makima(x,y,xq); plot(x,y,'o',xq,yq,'--')
С помощью колебательных функций алгоритм Akima уплощает кривую около локальной экстремы. Чтобы компенсировать это уплощение, можно добавить больше точек выборки около локальной экстремы.
Добавьте точек выборки рядом и и повторите интерполяцию.
x = [0 1 2.5 3.6 5 6.5 7 8.1 9 10]; y = cos(x); xq = 0:.25:10; yq = makima(x,y,xq); plot(x,y,'o',xq,yq,'--')
spline
, pchip
, и makima
Сравните результаты интерполяции, полученные spline
, pchip
, и makima
для двух различных наборов данных. Все эти функции выполняют различные формы кусочно-кубической эрмитовой интерполяции. Каждая функция отличается тем, как она вычисляет склоны интерполяции, приводя к различным поведениям, когда базовые данные имеют плоские области или волнообразные.
Сравните результаты интерполяции по выборочным данным, которые соединяют плоские области. Создайте векторы x
значения, значения функций в этих точках y
, и точки запроса xq
. Вычислите интерполяции в точках запроса с помощью spline
, pchip
, и makima
. Постройте график значений интерполированной функции в точках запроса для сравнения.
x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3; p = pchip(x,y,xq1); s = spline(x,y,xq1); m = makima(x,y,xq1); plot(x,y,'o',xq1,p,'-',xq1,s,'-.',xq1,m,'--') legend('Sample Points','pchip','spline','makima','Location','SouthEast')
В этом случае pchip
и makima
имеют аналогичное поведение в том, что они избегают перерегулирования и могут точно соединить плоские области.
Выполните второе сравнение с помощью функции колебательной выборки.
x = 0:15; y = besselj(1,x); xq2 = 0:0.01:15; p = pchip(x,y,xq2); s = spline(x,y,xq2); m = makima(x,y,xq2); plot(x,y,'o',xq2,p,'-',xq2,s,'-.',xq2,m,'--') legend('Sample Points','pchip','spline','makima')
Когда базовая функция является колебательной, spline
и makima
захватить движение между точками лучше, чем pchip
, который агрессивно уплощен около локальной экстремы.
Создайте векторы для точек выборки x
и значения в этих точках y
. Использование makima
для создания структуры кусочного полинома для данных.
x = -5:5; y = [1 1 1 0 0 1 1 2 2 2 2]; pp = makima(x,y)
pp = struct with fields:
form: 'pp'
breaks: [-5 -4 -3 -2 -1 0 1 2 3 4 5]
coefs: [10x4 double]
pieces: 10
order: 4
dim: 1
Структура содержит информацию для 10 полиномов порядка 4, которые охватывают данные. pp.coefs(i,:)
содержит коэффициенты для полинома, который действителен в области, заданной точками останова [breaks(i) breaks(i+1)]
.
Используйте структуру с ppval
чтобы вычислить интерполяцию в нескольких точках запроса, а затем построить график результатов. В областях с тремя или более постоянными точками алгоритм Акимы соединяет точки с прямой линией.
xq = -5:0.2:5; m = ppval(pp,xq); plot(x,y,'o',xq,m,'-.') ylim([-0.2 2.2])
x
- Точки выборкиТочки выборки, заданные как вектор. Векторная x
задает точки, в которых находятся данные y
дается. Элементы x
должен быть уникальным.
Типы данных: single
| double
y
- Значения функций в точках выборкиЗначения функции в точках выборки, заданные как числовой вектор, матрица или массив. x
и y
должна иметь одинаковую длину.
Если y
является матрицей или массивом, затем значениями в последней размерности, y(:,...,:,j)
, приняты как значения, которые совпадают с x
. В этом случае последняя размерность y
должна быть такой же длины, как и x
.
Типы данных: single
| double
xq
- Точки запросаТочки запроса, заданные как скаляр, вектор, матрица или массив. Точки, указанные в xq
являются x -координатами для интерполированных значений функции yq
вычисляется makima
.
Типы данных: single
| double
yq
- Интерполированные значения в точках запросаИнтерполированные значения в точках запроса, возвращенные в виде скаляра, вектора, матрицы или массива. Размер yq
относится к размерам y
и xq
:
Если y
является вектором, тогда yq
имеет тот же размер, что и xq
.
Если y
- массив размера Ny = size(y)
, затем применяются следующие условия:
Если xq
является скаляром или вектором, тогда size(yq)
возвращает [Ny(1:end-1) length(xq)]
.
Если xq
является массивом, тогда size(yq)
возвращает [Ny(1:end-1) size(xq)]
.
pp
- Кусочно-полиномиальныйКусочный полином, возвращается как структура. Используйте эту структуру с ppval
функция для вычисления интерполяции полиномов в одной или нескольких точках запроса. Структура имеет эти поля.
Область | Описание |
---|---|
form |
|
breaks | Вектор длины |
coefs |
|
pieces | Количество штук, |
order | Порядок полиномов |
dim | Размерность цели |
Потому что полиномиальные коэффициенты в coefs
являются локальными коэффициентами для каждого интервала, необходимо вычесть нижнюю конечную точку соответствующего узлового интервала, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d]
по интервалу [x1,x2]
, соответствующий полином является
Алгоритм Акимы для одномерной интерполяции, описанный в [1] и [2], выполняет кубическую интерполяцию, чтобы получить кусочные полиномы с непрерывными производными первого порядка (C1). Алгоритм избегает чрезмерных локальных волн.
Если - наклон по интервалу , затем значение производной в точке выборки - взвешенное среднее значение ближайших склонов:
В исходной формуле Акимы веса:
Исходный алгоритм Akima дает равный вес точкам с обеих сторон, равномерно разделяя волнообразие.
Когда две плоские области с различными склонами встречаются, изменение, сделанное в исходном алгоритме Akima, дает больше веса стороне, где уклон ближе к нулю. Эта модификация отдает приоритет стороне, которая ближе к горизонтали, что более интуитивно понятно и избегает перерегулирования. В частности, всякий раз, когда существует три или более последовательных коллинеарных точек, алгоритм соединяет их с помощью прямой линии и, таким образом, избегает перерегулирования.
Веса, используемые в модифицированном алгоритме Akima:
По сравнению с spline
алгоритм Akima производит меньше волн и лучше подходит для борьбы с быстрыми изменениями между плоскими областями. По сравнению с pchip
алгоритм Akima не так агрессивно уплощен и поэтому все еще способен иметь дело с колебательными данными.
[1] Акима, Хироси. «Новый метод интерполяции и сглаживания аппроксимирования кривыми на основе локальных процедур». Журнал ACM (JACM), 17.4, 1970, стр. 589-602.
[2] Акима, Хироси. Метод двухмерной интерполяции и сглаживания поверхностных подборов кривой, основанный на локальных процедурах. Сообщения АКМ, 17.1, 1974, стр. 18-20.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.