Рефетека.ру / Математика

Курсовая работа: Базисные сплайны

Введение


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

Типичной задачей приближения является задача интерполяции: по заданной таблице чисел Базисные сплайны, восстановить функцию Базисные сплайны с той или иной точностью на отрезке [а, b] действительной оси. Классический метод ее решения состоит в построении интерполяционного многочлена Лагранжа, определяемого равенством


Базисные сплайны


Базисные сплайны


Хотя согласно теореме Вейерштрасса всякая непрерывная функция Базисные сплайны на отрезке Базисные сплайны может быть как угодно хорошо приближена многочленами, практические возможности применения многочленов Лагранжа ограничены. Прежде всего, используя подобный аппарат, мы должны быть уверены, что, выбрав достаточно большое число узлов интерполяции, получим хорошее приближение интерполируемой функции. Однако, как показывает ряд простых примеров, это часто нельзя гарантировать.

С. Н. Бернштейном (1916 г.) было установлено, что последовательность интерполяционных многочленов Лагранжа построенных для непрерывной функцииБазисные сплайнына отрезке [—1, 1] по равноотстоящим узлам Базисные сплайны, с возрастанием Базисные сплайны не стремится к Базисные сплайны. Еще более любопытен другой пример, восходящий к Рунге (1901 г.) и состоящий в том, что указанный интерполяционный процесс не сходится на [—1, 1] даже для гладкой сколь угодно раз дифференцируемой функции Базисные сплайны(рис. 0.1). В обоих случаях


Базисные сплайны


Иногда эти трудности удается преодолеть путем специального выбора узлов интерполяции или за счет перехода к каким-либо обобщенным многочленам. Однако такой путь, как правило, весьма усложняет вычисления и к тому же не избавляет нас от второй проблемы — быстрого накопления ошибок округления с ростом степени многочлена. Поэтому на практике для того, чтобы достаточно хорошо приблизить функцию, вместо построения интерполяционного многочлена высокой степени используют интерполяцию кусочными многочленами.

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

Термин сплайн произошел от английского spline, что в переводе означает рейка, стержень — название приспособления, которое применяли чертежники для проведения гладких кривых через заданные точки. Возьмем гибкую стальную линейку, поставим ее на ребро и, закрепив один конец в заданной точке Базисные сплайны, поместим между опорами, которые располагаются так, чтобы линейка проходила через заданные точки (рис, 0.2).


Базисные сплайны


Согласно закону Бернулли—Эйлера линеаризованное дифференциальное уравнение изогнутой оси линейки имеет вид


Базисные сплайны


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

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

В отличие от интерполяционных многочленов Лагранжа, последовательность интерполяционных кубических сплайнов на равномерной сетке узлов всегда сходится к интерполируемой непрерывной функции, причем сходимость повышается с улучшением дифференциальных свойств функции Базисные сплайны. Так, для функции Базисные сплайны из примера Рунге кубический сплайн на сетке с числом узлов Базисные сплайны дает погрешность того же порядка, что и многочлен Базисные сплайны, но для Базисные сплайны она настолько мала, что в масштабах рис. 0.1 не может быть показана (ср. с многочленом Базисные сплайны).

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

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

§1. Определение сплайнов. Пространство сплайнов


Пусть на отрезке [a, b] задано разбиение Базисные сплайны Для целого Базисные сплайны через Базисные сплайны обозначим множество Базисные сплайны раз непрерывно дифференцируемых на Базисные сплайны функций, а черезБазисные сплайны— множество кусочно-непрерывных функций с точками разрыва первого рода.

Определение. ФункцияБазисные сплайны называется сплайном степени Базисные сплайны дефекта Базисные сплайны (Базисные сплайны — целое число, Базисные сплайны) с узлами на сетке Базисные сплайны, если

а) на каждом отрезке Базисные сплайны функция Базисные сплайны является многочленом степени Базисные сплайны, т. е.


Базисные сплайны (1)

б) Базисные сплайны.


Определение сплайна имеет смысл на всей вещественной оси ,если положить Базисные сплайны

При этом на полуоси Базисные сплайны берется только формула (2), а на полуоси Базисные сплайны только формула (1).

