Соедините сплайн в 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
th коэффициент части полинома (i+1)
-Стрит (с первым коэффициентом самое высокое и 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
- варьируемая величина (продукт тензора), и различные части его ppform определяются от входа можно следующим образом:
m
- вектор l имеет length(breaks{i})-1
как its ith
запись и, соответственно, m
- массив ячеек его основных интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)]
как its ith
запись.
Размерность 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)
, и the 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)]
с its (:,i(1),r(1),i(2),r(2),...,i(m),r(m))th
записью коэффициент
в локальном полиномиальном представлении функции на (hyper) прямоугольнике со сторонами
Это - на самом деле, внутренняя интерпретация массива коэффициентов в 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
)-Стрит.
ppmak(breaks,coefs,sizec)
с sizec
вектор - строка из положительных целых чисел, также соединяет ppform сплайна от предоставленной информации, но интерпретирует coefs
, чтобы иметь размер sizec
(и возвращает ошибку, когда prod(size(coefs))
отличается от prod(sizec)
). Эта опция важна только в редком случае, что входной параметр coefs
является массивом с одной или несколькими запаздывающими одноэлементными размерностями. For, 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 оцененные вектора порядка 2). Но вторая команда обеспечивает коэффициенты в расположении, используемом внутренне.
ppmak([0:2],[1:6])
создает функцию кусочного полинома с основным интервалом [0
.. 2
] и состоящий из двух частей порядка 3, с единственным внутренним пропуском 1. Получившаяся функция является скаляром, т.е. размерностью, d
ее цели равняется 1. Функция, оказывается, непрерывна в том пропуске, поскольку первой частью является x | → x 2 + 2x + 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) x 2 + (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 | → x 3 + 2x2 + 3x + 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]);
Смотрите пример “Введение к ppform” для других примеров.