Сложите сплайн в 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 определяются следующим образом:
Номер l полиномиальных частей вычисляется как length(breaks)- 1, и основной интервал является, соответственно, интервалом [breaks(1) .. breaks(l+1)].
Размерность 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 определяются из входов следующим образом:
The m-вектор l имеет length(breaks{i})-1 как его ith entry и, соответственно, m- массив ячеек его базовых интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)] как его ith entry.
Размерность d целевого объекта функции и m-векторная k (координатно- полином) порядки его частей получаются непосредственно из размера coefs, следующим образом.
Если coefs является m-мерный массив, тогда функция принимается скалярной, т.е. d равен 1, и m-векторная k вычисляется следующим size(coefs)./l. После этого coefs изменяется с помощью команды coefs = reshape(coefs,[1,size(coefs)]).
Если 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 коэффициент
в локальном полиномиальном представлении функции на (гипер) прямоугольнике со сторонами
Это, на самом деле, внутренняя интерпретация массива коэффициентов в 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».