Модифицированный Акима кусочная кубическая интерполяция Эрмита
Используйте 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,'--')
С колебательными функциями алгоритм Акима сглаживает кривую около локальных экстремальных значений. Чтобы компенсировать это выравнивание, можно добавить более точки выборки около локальных экстремальных значений.
Добавьте точки выборки рядом и и повторно постройте интерполяцию.
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
для двух различных наборов данных. Эти функции все выполняют различные формы кусочной кубической интерполяции Эрмита. Каждая функция отличается по тому, как она вычисляет наклоны interpolant, ведя к различным поведениям, когда базовые данные имеют плоские области или волнистости.
Сравните результаты интерполяции на выборочных данных, которые соединяют плоские области. Создайте векторы из 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
'SamplePoints' Точки выборки в виде вектора. Векторный 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). Алгоритм избегает чрезмерных локальных волнистостей.
Если наклон на интервале , затем значение производной в точке выборки взвешенное среднее соседних наклонов:
В исходной формуле Акима веса:
Исходный алгоритм Акима дает равный вес точкам с обеих сторон, равномерно деля волнистость.
Когда две плоских области с различными наклонами встречаются, модификация, сделанная к исходному алгоритму Акима, дает больше веса стороне, где наклон ближе к нулю. Эта модификация уделяет первостепенное значение стороне, которая ближе к горизонтали, которая более интуитивна и избегает перерегулирования. В частности, каждый раз, когда существует три или больше последовательных коллинеарных точки, алгоритм соединяет их прямой линией и таким образом избегает перерегулирования.
Веса, используемые в модифицированном алгоритме Акима:
По сравнению с spline
алгоритм, алгоритм Акима производит меньше волнистостей и лучше подходит для соглашения с быстрыми изменениями между плоскими областями. По сравнению с pchip
алгоритм, алгоритм Акима как настойчиво не сглаживается и поэтому все еще может иметь дело с колебательными данными.
[1] Акима, Хироши. "Новый метод интерполяции и плавной кривой, соответствующей на основе локальных процедур". Журнал ACM (JACM), 17.4, 1970, стр 589–602.
[2] Акима, Хироши. "Метод двумерной интерполяции и сглаженной поверхности, соответствующей на основе локальных процедур". Коммуникации ACM, 17.1, 1974, стр 18–20.
backgroundPool
или ускорьте код с Parallel Computing Toolbox™ ThreadPool
.Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
Указания и ограничения по применению:
makima (
синтаксис не поддерживается для распределенных массивов.x
Y
)
Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.