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-th производная 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-форму сплайна продукта тензора interpolant к данным с координатной сеткой. Здесь, каждый knorki или последовательность узла или положительное целое число, задающее полиномиальный порядок, используемый в i- переменная th. spapi функция затем обеспечивает соответствующую последовательность узла для i- переменная th. Далее, 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, i.e., соответствуя там к заданным значениям функции и ее первых двух производных.

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

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 обеспечит подходящую последовательность узла. Если вы хотите интерполировать те же данные сплайнами quintic, то просто изменяют значение 4 к 6.

Как двумерный пример, вот двумерный interpolant.

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 object. The axes object contains an object of type surface.

Как рисунок оскуляторной интерполяции к данным с координатной сеткой, вот полная бикубическая интерполяция с данными, явным образом выведенными из bicubic полинома g(u,v)=u3v3. Это полезно, чтобы видеть точно, куда наклоны и наклоны наклонов (перекрестные производные), должны быть помещены в предоставленные значения данных. Поскольку g является bicubic полиномом, его interpolant, 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- указывает, что это дано в B-форме.

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

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

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

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

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

Ограничения

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

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

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

Алгоритмы

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

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

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