Матрица словосочетания B-сплайна
colmat = spcol(knots,k,tau)
colmat = spcol(knots,k,tau,arg1,arg2,...)
colmat = spcol(knots,k,tau)
возвращает матрицу, со строками length(tau)
и столбцами length(knots)-k
, чьи (i, j) th запись
Это - значение в tau (i) m (i) th производная j th B-сплайн порядка k
для последовательности узла knots
. Здесь, tau
является последовательностью сайтов, принятых, чтобы не уменьшиться, и m = knt2mlt (tau), т.е. m (i) является # {j < i:tau (j) = tau (i)}, весь i.
colmat = spcol(knots,k,tau,arg1,arg2,...)
также возвращает ту матрицу, но дает вам возможность задать некоторые аспекты.
Если один из argi
является вектором символов с теми же первыми двумя буквами как в 'slvblk'
, матрица возвращена в почти диагональном блоком формате (специализированный для сплайнов) требуемый slvblk
(и понял bkbrk
).
Если один из argi
является вектором символов с теми же первыми двумя буквами как в 'sparse'
, то матрица возвращена в формате sparse
MATLAB®.
Если один из argi
является вектором символов с теми же первыми двумя буквами как в 'noderiv'
, кратность проигнорирована, т.е. m (i) взят, чтобы быть 1 для всего i.
Решать приблизительно нестандартный ОДУ второго порядка
на интервале [0..π], с помощью кубических сплайнов с 10 полиномиальными частями, можно использовать spcol
следующим образом:
tau = linspace(0,pi,101); k = 4; knots = augknt(linspace(0,pi,11),k); colmat = spcol(knots,k,brk2knt(tau,3)); coefs = (colmat(3:3:end,:)/5-colmat(1:3:end,:))\(-sin(2*tau).'); sp = spmak(knots,coefs.');
Можно проверять, как хорошо этот сплайн удовлетворяет ОДУ путем вычисления и графического вывода невязки, D 2y (t) – 5 · (y (t) – sin (2t)), на мелкой сетке:
t = linspace(0,pi,501); yt = fnval(sp,t); D2yt = fnval(fnder(sp,2),t); plot(t,D2yt - 5*(yt-sin(2*t))) title(['residual error; to be compared to max(abs(D^2y)) = ',... num2str(max(abs(D2yt)))])
Оператор spcol([1:6],3,.1+[2:4])
обеспечивает матрицу
ans = 0.5900 0.0050 0 0.4050 0.5900 0.0050 0 0.4050 0.5900
в котором типичная строка записывает значения в 2,1, или 3.1, или 4.1, всех B-сплайнов порядка 3 для последовательности узла 1:6
. Существует три таких B-сплайна. Первый имеет узлы 1,2,3,4, и его значения зарегистрированы в первом столбце. В частности, последняя запись в первом столбце является нулем, поскольку это дает значение того B-сплайна в 4,1, сайт справа от его последнего узла.
Если вы добавляете вектор символов 'sl'
как дополнительный вход к spcol
, то можно попросить, чтобы bkbrk
извлек подробную информацию о блочной структуре матрицы, закодированной в получившемся выводе от spcol
. Таким образом оператор bkbrk(spcol(1:6,3,.1+2:4,'sl'))
дает:
block 1 has 2 row(s) 0.5900 0.0050 0 0.4050 0.5900 0.0050 next block is shifted over 1 column(s) block 2 has 1 row(s) 0.4050 0.5900 0.0050 next block is shifted over 2 column(s)
Последовательность tau
принята, чтобы не уменьшиться.
Это - самая комплексная команда в этом тулбоксе, поскольку это должно заниматься различным упорядоченным расположением и блокированием проблем. Рекуррентные соотношения используются, чтобы сгенерировать, одновременно, значения всех B-сплайнов порядка k
, имеющий любой из tau(i)
в их поддержке.
Отдельное вычисление выполняется для (по-видимому, немногие) сайты, на которых требуются производные значения. Это сайты tau(i)
с m (i)> 0. Для них, и для каждого порядка k – j, j = j 0, j 0 – 1..., 0, с j 0 равных макс. (m), значения всех B-сплайнов того порядка генерируются повторением и используются, чтобы вычислить j th производная на тех сайтах всех B-сплайнов порядка k
.
Получившиеся строки значений B-сплайна (каждая строка, соответствующая конкретному tau(i)
), затем собраны в полное (обычно довольно разреженный) матрица.
Когда дополнительный аргумент, 'sl'
присутствует, эти строки, вместо этого собран в удобную почти диагональную блоком форму, которая использует в своих интересах то, что на любом сайте tau(i)
на большинстве B-сплайнов k
порядка k
является ненулевым. Этот факт (вместе с естественным упорядоченным расположением B-сплайнов) подразумевает, что матрица словосочетания является почти диагональной блоком, т.е. имеет форму лестницы с отдельными блоками или шагами переменной высоты, но универсальной ширины k
.
Команда slvblk
разработана, чтобы использовать в своих интересах эту сохраняющую устройство хранения данных форму, доступную, когда используется, в spap2
, spapi
, или spaps
, чтобы помочь определить B-форму функции кусочного полинома от интерполяции или других условий приближения.