exponenta event banner

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 (конец − 1) D3 (ы)

где D3s - третья производная s.

Если x - клеточный массив последовательностей x1, ..., xm длин n1, ..., nm, то y является массивом размера [n1,...,nm] (или размера [d,n1,...,nm] если интерполятор d-значение). В этом случае pp является ppform m-cubic spline interpolant 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, которая, в свою очередь, является урезанной версией подпрограммы Fortran CUBSPL в PGS, за исключением того, что csapi (и теперь также spline) принимает векторные данные и может обрабатывать данные с сеткой.

Примеры

свернуть все

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

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

Команда

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');

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

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

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) ® следует стандарту «Теория аппроксимации» (Approximation Theory), тогда как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 см. в разделе Ppform.

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

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

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

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

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

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

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

Алгоритмы

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

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

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

Представлен в R2006b