ppmak

Сложите сплайн в ppform

Синтаксис

ppmak(breaks,coefs)
ppmak
ppmak(breaks,coefs,d)
ppmak(breaks,coefs,sizec)

Описание

Область команды ppmak(...) помещает сплайн в ppform из минимальной информации, остальное выведено из этой информации. fnbrk Содержит любую или все части полного описания. Таким образом, фактическая структура данных, используемая для хранения ppform, легко изменяется без какого-либо эффекта на различные fn... команды, которые используют эту конструкцию. Однако случайный пользователь вряд ли будет использовать ppmak явным образом, полагаясь вместо этого на различные команды конструкции сплайнов в тулбоксе, чтобы создать определенные сплайны.

ppmak(breaks,coefs) возвращает ppform сплайна, заданный информацией о пропуске в breaks и информацию о коэффициентах в coefs. Как эта информация интерпретируется, зависит от того, является ли функция одномерной или многомерной, как указано breaks быть последовательностью или массивом ячеек.

Если breaks является последовательностью, она должна быть неразрешающей, с ее первой записью, отличной от ее последней. Затем функция принимается одномерной, и различные части ее ppform определяются следующим образом:

  1. Номер l полиномиальных частей вычисляется как length(breaks)- 1, и основной интервал является, соответственно, интервалом [breaks(1) .. breaks(l+1)].

  2. Размерность d целевое значение функции принимается как количество строк в coefs. Другими словами, каждый столбец coefs принимается как один коэффициент. Более явно, coefs(:,i*k+j) принято, что содержит j1й коэффициент (i+1)st polynomial piece (с первым коэффициентом самый высокий и kth коэффициент самый низкий, или константа, коэффициент). Таким образом, с kl количество столбцов coefs, порядок k кусочно-полиномиальный вычисляется как fix(kl/l).

После этого, записи coefs переупорядочены, по команде

 coefs = reshape(permute(reshape(coefs,[d,k,l]),[1 3 2]),[d*l,k])

в порядок с внутренней интерпретацией массива коэффициентов в ppform для одномерного сплайна. Это применяется только при использовании синтаксиса ppmak(breaks,coefs) где breaks является последовательностью ( вектором-строкой), а не, когда это массив ячеек. Сочетание не выполняется, когда вы используете формы с тремя аргументами ppmak. Для форм с тремя аргументами выполняется только изменение формы, а не транспозиция.

Если breaks - массив ячеек, длиной m, тогда функция принимается m-variate (тензорный продукт), и различные части его ppform определяются из входов следующим образом:

  1. The m-вектор l имеет length(breaks{i})-1 как его ith entry и, соответственно, m- массив ячеек его базовых интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)] как его ith entry.

  2. Размерность d целевого объекта функции и m-векторная k (координатно- полином) порядки его частей получаются непосредственно из размера coefs, следующим образом.

    1. Если coefs является m-мерный массив, тогда функция принимается скалярной, т.е. d равен 1, и m-векторная k вычисляется следующим size(coefs)./l. После этого coefs изменяется с помощью команды   coefs = reshape(coefs,[1,size(coefs)]).

    2. Если coefs является (r+m) -мерный массив, с sizec = size(c) скажем, тогда d установлено в sizec(1:r), и vector k вычисляется следующим sizec(r+(1:m))./l. После этого coefs изменяется с помощью команды   coefs = reshape(coefs,[prod(d),sizec(r+(1:m))]).

Затем, coefs интерпретируется как эквивалентный массив размера [d,l(1),k(1),l(2),k(2),...,l(m),k(m)], с его (:,i(1),r(1),i(2),r(2),...,i(m),r(m))tth entry коэффициент

μ=1m(x(μ)breaks|μ](i(μ)))(k(μ)r(μ))

в локальном полиномиальном представлении функции на (гипер) прямоугольнике со сторонами

[breaks|μ](i(μ)) .. пропуски|μ](i(μ)+1)],     μ=1:m

Это, на самом деле, внутренняя интерпретация массива коэффициентов в ppform многомерного сплайна.

ppmak предлагает вам breaks и coefs.

