Модифицированная кусочно-кубическая эрмитовая интерполяция Акимы
Использовать 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,'--')

С помощью колебательных функций алгоритм Акимы сглаживает кривую вблизи локальных экстремумов. Чтобы компенсировать это сведение, можно добавить больше точек выборки вблизи локальных экстремумов.
Добавьте точки выборки около 6,5 = 9 и повторите интерполяцию.
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], соответствующий многочлен
2 + c (x − x1) + d.
Алгоритм Акимы для одномерной интерполяции, описанный в [1] и [2], выполняет кубическую интерполяцию для получения кусочных многочленов с непрерывными производными первого порядка (С1). Алгоритм позволяет избежать чрезмерных локальных волнообразий.
Если vixi + 1 − xi - наклон на [xi xi + 1), то значение производной di в точке выборки xi является средневзвешенным близлежащих откосов:
w2w1 + w2δi.
В первоначальной формуле Акимы весами являются:
δi − 1 − δi − 2 |.
Исходный алгоритм Акимы даёт равный вес точкам с обеих сторон, равномерно деля волнообразную форму.
Когда встречаются две плоские области с разными уклонами, модификация, сделанная для исходного алгоритма Акимы, придает больший вес той стороне, где наклон ближе к нулю. Эта модификация отдает приоритет стороне, которая ближе к горизонтали, которая более интуитивна и позволяет избежать перестрелки. В частности, всякий раз, когда имеются три или более последовательных коллинеарных точек, алгоритм соединяет их с прямой линией и, таким образом, избегает перестрелки.
В модифицированном алгоритме Акимы используются следующие веса:
− 1 − δi − 2 | + | δi − 1 + δi − 2 | 2.
По сравнению с spline алгоритм Akima производит меньше волнистости и лучше подходит для работы с быстрыми изменениями между плоскими областями. По сравнению с pchip алгоритм Акимы не так агрессивно сглажен и, следовательно, все еще способен работать с колебательными данными.
[1] Акима, Хироси. «Новый метод интерполяции и сглаживания подгонки кривой на основе локальных процедур». Журнал ACM (JACM), 17.4, 1970, стр. 589-602.
[2] Акима, Хироси. «Метод двухмерной интерполяции и гладкой подгонки поверхности на основе локальных процедур». Сообщения АСМ, 17.1, 1974, стр. 18-20.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.