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-я переменная. The 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, то есть совпадение там с предписанными значениями функции и ее первых двух производных.

Вот пример колебательной интерполяции к значениям 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- указывает, что оно задано в B-форме.

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

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

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

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

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

Ограничения

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

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

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

Алгоритмы

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

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

Введенный в R2006b