Соедините сплайн в 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 i
запись th и, соответственно, m
- массив ячеек его основных интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)]
как its i
запись th.
Размерность 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), затем необходимо было бы использовать полный дополнительный третий аргумент, i.e., используйте команду
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” для других примеров.