Итак, сплайн Базисные сплайны имеет непрерывные производные до порядка Базисные сплайны. Производные сплайна порядка выше Базисные сплайны, вообще говоря, терпят разрывы в точках Базисные сплайны. Для определенности будем считать, что функция Базисные сплайны, непрерывна справа, т. е.


Базисные сплайны

Базисные сплайны

Базисные сплайны


Множество сплайнов, удовлетворяющих определению, обозначим через Базисные сплайны Ясно, что этому множеству принадлежат и сплайны степени n дефекта Базисные сплайны и сплайны степени Базисные сплайны дефекта Базисные сплайны, если Базисные сплайны, в том числе многочлены степени не выше Базисные сплайны. Так как обычные операции сложения элементов из Базисные сплайныи их умножения на действительные числа не выводят за пределы множества, то оно является линейным множеством или линейным пространством.

Простейшим примером сплайна является единичная функция Хевисайда


Базисные сплайны


с которой естественным образом связана усеченная степенная функция


Базисные сплайны


Функции Базисные сплайны являются сплайнами соответственно нулевой степени и степени Базисные сплайны дефекта 1 с единственным узлом в нулевой точке (рис. 1.1). Мы будем рассматривать также усеченные степенные функции Базисные сплайны, связанные с точками сетки Базисные сплайны. При Базисные сплайныони принадлежат множеству Базисные сплайны

Теорема 1.1. Функции


Базисные сплайны

Базисные сплайны (3)

Базисные сплайны


линейно независимы и образуют базис в пространстве Базисные сплайныразмерности Базисные сплайны

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

Тогда для Базисные сплайны имеем Базисные сплайны и в силу линейной независимости функций Базисные сплайны находим Базисные сплайныБеря Базисные сплайны получаем Базисные сплайны и, по той же причине, Базисные сплайны Продолжая этот процесс, убеждаемся, что все Базисные сплайны Следовательно, функции (3) линейно независимы.

Пусть теперь задан сплайн Базисные сплайны на отрезке Базисные сплайны он является многочленом степени Базисные сплайны, Базисные сплайны и может быть записан в виде (1) или (2). При этом, так как первые Базисные сплайны производных сплайна непрерывны в точках Базисные сплайны т. е.


Базисные сплайны

Базисные сплайны


Покажем, что сплайн Базисные сплайны, на отрезке Базисные сплайныможет быть представлен в виде


Базисные сплайны (4)


Где Базисные сплайны

Действительно, преобразуя это выражение при Базисные сплайны получаем


Базисные сплайны

Базисные сплайны


Это доказывает, что всякий сплайнБазисные сплайны может быть представлен в виде линейной комбинации функций (3), т. е. эти функции образуют базис в Базисные сплайны и представление (4) единственно. Эта формула называется представлением сплайна в виде суммы усеченных степенных функций. Итак, множествоБазисные сплайны является конечномерным пространством размерности Базисные сплайны


§2. Базисные сплайны с конечными носителями


В математическом анализе встречаются конструкции, связанные с финитными функциями, т. е. гладкими функциями, которые определяются на всей действительной оси, но отличны от нуля лишь на некотором конечном интервале (носителе). Ниже мы исследуем финитные сплайны из пространства Базисные сплайны. В последующем изложении они играют исключительно важную роль.

Расширим сетку Базисные сплайны, добавив дополнительно точки Базисные сплайны (можно положить, например, Базисные сплайны).

Возьмем функциюБазисные сплайныи построим для нее разделенные разности Базисные сплайны порядка по значениям аргумента Базисные сплайны. В результате получаются функции переменной х:


Базисные сплайны


Так как для разделенной разности Базисные сплайны порядка от функции Базисные сплайны по точкамБазисные сплайнысправедливо равенство


Базисные сплайны


Если использовать тождество Базисные сплайны то можно получить несколько иную форму записи этой функции


Базисные сплайны


Из определения усеченных степенных функций следует, что функцияБазисные сплайныявляется сплайном степени п дефекта 1 на

сетке узловБазисные сплайны

Лемма 1.1. Справедливо тождество


Базисные сплайны


Доказательство. ЕслиБазисные сплайныто разделенная разность функции Базисные сплайныпо точкам Базисные сплайныможет быть вычислена по формуле Лейбница:


