Jump to content

Алгоритм Де Бура

(Перенаправлено из алгоритма Де Бура )

В математической области анализа численного алгоритм де Бура [1] представляет собой полиномиальный и численно стабильный алгоритм для оценки сплайновых кривых в форме B-сплайна . Это обобщение алгоритма де Кастельжо для кривых Безье . Алгоритм был разработан немецко-американским математиком Карлом Р. де Буром . Были созданы упрощенные, потенциально более быстрые варианты алгоритма де Бура, но они имеют сравнительно меньшую стабильность. [2] [3]

Введение

[ редактировать ]

Общее введение в B-сплайны дано в основной статье . Здесь мы обсуждаем алгоритм де Бура, эффективную и численно стабильную схему для оценки сплайновой кривой. на позиции . Кривая строится из суммы B-сплайн-функций. умноженный на потенциально векторные константы , называемые контрольными точками, B-сплайны порядка — связные кусочно-полиномиальные функции степени определяется по сетке узлов (далее мы всегда используем индексы, отсчитываемые от нуля). Алгоритм Де Бура использует O (p 2 ) + O (p) операций для оценки сплайновой кривой. Примечание: основная статья о B-сплайнах и классические публикации. [1] используйте другое обозначение: B-сплайн индексируется как с .

Местная поддержка

[ редактировать ]

B-сплайны имеют локальную поддержку, что означает, что полиномы положительны только в конечной области и равны нулю в других местах. Формула рекурсии Кокса-де Бура [4] показывает это:

Пусть индекс определить интервал узла, который содержит позицию, . В формуле рекурсии мы видим, что только B-сплайны с отличны от нуля для этого узла. Таким образом, сумма уменьшается до:

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

Алгоритм

[ редактировать ]

Имея эти определения, мы теперь можем описать алгоритм де Бура. Алгоритм не вычисляет функции B-сплайна. напрямую. Вместо этого он оценивает через эквивалентную рекурсивную формулу.

Позволять быть новыми контрольными точками с для . Для применяется следующая рекурсия:

После завершения итераций мы имеем , это означает, что является желаемым результатом.

Алгоритм Де Бура более эффективен, чем явный расчет B-сплайнов. с рекурсивной формулой Кокса-де Бура, поскольку она не вычисляет члены, которые гарантированно умножаются на ноль.

Оптимизации

[ редактировать ]

Приведенный выше алгоритм не оптимизирован для реализации на компьютере. Для этого требуется память временные контрольные точки . Каждая временная контрольная точка записывается ровно один раз и читается дважды. Обратив итерацию (считая вниз, а не вверх), мы можем запустить алгоритм с памятью всего за временные контрольные точки, позволяя повторно использовать память для . Аналогично, существует только одно значение используется на каждом этапе, поэтому мы также можем повторно использовать память.

Кроме того, удобнее использовать индекс, отсчитываемый от нуля. для временных контрольных пунктов. Связь с предыдущим индексом . Таким образом мы получаем улучшенный алгоритм:

Позволять для . Итерация для : Обратите внимание, что j необходимо отсчитывать. После завершения итераций результат: .

Пример реализации

[ редактировать ]

Следующий код на языке программирования Python представляет собой простую реализацию оптимизированного алгоритма.

def deBoor(k: int, x: int, t, c, p: int):
    """Evaluates S(x).

    Arguments
    ---------
    k: Index of knot interval that contains x.
    x: Position.
    t: Array of knot positions, needs to be padded as described above.
    c: Array of control points.
    p: Degree of B-spline.
    """
    d = [c[j + k - p] for j in range(0, p + 1)] 

    for r in range(1, p + 1):
        for j in range(p, r - 1, -1):
            alpha = (x - t[j + k - p]) / (t[j + 1 + k - r] - t[j + k - p]) 
            d[j] = (1.0 - alpha) * d[j - 1] + alpha * d[j]

    return d[p]

См. также

[ редактировать ]
[ редактировать ]

Компьютерный код

[ редактировать ]
  • PPPACK : содержит множество сплайн-алгоритмов на Фортране.
  • Научная библиотека GNU : C-библиотека, содержит подбиблиотеку для сплайнов, перенесенных из PPPACK.
  • SciPy : библиотека Python, содержит подбиблиотеку scipy.interpolate со сплайн-функциями на основе FITPACK.
  • TinySpline : C-библиотека для сплайнов с оболочкой C++ и привязками для C#, Java, Lua, PHP, Python и Ruby.
  • Einspline : C-библиотека для сплайнов в 1, 2 и 3 измерениях с оболочками Фортрана.
  1. ^ Jump up to: а б К. де Бур [1971], «Пакет подпрограмм для вычислений с помощью B-сплайнов», Techn.Rep. LA-4728-MS, Лос-Аламосская научная лаборатория, Лос-Аламос, Нью-Мексико; п. 109, 121.
  2. ^ Ли, ETY (декабрь 1982 г.). «Упрощенная процедура расчета B-сплайна». Вычисление . 29 (4). Спрингер-Верлаг: 365–371. дои : 10.1007/BF02246763 . S2CID   2407104 .
  3. ^ Ли, ETY (1986). «Комментарии к некоторым алгоритмам B-сплайна». Вычисление . 36 (3). Спрингер-Верлаг: 229–238. дои : 10.1007/BF02240069 . S2CID   7003455 .
  4. ^ К. де Бур, с. 90

Цитируемые работы

  • Карл де Бур (2003). Практическое руководство по сплайнам, переработанное издание . Спрингер-Верлаг. ISBN  0-387-95366-3 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d3cd6818adbbed9f151140d59a6e8e2f__1714931700
URL1:https://arc.ask3.ru/arc/aa/d3/2f/d3cd6818adbbed9f151140d59a6e8e2f.html
Заголовок, (Title) документа по адресу, URL1:
De Boor's algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)