Матрица коллокации 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))
Это значение в tau (i) m (i) -й производной j-го 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.
Для решения приблизительно нестандартного ОДУ второго порядка
sin (2t))
на интервале [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) - 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 = j0, j0 - 1,..., 0, при j0, равном max (m), значения всех B-сплайнов этого порядка генерируются повторяемостью и используются для вычисления j-й производной в этих местах всех B-сплайнов порядкаk.
Результирующие строки значений B-сплайна (каждая строка соответствует определенной tau(i)) затем собираются в общую (обычно довольно разреженную) матрицу.
Когда необязательный аргумент 'sl' присутствует, эти ряды вместо этого собраны в удобную почти блок-диагональную форму, которая использует тот факт, что на любом участке tau(i), не более k B-сплайны порядка k ненулевые. Этот факт (вместе с естественным упорядочением B-сплайнов) подразумевает, что матрица коллокации является почти блок-диагональной, т.е. имеет форму лестницы, с отдельными блоками или ступенями различной высоты, но одинаковой ширины. k.
Команда slvblk предназначен для использования преимуществ этой формы сохранения данных, доступной при использовании, в spap2, spapi, или spaps, чтобы помочь определить B-форму кусочно-полиномиальной функции из интерполяции или других условий аппроксимации.