Базисные сплайны


Для разности Базисные сплайны порядка путем рассуждений по индукции нетрудно получить


Базисные сплайны


Представим функциюБазисные сплайныв виде


Базисные сплайныБазисные сплайны


и построим ее разделенную разность Базисные сплайны порядка по формуле Лейбница. Получим


Базисные сплайны


Отсюда, если учесть определение сплайновБазисные сплайны, следует тождество (4).

Лемма 1.2. Сплайны Базисные сплайны обладают следующими свойствами:


Базисные сплайны


Доказательство. ФункцияБазисные сплайныравна нулю при Базисные сплайныи является многочленом степени n от х при Базисные сплайны. Поэтому ее разделенные разности Базисные сплайны порядка по значениям аргументаБазисные сплайнытождественно равны нулю при Базисные сплайны и Базисные сплайныт.е. Базисные сплайны Внутри интервалаБазисные сплайны

В самом деле, при n = 0 согласно (2) Базисные сплайны. Пусть, далее, утверждение а) верно при Базисные сплайны Тогда при n=l в силу (4) на интервалеБазисные сплайны функцияБазисные сплайныявляется линейной комбинацией с положительными весами функцийБазисные сплайныпричем по предположению в произвольной точке указанного интервала хотя бы одна из этих функций больше нуля. Следовательно,Базисные сплайны для Базисные сплайны, и утверждение а) установлено.

Докажем утверждение б). Всякую n+1 раз непрерывно дифференцируемую функцию g(t) на промежутке а ≤ t ≤ b можно представить формулой Тейлора с остаточным членом в интегральной форме:


Базисные сплайны


Здесь под знаком интеграла вместо обычного сомножителяБазисные сплайны стоит усеченная степенная функция, что позволяет заменить переменный верхний предел t постоянной величиной b. Из (7) следует разностное соотношение


Базисные сплайны

то, полагая g(x) = xn+1, поручаем

Базисные сплайны


Поскольку вне интервала (а, b), то это равенство -совпадает с (6) и лемма доказана.

Лемма 1.3. ФункцииБазисные сплайныявляются сплайнами степени п дефекта 1 с конечными носителями минимальной длины.

Доказательство. Предположим, что существует сплайн Базисные сплайныотличный от нуля на интервале, меньшем, чем Базисные сплайныТакой интервал, очевидно, не может иметь границей точку, не являющуюся узлом сетки Базисные сплайны. Поэтому пусть это будет интервал (xi , xi+n).

Возьмем представление сплайна дефекта v = 1 через усеченные степенные функции (1.4). Вследствие того, что Базисные сплайныпри Базисные сплайны в этом представленииБазисные сплайныБазисные сплайны. Так как Базисные сплайныпри Базисные сплайны то ее производные до порядка n — 1 равны нулю в точке xi+n. Имеем


Базисные сплайны


Последние равенства представляют собой однородную систему линейных уравнений для определения коэффициентов Базисные сплайныБазисные сплайны. Ее определитель пропорционален определителю Вандермонда n-ro порядка, который отличен от нуля, и система имеет только нулевое решение. Наконец, из того же условия Базисные сплайныследует, что Базисные сплайны. Значит, Базисные сплайныи лемма доказана.

Теорема 1.2. ФункцииБазисные сплайны линейно независимы и образуют базис в пространстве сплайнов Базисные сплайны

Доказательство. Покажем сначала линейную независимость функцийБазисные сплайнына всей действительной оси. Предположим противное, т. е. что существуют такие постоянные Базисные сплайны, не все равные нулю, что


Базисные сплайны


ВыбираяБазисные сплайны получаем, чтоБазисные сплайныи, значит, Базисные сплайны. Беря затем Базисные сплайны находим, что Базисные сплайны и т.д., т.е. Базисные сплайны Следовательно, функции Базисные сплайнылинейно независимы на Базисные сплайны

Предположим теперь, что соотношение (8) выполняется только на [а, b]. Это значит, что на отрезках Базисные сплайны обращаются в нули сплайны вида


Базисные сплайны


