Сложите сплайн в 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)
принято, что содержит j
1й коэффициент (i+1)
st polynomial piece (с первым коэффициентом самый высокий и k
th коэффициент самый низкий, или константа, коэффициент). Таким образом, с 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
как его i
th entry и, соответственно, m
- массив ячеек его базовых интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)]
как его i
th 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,:)
принято, чтобы быть j
th компонентов вектора коэффициента для (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».