spcol

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) -я запись является

Dm(i)Bj(tau(i))

Это значение в тау (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.

Примеры

Решить приблизительно нестандартную ОДУ второго порядка

D2y(t)=5(y(t)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) - грех (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-форму кусочно-полиномиальной функции из интерполяции или других условий приближения.

См. также

| |