Каждый из них отличен от нуля самое большее на интервале Базисные сплайныПоэтому из предположения Базисные сплайныпри xБазисные сплайнысогласно доказательству леммы 3 следует, что Базисные сплайны0 на интервалах Базисные сплайны, а значит, и на всей действительной оси. В силу линейной независимости функций Базисные сплайнынаБазисные сплайныдолжно быть Базисные сплайны и это для всех i = 0, ..,N-1.

Таким образом, функцииБазисные сплайнылинейно независимы, и так как согласно теореме 1.1 размерность пространстваБазисные сплайныравна n+N, то они образуют базис в этом пространстве. Теорема доказана.

Функции Базисные сплайны называются базисными сплайнами с конечными носителями минимальной длины (В-сплайнами). В силу теоремы 1.2 всякий сплайнБазисные сплайны может быть единственным образом записан


Базисные сплайны


где — некоторые постоянные коэффициенты. Эту запись сплайна называют его представлением через В-сплайны.

Из теоремы 1.2 вытекает

Следствие 1.1. Всякий сплайнБазисные сплайны, принадлежащий Базисные сплайны, с конечным носителем минимальной длины с точностью до постоянного множителя совпадает с В-сплайном.

Доказательство. Минимальным конечным носителем сплайна является один из интервалов Базисные сплайны Базисные сплайны Согласно (9)


Базисные сплайны


Так как Базисные сплайны для Базисные сплайны то, выбирая последовательно Базисные сплайны, получаем, что Базисные сплайны. Аналогично, Базисные сплайны для Базисные сплайны Следовательно, Базисные сплайны

Замечание. Представление сплайнов через B-сплайпы в виде (9) имеет смысл для конечного отрезка [а, b]. Чтобы получить его для всей вещественней оси, нужно положить Базисные сплайны и Базисные сплайны. Тогда точки Базисные сплайны оказываются узлами кратности Базисные сплайны и при построении B-сплайнов с номерами Базисные сплайны и Базисные сплайны нужно учитывать правило для разделенных разностей с кратными узлами. Мы не описываем подробно эти конструкции, ибо все практические задачи, где используются B-сплайны, рассматриваются на конечном отрезке.

§3. Нормализованные базисные сплайны и представление ими многочленов


При практических вычислениях удобнее использовать не сами B-сплайны, а функции, получающиеся из них умножением на постоянные множители:


Базисные сплайны (1)


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

Тождество (2.4) для нормализованных 5-сплайнов имеет вид


Базисные сплайны


С его помощью легко можно построить последовательность сплайнов Базисные сплайны Приведем первые четыре функции этой последовательности для случая равноудаленных узлов hi = h.

Будем обозначатьБазисные сплайныТочкаБазисные сплайны - это середина отрезка-носителя В-сплайна. Тогда имеем


Базисные сплайны


Эти В-сплайны изображены на рис. 1.3, а, б, в, г соответственно.

В § 1 было отмечено, что многочлены Рп(х) степени не выше n являются элементами пространства сплайнов Базисные сплайны .Следовательно, они представимы через базисы этих пространств, в частности через базис из В-сплайнов в пространстве Базисные сплайны. Для вывода формул воспользуемся тождеством (2). После умножения обеих его частей на число и суммирования по индексу i получаем


Базисные сплайны


Лемма 1.4. Справедливо тождество


Базисные сплайны


в предположении Базисные сплайны


Базисные сплайны


Доказательство. В формуле (4) положим Базисные сплайны Тогда получаем


Базисные сплайны


Подставляя Базисные сплайны в (3), находим


Базисные сплайны


Повторяя это преобразование n раз, получим справа


Базисные сплайны


Теперь разложим обе части тождества (5) по степеням t. При этом


Базисные сплайны


Здесь Базисные сплайны суть символы элементарных симметрических функций от n аргументов степени а. Это многочлены, состоящие из Базисные сплайныслагаемых. Они имеют вид


Базисные сплайны


Подставляя разложения (6) и (7) в (5) и приравнивая коэффициенты при одинаковых степенях t, находим представления мономов Базисные сплайны через нормализованные В-сплайны па отрезке Базисные сплайны


Базисные сплайны


В частности, при а = 0 получаем соотношение


Базисные сплайны


