exponenta event banner

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-й коэффициент (i+1)Первая часть многочлена (с первым коэффициентом самый высокий и k-й коэффициент самый низкий, или постоянный, коэффициент). Таким образом, с 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-vector l имеет length(breaks{i})-1 в качестве своего iй вход и, соответственно, m- массив ячеек его базовых интервалов имеет интервал [breaks{i}(1) .. breaks{i}(end)] в качестве своего iВ-й вход.

  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), и 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))В-й записи коэффициент

∏μ=1m (x (λ) − breaks '

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

[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-е компоненты вектора коэффициентов для (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-векторнозначную, порядка 2). Но вторая команда обеспечивает коэффициенты в компоновке, используемой внутри.

ppmak([0:2],[1:6]) конструирует кусочно-полиномиальную функцию с основным интервалом [0..2] и состоящий из двух частей порядка 3, с единственным внутренним разрывом 1. Результирующая функция является скалярной, т.е. размерностью d ее цель равна 1. Функция является непрерывной при этом разрыве, так как первая часть равна x|→x2 + 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) 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 + 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]);

Другие примеры см. в примере «Intro to ppform».

См. также