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) -я запись является
Это значение в тау (i) m (i) -й производной j-го B-сплайна порядка <reservedrangesplaceholder0>
для последовательности узлов 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.');
Можно проверить, насколько хорошо этот сплайн удовлетворяет ОДУ, вычисляя и строя график невязки, D2y (t) - 5· (y (t) - грех (2 t)), на мелкой сетке:
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-й производной в тех сайтах всех B-сплайнов порядка k
.
Получившиеся строки значений B-сплайна (каждая строка, соответствующая конкретному tau(i)
) затем собираются в общую (обычно довольно разреженную) матрицу.
Когда необязательный аргумент 'sl'
присутствует, эти строки вместо этого собраны в удобную почти блочно-диагональную форму, которая использует тот факт, что на любом сайте tau(i)
, самое большее k
B-сплайны порядка k
ненулевые. Этот факт (вместе с естественным упорядоченным расположением B-сплайнов) подразумевает, что матрица коллокации является почти блок-диагональной, т.е. имеет ступенчатую форму с отдельными блоками или шагами переменной высоты, но равномерной ширины k
.
Область команды slvblk
разработан, чтобы использовать преимущества этой формы сохранения данных, доступной при использовании, в spap2
, spapi
, или spaps
, чтобы помочь определить B-форму кусочно-полиномиальной функции из интерполяции или других условий приближения.