которое для нормализованных 5-сплайпов играет ту же роль, что свойство (2.6) для самих 5-сплайнов.

Полученные формулы (8) решают вопрос о представлении произвольного многочлена п-й степени через нормализованные В-сплайны.

Заключение


В данной работе мы рассмотрели понятие сплайна и основные определения необходимые для работы с ним. Было изучено понятие базисного сплайна или B-сплайна, а так же уделено внимание его форме в виде нормализованного сплайна. Так же была создана программа для интерполяции сплайнов при помощи языка программирования высокого уровня C++.


Список литературы


Вержбицкий В.М. Основы численных методов – М.:Высш. шк., 2002.

Завьялов Ю.С., Квасов Б.И., Мирошниченко В.Л. Методы сплайн – функций - М.: Наука, 1980. 352 с

Бахвалов Н. С., Жидков Е. П., Кобельков Г. М. Численные методы. Учебное пособие. - 4-е издание – М.- СПб.: Физматлит, Невский диалект, Лаборатория базовых знаний, 2003

Препарата Ф., Шеймос М. Вычислительная геометрия. Введение. - Мир, 1989

Колмогоров А. Н., Фомин С. В. Элементы теории функций и функционального анализа - М.: Наука, 1976

Приложение


Листинг программы.

#include<conio.h>

#include<iostream>

using namespace std;

double KubichSplain ( int n, double *X, double *Y, double Xp )

{

double *Q, *L, *A, *B, *C, *D, DXp, Yp;

int i, j, k;

Q = new double [n];

L = new double [n];

A = new double [n];

B = new double [n];

C = new double [n];

D = new double [n];

for(i=0;i<n;i++)

if(Xp<=X[i])

{

k=i;

break;

}

Q[1] = (-1) * (X[2]-X[1])/2*(X[1]-X[0] + X[2]-X[1]);

L[1] = (3*(Y[2]-Y[1])/(X[2]-X[1]) - 3*(Y[1]-Y[0])/(X[1]-X[0])) / (2*(X[1]-X[0] + X[2]-X[1]));

C[n-1]=0;

C[0]=0;

for(i=3; i<n; i++)

{

Q[i-1]=(-1) * (X[i]-X[i-1]) / (2*(X[i-1]-X[i-2]+X[i]-X[i-1])+(X[i-1]-X[i-2])*Q[i-2]);

L[i-1]=(3*((Y[i]-Y[i-1])/(X[i]-X[i-1])-(Y[i-1]+Y[i-2])/

(X[i-1]-X[i-2]))-(X[i-1]-X[i-2])*L[i-2])/(2*(X[i-1]-X[i-2]+X[i]-X[i-1])+(X[i-1]-X[i-2])*Q[i-2]);

}

for(i=n-1; i>=2; i--)

C[i-1]=Q[i-1]*C[i]+L[i-1];

A[0]=Y[0];

for(i=1;i<n;i++)

{

A[i]=Y[i];

D[i]=(C[i]-C[i-1])/3.*(X[i]-X[i-1]);

B[i]=(Y[i]-Y[i-1])/(X[i]-X[i-1])+2.*(X[i]-X[i-1])*C[i]/3.+(X[i]-X[i-1])*C[i-1]/3.;

}

DXp=Xp-X[k];

//получение значения интерполирующей функции

Yp = A[k] + B[k]*DXp + C[k]*DXp*DXp + D[k]*DXp*DXp*DXp;

delete []A;

delete []B;

delete []C;

delete []D;

delete []Q;

delete []L;

return Yp;

}

void main ( void )

{

double *X, *Y, Xp;

int n, i;

system("CLS");

cout << "Enter n: ";

cin >> n;

X = new double [n];

Y = new double [n];

for ( i = 0; i < n; i ++ )

{

cout << "X[ " << i+1 << " ] = ";

cin >> X[i];

}

for ( i = 0; i < n; i ++ )

{

cout << "Y( " << X[i] << " ) = ";

cin >> Y[i];

}

cout << "Xp = ";

cin >> Xp;

cout << "Y( " << Xp << " ) = " << KubichSplain ( n, X, Y, Xp )<<"\n";

getch();

delete []X;

delete []Y;

}

Рефетека ру refoteka@gmail.com