ppmak(breaks,coefs,d) с d положительное целое число, также складывает ppform сплайна из предоставленной информации, но ожидает, что функция будет одномерной. В этом случае coefs принято, что он имеет размер [d*l,k], с l полученный как length(breaks)-1, и это определяет порядок, k, сплайна. С этим, coefs(i*d+j,:) принято, чтобы быть jth компонентов вектора коэффициента для (i+1) st полиномиальная часть .

ppmak(breaks,coefs,sizec) с sizec вектор-строка из положительных целых чисел, также складывает ppform сплайна из предоставленной информации, но интерпретирует coefs иметь размер sizec (и возвращает ошибку, когда prod(size(coefs)) отличается от prod(sizec)). Эта опция важна только в редком случае, когда входной параметр coefs - массив с одним или несколькими конечными синглтонными размерностями. Для, MATLAB® подавляет конечные синглтонные размерности, следовательно, без этой явной спецификации предполагаемого размера coefs, ppmak интерпретирует coefs неправильно.

Примеры

Два сплайна

p1 = ppmak([1 3 4],[1 2 5 6;3 4 7 8]);
p2 = ppmak([1 3 4],[1 2;3 4;5 6;7 8],2);

иметь точно такой же ppform вектора -значенный, порядка 2). Но вторая команда предоставляет коэффициенты в расположении, используемом внутри.

ppmak([0:2],[1:6]) создает кусочно-полиномиальную функцию с основным интервалом [0. 2] и состоящий из двух частей порядка 3, с единственным внутренним пропуском 1. Получившаяся функция скаляром, т.е. размерностью d его цель равна 1. Функция оказывается непрерывной на этом перерыве, так как первая часть x | а x2 + 2 x + 3, в то время как вторая часть x |  4 (x - 1)2 + 5 (x –1) + 6.

Когда функция одномерна, и размерность d не задан явным образом, тогда оно принимается как число строк coefs. Номер столбца должен быть целым числом, кратным числу l частей, заданных breaks. Для примера оператор ppmak([0:2],[1:3;4:6]) приводит к ошибке, поскольку последовательность пропусков [0:2] указывает две полиномиальные части, следовательно, в матрице коэффициентов ожидается четное количество столбцов. Измененный оператор ppmak([0:1],[1:3;4:6]) задает параболическую кривую x | а (1,4) x2 + (2,5) x + (3,6). В частности, размерность d его цель - 2. Измененный по-другому оператор ppmak([0:2],[1:4;5:8]) также задает плоскую кривую (т.е. d является 2), но этот кусочно-линейный; его первая полиномиальная часть x | а (1,5 ) x + (2,6).

Явная спецификация размерного d приводит в одномерном случае к другой интерпретации записей coefs. Теперь номер столбца указывает полиномиальный порядок частей, и номер строки должен равняться d умножить количество штук. Таким образом, оператор ppmak([0:2],[1:4;5:8],2) находится в состоянии ошибки, в то время как оператор ppmak([0:2],[1:4;5:8],1) задает скалярный кусочно-кубический, чья первая часть x | а x3 + 2 x2 + 3 x + 4.

Если бы вы хотели составить постоянный полином, с основным интервалом [0.. 1] скажем, чье значение является матричным глазом (2), то вам пришлось бы использовать полный дополнительный третий аргумент, т.е. использовать команду

pp = ppmak(0:1,eye(2),[2,2,1,1]);

Наконец, если вы хотите создать двухмерный полином с 2 векторами на прямоугольнике [-1.. 1] x [0.. 1], линейная в первой переменной и постоянная во второй, скажем,

   coefs = zeros(2,2,1); coefs(:,:,1) = [1 0; 0 1];

затем прямолинейный

   pp = ppmak({[-1 1],[0 1]},coefs);

будет неудачен, создавая скалярную функцию порядка 2 в каждой переменной, как будет

   pp = ppmak({[-1 1],[0 1]},coefs,size(coefs));

в то время как следующая команда будет успешно выполнена:

   pp = ppmak({[-1 1],[0 1]},coefs,[2 2 1]);

Другие примеры см. в примере «Intro to ppform».

См. также