exponenta event banner

Построение и работа со сплайнами B-формы

Конструкция B-формы

Обычно сплайн строится из некоторой информации, такой как значения функции и/или производные, или как приблизительное решение некоторого обыкновенного дифференциального уравнения. Но также можно создать сплайн с нуля, предоставив его последовательность узлов и последовательность коэффициентов команде spmak.

Для примера, если вы вводите

sp = spmak(1:10,3:8);

Вы подаете однородную последовательность узлов 1:10 и последовательность коэффициентов 3:8. Поскольку существует 10 узлов и 6 коэффициентов, порядок должен быть 4 (= 10 - 6), т.е. вы получаете кубический сплайн. Команда

fnbrk(sp) 

распечатывает составные части B-формы этого кубического сплайна следующим образом:

knots(1:n+k) 
   1 2 3 4 5 6 7 8 9 10 
coefficients(d,n) 
   3 4 5 6 7 8 
number n of coefficients 
   6 
order k 
   4 
dimension d of target 
   1

Далее, fnbrk может использоваться, чтобы поставить каждую из этих частей отдельно.

Но точка функциональности Curve Fitting Toolbox™ сплайна в том, что не должно быть никакой необходимости, чтобы вы искали эти детали. Вы просто используете sp как аргумент к командам, которые вычисляют, дифференцируют, интегрируют, преобразуют или строят график сплайна, описание которого содержится в sp.

Работа со сплайнами B-формы

Для сплайна работы доступны следующие команды. Есть spmak и fnbrk чтобы составить сплайн и разобрать его снова. Использовать fn2fm для преобразования из B-формы в ppform. Можно вычислять, дифференцировать, интегрировать, минимизировать, находить нули, график, уточнять или избирательно экстраполировать сплайн с помощью fnval, fnder, fndir, fnint, fnmin, fnzeros, fnplt, fnrfn, и fnxtr.

Существует пять команд для генерации последовательностей узлов:

  • augknt для обеспечения граничных узлов, а также управления кратностью внутренних узлов

  • brk2knt для подачи последовательности узлов с заданными кратностями

  • aptknt для предоставления последовательности узлов для сплайна пространства заданного порядка, которая подходит для интерполяции в заданных сайтах данных

  • optknt для обеспечения оптимальной последовательности узлов для интерполяции в заданных сайтах

  • newknt для последовательности узлов, возможно, более подходящей для аппроксимации функции

В сложение существует:

  • aveknt для предоставления определенных узловых средних значений (сайты Гревилла) в качестве рекомендуемых сайтов для интерполяции

  • chbpnt поставлять такие сайты

  • knt2brk и knt2mlt для извлечения пропусков и / или их кратностей из заданной последовательности узлов

Чтобы отобразить сплайн с заданной двумерной последовательностью коэффициентов и равномерной последовательностью узлов, используйте spcrv.

Можно также написать свои собственные команды конструкции сплайнов, в этом случае вам нужно будет знать следующее. Конструкция сплайна, удовлетворяющего некоторым условиям интерполяции или приближения, обычно требует матрицы коллокации, т.е. матрицы, которая в каждой строке содержит последовательность чисел Dr<reservedrangesplaceholder7> <reservedrangesplaceholder6>, k (τ), т.е. производная <reservedrangesplaceholder4> th в τ B-сплайна <reservedrangesplaceholder3> th, для всего j, для немного r и некоторое место τ. Такая матрица обеспечивается spcol. Необязательный аргумент позволяет, чтобы эта матрица была задана spcol в пространственном сплайне -almost-block диагонали -форме или как MATLAB® разреженная матрица. Его можно кормить на slvblk, команду для решения линейных систем с матрицей диагональ коэффициентов. Если вам интересно посмотреть как spcol и slvblk используются в этом тулбоксе, посмотрите на команды spapi, spap2, и spaps.

В сложение существуют стандартные программы для построения кубических сплайнов. csapi и csape обеспечивают кубическую сплайн интерполяцию в узлах к данным, используя не-а-узел и различные другие граничные условия, соответственно. Параметрическая кубическая сплайн через заданные точки обеспечивается cscvn. Кубический сглаживающий сплайн построен в csaps.

Пример: B-форма Сплайн Приближение к кругу

Как еще один простой пример,

points = .95*[0 -1 0 1;1 0 -1 0]; 
sp = spmak(-4:8,[points points]);

обеспечивает плоскую, квартальную, сплайн кривую, средняя часть которой является довольно хорошим приближением к кругу, как показано на графике на следующей странице. Это сгенерировано последующим

plot(points(1,:),points(2,:),'x'), hold on 
fnplt(sp,[0,4]), axis equal square, hold off

Вставка дополнительных контрольных точек (±0.95,±0.95)/1.9 сделал бы визуально идеальный круг.

Вот более подробная информация. Сгенерированная сплайн имеет вид8j = 1B j, 5 a (:, j), с - 4:8однородная последовательность узлов и с ее контрольными точками a (:, j) последовательность (0, α), (-α, 0), (0, -α), (α, 0), (0, α), (-α, 0), (0, -α), (α, 0) с α = 0,95. На самом деле нанесена только часть кривой между значениями параметров 0 и 4.

Чтобы почувствовать, насколько близка к округлости эта часть кривой, вычислите ее беззнаковую кривизну. Кривизна в точке t (t) = (x (t), y (t)) пространственной кривой, может быть вычислена из формулы

κ=|x'y''y'x''|(x'2+y'2)3/2

в котором x ', x ″, y' и y "являются первой и второй производными кривой относительно используемого параметра (t). Обработайте плоскую кривую как пространственную кривую в (x, y) -плане, следовательно, получите максимальное и минимальное значение ее кривизны в 21 точках следующим образом:

t = linspace(0,4,21);zt = zeros(size(t));
dsp = fnder(sp); dspt = fnval(dsp,t); ddspt = fnval(fnder(dsp),t);
kappa = abs(dspt(1,:).*ddspt(2,:)-dspt(2,:).*ddspt(1,:))./...
   (sum(dspt.^2)).^(3/2);
[min(kappa),max(kappa)] 

ans = 
     1.6747    1.8611

Так, хотя кривизна не совсем постоянна, она близка к 1/радиусу окружности, как видно из следующего вычисления:

1/norm(fnval(sp,0)) 

ans = 
     1.7864 

Сплайн Приближения к Кругу; Контрольные точки отмечены x

Похожие темы