csapi

Кубическая сплайн интерполяция

Описание

пример

Примечание

Для более простого, но менее гибкого метода интерполяции кубических сплайнов попробуйте приложение Аппроксимирование Кривыми или fit и см. О сглаживании сплайнов.

pp=csapi(x,y) возвращает ppform кубического сплайна, s с последовательностью узлов x который принимает значения y(:,j) при x(j) для j=1:length(x). Значения y(:,j) могут быть скалярами, векторами, матрицами и ND-массивами. Функция усредняет точки данных с тем же сайтом данных, а затем сортирует их по сайтам. С x получившиеся отсортированные сайты данных, сплайн s удовлетворяет граничным условиям и условиям отсутствия узла, таким как

jumpx(2)Ds3=0=jumpx(end1)D3(s)

где D3s является третьей производной s.

Если x - массив ячеек из последовательностей x1..., xm длин n1..., nm, затем y - массив размера [n1,...,nm] (или размера [d,n1,...,nm] если interpolant d-значен). В этом случае pp является ppform m- кубическая сплайн интерполяция, s к таким данным. В частности,

s(x(i1),,x(im))=y(:,i1,,im)

с i1=1:nl и im=1:nm.

Чтобы выполнить операции на этом интерполирующем кубическом сплайне, таком как вычисление, дифференциация, графическое изображение, используйте структуру pp. Для получения дополнительной информации смотрите fnval, fnder, fnplt функций.

пример

values = csapi(x,y,xx) возвращает значения сглаживающего сплайна, рассчитанные в точках xx. Этот синтаксис аналогичен fnval(csapi(x,y),xx).

Эта команда по существу является MATLAB® функция spline, которая, в свою очередь, является урезанной версией стандартной программы Фортран CUBSPL в PGS, кроме того csapi (и теперь также spline) принимает векторные данные и может обрабатывать сетчатые данные.

Примеры

свернуть все

В этом примере показано, как использовать csapi команда из Curve Fitting Toolbox™, чтобы создать кубические сплайн интерполяции.

Интерполяция в две точки

Команда

values = csapi(x,y,xx)

возвращает значения в xx кубической сплайн интерполяции к данным (x,y), используя граничное условие, не являющееся узлом. Эта интерполяция является кусочно-кубической функцией с последовательностью пропусков x, чьи кубические кусочки соединяются вместе, чтобы сформировать функцию с двумя непрерывными производными. Граничное условие «не-узел» означает, что на первом и последнем внутренних пропусках даже третья производная непрерывна (до округления ошибки).

Установка только двух точек данных, результатов в прямой линии интерполяции.

x = [0 1];
y = [2 0];
xx = linspace(0,6,121);
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Two Points')

Figure contains an axes. The axes with title Interpolant to Two Points contains 2 objects of type line.

Интерполяция по трем точкам

Если вы задаете три точки данных, функция выводит параболу.

x = [2 3 5];
y = [1 0 4];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Three Points')

Figure contains an axes. The axes with title Interpolant to Three Points contains 2 objects of type line.

Интерполяция по пяти точкам

В более общем случае, если вы задаете четыре или пять точек данных, функция выводит кубический сплайн.

x = [1 1.5 2 4.1 5];
y = [1 -1 1 -1 1];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Cubic Spline Interpolant to Five Points')

Figure contains an axes. The axes with title Cubic Spline Interpolant to Five Points contains 2 objects of type line.

Вплоть до ошибок округления и принятия этого x вектор с по крайней мере четырьмя записями, оператор pp = csapi(x,y) поместите тот же сплайн в pp как и оператор:

pp = fn2fm(spapi(augknt(x([1 3:(end-2) end]),4),x,y),'pp');

кроме того, что описание сплайна, полученного этим вторым способом, не будет использовать break at x(2) и x(n-1).

Как простой двухмерный пример, постройте график бикубической сплайн интерполяции к мексиканской функции Hat:

x =.0001+[-4:.2:4]; 
y = -3:.2:3;
[yy,xx] = meshgrid(y,x);
r = pi*sqrt(xx.^2+yy.^2); 
z = sin(r)./r;
bcs = csapi( {x,y}, z ); 
fnplt( bcs ) 
axis([-5 5 -5 5 -.5 1])

Figure contains an axes. The axes contains an object of type surface.

Поскольку MATLAB ® рассматривает запись z(i,j) как значение в (x(j), y(i)), код сторнируется x и y в вызове meshgrid. Curve Fitting Toolbox ® вместо этого следует стандарту теории аппроксимации, тогда как z(i,j) - значение в (x(i), y(j)).

По этой причине вы должны быть осторожны, когда вы строите графики значений такого двухмерного сплайна с помощью MATLAB mesh функция, как показано здесь:

xf = linspace(x(1),x(end),41); 
yf = linspace(y(1),y(end),41);
mesh(xf, yf, fnval( bcs, {xf, yf}).')

Figure contains an axes. The axes contains an object of type surface.

Обратите внимание на использование транспонирования матрицы значений, полученных из fnval.

Входные параметры

свернуть все

Сайты данных значений данных y для подгонки, заданной как вектор или как массив ячеек для многомерных данных. Сплайн f создается с узлами в каждом сайте данных x таким образом f (x(j)) = y(:,j) для всех значений j.

Для многомерных данных с сеткой можно задать x как массив ячеек, который задает узел данных в каждой переменной размерности: f (x1(i),x2(j),...xn(k)) = y(:,i,j,...,k).

Типы данных: single | double

Значения данных для подгонки во время создания сплайна, заданные как вектор, матрица или массив. Значения данных y(:,j) могут быть скалярами, матрицами или n -мерными массивами. Значения данных, заданные на том же сайте данных x усредняются.

Типы данных: single | double

Оценочные точки, над которыми вычисляется сплайн, заданные как вектор или как массив ячеек векторов для многомерных данных. Оценка сплайна выполняется с помощью fnval.

Типы данных: single | double

Выходные аргументы

свернуть все

Сплайн в ppform, возвращается как структура с этими полями. Для получения дополнительной информации о ppform смотрите The ppform.

Форма сплайна, возвращенная как pp. pp указывает, что сплайн задан в кусочный полином форме.

Узловые положения сплайна, возвращенные как вектор или как массив ячеек векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют начало и конец каждого из интервалов, над которыми заданы полиномиальные части.

Коэффициенты полиномов для каждой части, возвращенные как матрица или как массив для многомерных данных.

Количество полиномиальных частей, описывающих сплайн, возвращаемое в виде скаляра или в виде вектора из числа частей в каждой переменной для многомерных данных.

Порядок полиномиальной функции, описывающей каждую полиномиальную часть сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.

Размерность целевой функции, возвращенной как скаляр.

Вычисленный сплайн, возвращенный как вектор или как матрица или массив для многомерных данных. Сплайн оценивается в заданных точках оценки xx.

Алгоритмы

csapi является реализацией стандартной программы Фортран CUBSPL от PGS.

Алгоритм создает и решает соответствующую тридиагональную линейную систему, используя разреженную матрицу MATLAB.

Алгоритм также использует граничное условие не узла, заставляя первую и вторую полиномиальные части интерполяции совпадать, а также второе к последнему и последнее полиномиальные части.

Введенный в R2006b