Сложите сплайн в B-форме
spmak(knots,coefs)
spmak(knots,coefs,sizec)
spmak
sp = spmak(knots,coeffs)
Область команды spmak(...)
складывает вместе функцию сплайна в B-форме, из минимальной информации, с остальным, выведенным из входа. fnbrk
возвращает все части завершенного описания. Таким образом, фактическая структура данных, используемая для хранения этой формы, легко изменяется без какого-либо эффекта на различные fn...
команды, которые используют эту конструкцию.
spmak(knots,coefs)
возвращает B-форму сплайна, заданную информацией о узле в knots
и информацию о коэффициентах в coefs
.
Действия, предпринятые spmak
зависит от того, является ли функция одномерной или многомерной, на что указывает knots
быть последовательностью или массивом ячеек. Для описания позвольте sizec
быть size(coefs)
.
Если knots
является последовательностью (требуемой для того, чтобы не уменьшаться), тогда сплайн принимается одномерным, и его порядок k
принято, чтобы быть length(knots)-sizec(end)
. Это означает, что каждый 'column' coefs(:,j)
от coefs
принимается как B-сплайн коэффициент сплайна, поэтому сплайн принимается как sizec(1:end-1)
-значен. Основной интервал B-формы является [knots(1)
.. knots(end)
].
Узловая кратность считается ≤ k
. Это означает, что коэффициент coefs(:,j)
просто игнорируется в случае, если соответствующий B-сплайн имеет только один отдельный узел, т.е. в случае knots(j)
равен knots(j+k)
.
Если knots
- массив ячеек, длиной m
, затем сплайн принимается как m
-variate, и coefs
должен быть значением (r+m
) -мерный массив, - за исключением случаев, когда сплайн должен быть оценен скалярно, в этом случае, в отличие от одномерного случая, coefs
разрешено быть m
-мерный массив, но sizec
сбрасывается
sizec = [1, sizec]; r = 1;
Сплайн следующий sizec(1:r)
-значен. Это означает, что выходы сплайна являются массивом с r
размерности, например, если sizec(1:2) = [2, 3]
тогда выходы сплайна являются матрицей 2 на 3.
Сплайн следующий sizec(1:r)
-значение, i
первая запись m
-векторная k
вычисляется следующим length(knots{i})
- sizec(r+i)
, i=1:m
, и i
Для первого элемента массива ячеек базовых интервалов задано значение [knots{i}(1), knots{i}(end)]
.
spmak(knots,coefs,sizec)
позволяет задать предполагаемый размер массива coefs
. Принимая, что coefs
имеет правильный размер, это вызывает озабоченность только в редком случае, который coefs
имеет одну или несколько конечных синглтонных размерностей. Для, MATLAB® подавляет конечные синглтонные размерности, следовательно, без этой явной спецификации предполагаемого размера coefs
, spmak
интерпретирует coefs
неправильно.
spmak
предлагает вам knots
и coefs
.
sp = spmak(knots,coeffs)
возвращает сплайн sp
.
spmak(1:6,0:2)
строит сплайн с основным интервалом [1. 6], с 6 узлами и 3 коэффициентами, отсюда порядок 6 - 3 = 3.
spmak(t,1)
предоставляет B-сплайн B (· |t) в B-форме.
Коэффициенты могут быть d
-векторы (например, 2-векторы или 3-векторы), в этом случае полученный сплайн является кривой или поверхностью (в R2 или R3).
Если целью является создание двухмерного полинома с 2 векторами на прямоугольнике [-1.. 1] × [0.. 1], линейного в первой переменной и постоянного во второй, скажем
coefs = zeros([2 2 1]); coefs(:,:,1) = [1 0;0 1];
затем прямолинейный
sp = spmak({[-1 -1 1 1],[0 1]},coefs);
приведет к появлению сообщения об ошибке 'There should be no more knots than coefficients'
, потому что конечная синглтонная размерность coefs
не будет воспринято spmak
, при правильном использовании этого третьего аргумента, как в
sp = spmak({[-1 -1 1 1],[0 1]},coefs,[2 2 1]);
Это будет успешно. Замена здесь [2 2 1]
по size(coefs)
не сработает.
Другие примеры см. в примере «Введение в B-форму».
Будет возврат ошибки, если предложенная последовательность узлов не перестанет быть неразрешенной, или если массив коэффициентов пуст, или если не больше узлов, чем коэффициентов. Если сплайн должен быть многомерным, то эта последняя диагностика может быть связана с конечными синглтонными размерностями в coefs
.