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) принят, чтобы содержать 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 определяется из входа можно следующим образом:

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

  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), и 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 коэффициент

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

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

[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,:) взят, чтобы быть 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” для других примеров.

Смотрите также