exponenta event banner

spapi

Сплайн-интерполяция

Описание

пример

spline = spapi(knots,x,y) возвращает сплайн f (при наличии) порядка

k = length(knots) - length(x)
с узловой последовательностью knots для которых
(*)  f(x(j)) = y(:,j), all j.
Если некоторые из записей x те же самые, то:

Dm (j) f (x (j)) = y (:, j)

при m (j) = {i < j: x (i) = x (j)} и Dmf m-й производной f. В этом случае r-кратное повторение участка z вx соответствует назначению величины и первых r-1 производных f при z. Чтобы сопоставить среднее значение всех значений данных с одинаковыми данными, вызовите spapi с дополнительным четвертым аргументом.

Значения данных, y(:,j), могут быть скалярами, векторами, матрицами или ND-массивами.

spapi(k,x,y) , с k положительное целое число, указывает требуемый порядок сплайна, k. В этом случае spapi функция вызывает aptknt функция для определения работоспособной, но не обязательно оптимальной узловой последовательности для данных участков x. Другими словами, команда spapi(k,x,y) имеет тот же эффект, что и более явная команда spapi(aptknt(x,k),x,y).

spapi({knork1,...,knorkm},{x1,...,xm},y) возвращает B-форму сплайна тензор-произведение в данные с сеткой. Здесь, каждый knorki является либо узловой последовательностью, либо положительным целым числом, определяющим полиномиальный порядок, используемый в i-я переменная. spapi затем обеспечивает соответствующую последовательность узлов для i-я переменная. Далее, y должен быть (r+m)-размерный массив, с y(:,i1,...,im) опорный элемент для посадки в site [x{1}(i1),...,x{m}(im)], для всех i1, ..., im. В отличие от одномерного случая, если сплайн является скалярным, то y может быть m-мерный массив.

spapi(...,'noderiv') с вектором символов 'noderiv' в качестве четвертого аргумента имеет тот же эффект, что и spapi(...) за исключением того, что значения данных, совместно используемые на одном и том же сайте, интерпретируются по-разному. При наличии четвертого аргумента среднее значение значений данных с одним и тем же сайтом данных интерполируется на таком сайте. Без него значения данных с одним и тем же сайтом данных интерпретируются как значения последовательных производных, которые должны быть сопоставлены в таком сайте, как описано выше, в первом абзаце настоящего Описания.

Примеры

свернуть все

Функция spapi([0 0 0 0 1 2 2 2 2],[0 1 1 1 2],[2 0 1 2 -1]) создает уникальный кубический сплайн f на интервале [0... 2] с точно одним внутренним узлом, на 1, который удовлетворяет пяти условиям

f (0 +) = 2, f (1) = 0, Df (1) = 1, D2f (1) = 2, f (2-) = -1.

Они включают в себя 3-кратное совпадение в 1, то есть совпадение там с предписанными значениями функции и ее первых двух производных.

Вот пример osculatory интерполяции, к значениям y и уклоны s на площадках x по квинтическому сплайну:

sp = spapi(augknt(x,6,2),[x,x,min(x),max(x)],[y,s,ddy0,ddy1]);

с ddy0 и ddy1 значения для второй производной в конечных точках.

В качестве связанного примера, если требуется интерполяция sin(x) функция на отдельных участках данных кубическим сплайном и согласование его наклона с подпоследовательностью x(s), затем вызовите spapi функция со следующими аргументами:

sp = spapi(4,[x x(s)], [sin(x) cos(x(s))]).

Функция aptknt обеспечивает подходящую последовательность узлов. Если требуется интерполяция одних и тех же данных по квинтическим сплайнам, просто измените значение. 4 кому 6.

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

x = -2:.5:2; y = -1:.25:1; [xx, yy] = ndgrid(x,y);
z = exp(-(xx.^2+yy.^2));
sp = spapi({3,4},{x,y},z); fnplt(sp)

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

В качестве иллюстрации осцилляторной интерполяции к данным с координатной привязкой здесь приводится полная бикубическая интерполяция с данными, явно полученными из бикубического многочлена g (u, v) = u3v3. Это полезно для того, чтобы точно увидеть, где уклоны и уклоны уклонов (поперечные производные) должны быть помещены в указанные значения данных. Поскольку g является бикубическим многочленом, его интерполятором f должен быть сам g. Проверьте следующее:

sites = {[0,1],[0,2]}; coefs = zeros(4,4); coefs(1,1) = 1;
g = ppmak(sites,coefs);
Dxg = fnval(fnder(g,[1,0]),sites);
Dyg = fnval(fnder(g,[0,1]),sites);
Dxyg = fnval(fnder(g,[1,1]),sites);
f = spapi({4,4}, {sites{1}([1,2,1,2]),sites{2}([1,2,1,2])}, ...
          [fnval(g,sites), Dyg ; ...
           Dxg.'         , Dxyg]);
if any( squeeze( fnbrk(fn2fm(f,'pp'), 'c') ) - coefs )
'something went wrong', end

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

свернуть все

Узловая последовательность сплайна, заданная как вектор без возрастания.

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

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

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

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

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

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

свернуть все

Сплайн, возвращенный как структура с этими полями.

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

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

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

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

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

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

Ограничения

Заданные (одномерные) узлы и участки должны удовлетворять условиям Шёнберга-Уитни для определения интерполятора. Если последовательность месторасположения x не повторяется, то

узлы (j) < x (j) < узлы (j + k), все j

с возможным равенством на knots(1) и knots(end)). В многомерном случае эти условия должны содержаться в каждой переменной отдельно.

Алгоритмы

Вызов функции spcol для обеспечения почти блок-диагональной матрицы коллокации (Bj, k (x)) (с повторами вx обозначающие производные, как описано выше), и slvblk решает линейную систему (*), используя блок QR факторизации.

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

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