Соедините сплайн в 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
взят к be length(knots)-sizec(end)
. Это означает что каждый 'столбец' 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
- изменитесь, и coefs
должен быть (r+m
) - размерный массив, – кроме тех случаев, когда сплайн должен быть со скалярным знаком, в этом случае, в отличие от одномерного случая, coefs
разрешен быть an m
- размерный массив, но sizec
сбрасывается
sizec = [1, sizec]; r = 1;
Сплайном является sizec(1:r)
- ценный. Это означает, что выход сплайна является массивом с r
размерности, например, если sizec(1:2) = [2, 3]
затем выход сплайна является матрицей 2 на 3.
Сплайном является sizec(1:r)
- ценный, i
запись th the m
- векторный k
вычисляется как length(knots{i})
- sizec(r+i)
, i=1:m
, и i
запись th массива ячеек основных интервалов установлена в [knots{i}(1), knots{i}(end)]
.
spmak(knots,coefs,sizec)
позволяет вам предоставить намеченный размер массива coefs
. Принятие, что coefs
правильно измерен, это вызывает беспокойство только в редком случае что coefs
имеет одну или несколько запаздывающих одноэлементных размерностей. For, 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
- векторы (e.g., 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
.