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) th запись

Dm(i)Bj(\tau(i))

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

Примеры

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

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.');

Можно проверять, как хорошо этот сплайн удовлетворяет ОДУ путем вычисления и графического вывода невязки, 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. Для них, и для каждого порядка kj, j = j 0, j 0 – 1..., 0, с j 0 равных макс. (m), значения всех B-сплайнов того порядка сгенерированы повторением и использовались для расчета j th производная на тех сайтах всех B-сплайнов порядка k.

Получившиеся строки значений B-сплайна (каждая строка, соответствующая конкретному tau(i)) затем собраны в полное (обычно довольно разреженный) матрица.

Когда дополнительный аргумент 'sl' присутствует, эти строки вместо этого собраны в удобную почти диагональную блоком форму, которая использует в своих интересах то, что на любом сайте tau(i), в большей части k B-сплайны порядка k являются ненулевыми. Этот факт (вместе с естественным упорядоченным расположением B-сплайнов) подразумевает, что матрица словосочетания является почти диагональной блоком, т.е. имеет форму лестницы с отдельными блоками или шагами различной высоты, но универсальной ширины k.

Команда slvblk спроектирован, чтобы использовать в своих интересах эту сохраняющую устройство хранения данных форму, доступную, когда используется, в spap2, spapi, или spaps, чтобы помочь определить B-форму кусочного полинома функционируют от интерполяции или других условий приближения.

Смотрите также

| |