Сплайн-интерполяция
ПРИДНЕСТРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
им. Т.Г. Шевченко
Рыбницкий филиал
кафедра физики, математики и информатики
КУРСОВАЯ РАБОТА
по дисциплине «Вычислительная математика»
Тема: «Сплайн-интерполяция»
Выполнил:
студент II курса 220 гр,
специальности
«ПОВТ и АС»
Проверил:
ст .преподаватель
Балан Л. А.
Рыбница
2011 г.
Оглавление
Введение 2
Глава I. Теоретические основы интерполирования кубическим сплайном. 4
1.1 Постановка задачи интерполирования кубическими сплайнами. 4
1.2 Алгоритм построения интерполяционного кубического сплайна. 5
1.3 Обзор методов решения СЛАУ с трехдиагональными матрицами методом фронтальной прогонки. 9
1.4 Численный пример. 12
Глава II. Практическая реализация интерполирования кубическим сплайном 19
2.1 Реализация в С++. 19
2.2 Реализация в Exel. 20
2.3 Реализация в MathCad. 22
2.4 Сравнение полученных результатов. 23
2.5 Блок-схема программной реализации сплайн интерполяции. 26
Заключение. 27
Список литературы 28
Приложение. 29
Введение
Часто возникает
необходимость, как в самой математике,
так и ее приложениях в разнообразных
областях получать решения математических
задач в числовой форме. (Для представления
решения в графическом виде также
требуется предварительно вычислять
его значения.) При этом для многих
задач известно только о существовании
решения, но не существует конечной формулы,
представляющей ее решение. Даже при
наличии такой формулы ее использование
для получения отдельных
Во всех этих случаях используются
методы приближенного, в первую очередь
численного решения. Методы численного
решения математических задач всегда
составляли неотъемлемую часть математики
и неизменно входили в
Современной формой метода математического
моделирования является вычислительный
эксперимент, рассматриваемый как
новый теоретический метод
Технологическая цепочка вычислительного эксперимента включает в себя следующие этапы:
- построение математической модели исследуемого объекта (сюда же относится и анализ модели, выяснение корректности поставленной математической задачи;
- построение вычислительного алгоритма - метода приближенного решения поставленной задачи и его обоснование;
- программирование алгоритма на ЭВМ и его тестирование;
- проведение серии расчетов с варьированием определяющих параметров исходной задачи и алгоритма;
- анализ полученных результатов;
Целью данной курсовой работы является разработка программного продукта, реализующего решение интерполяционного кубического сплайна методом фронтальной прогонки, а так же методом Гаусса.
Для достижения цели были поставлены следующие задачи:
- Изучить теоретический материал по теме: «Интерполяционные кубические сплайны».
- Применить изученный материал к разработке программного продукта.
- Написать программу на языке С++ для решения данного кубического сплайна методом фронтальной рпогонки.
- Проверить решение с помощью приложения MathCad, Excel.
- Сравнить результаты, полученные в трех пакетах.
Глава I. Теоретические основы интерполирования кубическим сплайном.
- Постановка задачи интерполирования кубическими сплайнами.
Пусть на отрезке [a,b] задана сеточная функция у1 = f(xi) на сетке Ωп. Требуется восполнить ее функцией Sm(x), где т — степень многочлена, кусочно-глобальным способом.
Дадим сначала упрощенное определение сплайна, которое затем уточним.
Сплайн-функцией или сплайном называется совокупность Sm,i(x)- алгебраических многочленов степени m (звеньев), определенных на частичных отрезках [xi,xi+1] , i= , и соединенных вместе по всем частичным отрезкам так, чтобы можно было составить многозвенную функцию
Sm(x)= определенную и непрерывную на всем отрезке [a,b] вместе со всеми своими производными до некоторого их порядка p=1,2,…..
Разность между р и наибольшим порядком производной, непрерывной на отрезке [а, b], определяет дефект сплайна q.
Условиями согласования звеньев Sm,i(x) сплайна с исходной функцией yi=f(xi) на соответствующем частичном отрезке [хi,хi+1] называются условия, накладываемые на невязки дифференциального и интегрального типов , и использующиеся для вывода формулы одного звена сплайна на указанном частичном отрезке.
Сплайн, удовлетворяющий условиям нулевых функциональных невязок, называется интерполяционным.
- Алгоритм построения интерполяционного кубического
сплайна.
Первый этап. Для алгебраического многочлена (полинома)
S3,i(x) = a0,i + a1,i(x-xi) + a2,i(x-xi)2 + a3,i(x-xi)3 (1.1)
Относящегося к одному i-му звену сплайна, для которого x є [xi,xi+1], выбираются два дифференциальных условия согласования с порядком Р1={0; 2}, каждое из которых относится к концам отрезка [хi, xi+1]:
(1.2)
( 1.3)
Выбор значения p = 0 обусловлен тем, что отыскивается S3(x) — интерполяционный многочлен, а выбор производных порядка р = 2 зависит от выбора способа. Условия (1.2), (1.3) задают параметры сплайна fi,
Mi=f’’(xi), i= первые из которых (функциональные) являются определенными, а вторые (дифференциальные) - неопределенными.
Подстановка в соотношения (1.2), (1.3) полинома (1.1) приводит к системе четырех линейных алгебраических уравнений относительно неизвестных коэффициентов ак,i (k = 0,1,2,3). Разрешая их, подставляя получен ные формулы для ak ,i в (1.1) и распространяя этот результат на все частичные отрезки, имеем:
f
(1.4)
Где hi+1 = xi+1- xi , Δfi = fi+1 – fi, Δmi = mi+1 – mi.
Таким образом, найдена общая формула одного звена сплайна, которая выражается через определенные (fi) и неопределенные (mi) параметры
(i= ). Эти параметры обеспечивают непрерывность сплайна:
, (i= ), и его вторых производных
, (i= ), всех внутренних узлов.
Второй этап. При вычислении неопределенных параметров mi(i= ) входящих в (1.4), с учетом условия стыковки для всех внутренних узлов устанавливается связь между fi и mi. Эта связь получается путем записи правой части (1.4) для звена S3,i-1(x) при хє[xi-1,xi], ее дифференцирования и приравнивания производной правой части (1.4) для звена S3,i(x) при хє[xi,xi+1], соответствии с условием стыковки (р2 = 1). Проведя несложные выкладки и распространив найденное соотношение на все внутренние узлы, получим параметрическую систему — трехдиагональную систему линейных алгебраических уравнений, устанавливающую линейную связь комбинаций определенных fi и неопределенных параметров mi, во внутренних узлах:
(1.5)
Данная система относительно mi (i= ) является незамкнутой, так как не хватает двух уравнений. Для ее замыкания используют различные пути выбора аппроксимаций производных на концах (граничных условий):
1. В простейшем случае вторые производные на концах принимаются нулевыми, т.е. m0 = 0 ; mn = 0.
Такие условия называются
условиями натурального
2. Для первых двух и последних двух отрезков можно применить условие равенства третьей производной. Тогда получается соотношение
Δmk-1/hk=Δmk/hk+1 (k = 1,n- 1).
Отсюда следуют два
(1.6)
Соотношения (1.6) позволяют замкнуть систему (1.5) при h = var (неравномерная сетка). При h = const вторые производные на концах вычисляются по явным формулам второго порядка аппроксимации [6]:
(1.7)
Отметим, что как (1.6), так и формулы (1.7) для т0 и тп имеют порядки аппроксимации, соответствующие порядку сходимости S3(x) к f(x).
Третий этап. Определяются значения mi (i= ) путем решения систем (1.5), (1.6) (параметрически прямая задача). Для этого используется метод прогонки, причем необходимо предварительно из первых двух и последних двух уравнений исключить слагаемые с т2 и тп-2 соответственно. В случае равномерной сетки, как отмечено выше, система (1.5) замыкается аппроксимацией (1.7).
Четвертый этап. Формируются массивы коэффициентов a0,i, a1,i, a2,i, a3,i
для всех звеньев сплайна (i= ) и определяется глобальный интерполяционный сплайн:
путем составления многозвенной функции.
Пятый этап. При необходимости полученная сплайн-функция S3(x) используется для вычисления значений функции и производных порядка р :
(p = 0,1,2…) в произвольных точках хє[xi-1,xi], (i= ) , или определенных интегралов:
Методика построения интерполяционного кубического сплайна
Используя систему (1.5) , условия т0 = 0, тп = О или (1.6) (при h = const можно использовать условия (1.7)), сформировать замкнутую систему относительно неопределенных параметров.
Вычислить коэффициенты системы (1.5), зависящие от шагов сетки Q„, и решить ее методом прогонки. В результате найти неопределенные параметры
m0,m1,…,mn.
Записать выражения для
Вычислить коэффициенты звеньев и сформировать многозвенную сплайн-функцию
являющуюся сплайном дефекта q = 1.
- Обзор методов решения СЛАУ с трехдиагональными матрицами методом фронтальной прогонки.
Метод применим в случае, когда матрица А — трехдиагональная. Общая постановка задачи имеет следующий вид.
Дана система линейных алгебраических уравнений с трехдиагональной матрицей А . Развернутая запись этой системы имеет вид
(1.8)
которому соответствует расширенная матрица
Здесь первое и последнее уравнения, содержащие по два слагаемых, могут рассматриваться как краевые условия. Знак «—» при коэффициенте βi, взят для более удобного представления расчетных формул метода.
Требуется найти решение х* = (x*1,…,x*n)T системы (1.8) методом исключения Гаусса.
Если к (1.8) применить алгоритм прямого хода метода Гаусса, то вместо А1 получится А1:
Учитывая, что последний столбец в этой матрице соответствует правой части, и переходя к системе, включающей неизвестные, получаем рекуррентную формулу:
(1.9)
Соотношение (1.9) есть формула для обратного хода, а формулы для коэффициентов Pi,Qi , которые называются прогоночными, определяются из (1.8), (1.9). Запишем (1.9) для индекса (i-1):
И подставим в (1.4). Получим
Приводя эту формулу к виду (1.9) и сравнивая полученное выражение с (1.9), получаем рекуррентные соотношения для Pi,Qi :
(2.0)
Определение прогоночных коэффициентов по формулам (2.0) соответствует прямому ходу метода прогонки.
Обратный ход метода прогонки начинается с вычисления хп. Для этого используется последнее уравнение, коэффициенты которого определены в прямом ходе, и последнее уравнение исходной системы:
Тогда определяется хn:
Остальные значения неизвестных находятся рекуррентно по формуле (1.9).
Все соотношения для выполнения вычислений получены. Тогда можно провести расчеты по методу Гаусса, используя прямой и обратный ход.
Методика решения задачи
Прямой ход.
- Вычислить , (в (2.0) подставить a1 =0).
2. Вычислить прогоночные коэффициенты P2,Q2; P3,Q3;…; Pn-1,Qn-1; по формулам (2.0).
Обратный ход.
- Найти
Значения xn-1, xn-2,…, x1, определить по формуле (1.9) :
Замечания.
- Данный метод называется методом скалярной прогонки, так как при решении задачи на каждом i-ом шаге определяется скалярная величина xi (i= ).
- Аналогичный подход используется для решения систем линейных алгебраических уравнений с пятидиагональными матрицами.
- Алгоритм метода прогонки называется корректным, если для все
(i= ) , и если устойчивым, если |Рi|<1, (i= ).
- Достаточным условием коррекности и устойчивости прогонки является условие преобладания диагональных элементов в матрице А, в матрице ai ≠ 0 и γi ≠ (i= ):
- Численный пример.
- Равномерная сетка.
Пусть дана равномерная сетка, со значениями функции в точках.
Хi |
F(xi) |
ΔF(xi) |
h |
0 |
0 |
0.10017 |
0.05 |
0.05 |
0.10017 |
0.10117 |
|
0.1 |
0.20134 |
0.10318 |
|
0.15 |
0.30452 |
Мы так же сразу можем найти ΔF(xi), так как в дальнейших вычислениях эти данные нам пригодятся. ΔF(xi) находится по формуле:
И найдем шаг сетки h. Шаг находится по формуле:
Запишем систему для внутренних узлов:
Так как h = const, для нахождения значения выбираются формулы:
Подставляем в эти формулы данные с таблицы, и получаем следующие значения , .
Получается система:
Далее эту систему мы будем решать методом прогонки (см. п. 1.2).
По методу прогонки нам надо вычислить:
; ; по формулам :
; , где .
Найденные значения P: P1 = 0; Р2 = -0,25; Р3 = -0,2667.
Найденные значения Q: Q1 = 1.00169; Q2 = 0.349578; Q3= 1.193179; Q4= 1.208.
Для получения нужных значений для нахождения сплайна используем обратный ход, по формулам:
.
Получаем значения: M1 = 1.00169; M2 = 0.131816; M3 = 0.871046; M4 = 1.208.
Все значения нам известны. Можно приступить к нахождения сплайна.
Для нахождения сплайна нам понадобится формула:
Где hi+1 = xi+1- xi, Δfi = fi+1 - fi , Δmi = mi+1 – mi , i=0,1,2,3.
Нам нужно найти значение сплайна в двух точках Х1 = 0,06 и Х2 = 0,11. Чтобы знать в какой из сплайнов подставлять Х, надо подставить в промежутки. Х1 подходит для второго уравнения, Х2 подходит для третьего. Подставляя Х мы находим значение сплайна в нужном Х.
Подставив 0,06 во второй сплайн, а 0,11в третий сплайн, нашли значение сплайнов, и они равны:
S3,1(0.06) = 0.120318, S3,2 (0.11) = 0.221774
- Неравномерная сетка.
Пусть дана неравномерная сетка, со значениями функции в точках Х.
I |
Xi |
F(Xi) |
Δ F(Xi) |
Hi |
|
0 |
0.1 |
1.1052 |
0.0566 |
0.05 |
1 |
0.15 |
1.1618 |
0.0474 |
0.04 |
2 |
0.19 |
1.2092 |
0.0748 |
0.06 |
3 |
0.25 |
1.284 |
Δ F(Xi) = F(Xi+1) - F(Xi), hi = hi+1 – hi , i=0,1,2,3.
Запишем систему для внутренних узлов:
Так как h = var , для нахождения значения выбираются формулы:
Получается система из 4х уравнений, подставим известные нам значения:
Эту систему можно решить методом Гаусса:
20 |
-45 |
25 |
0 |
0 |
0,00833333 |
0,03 |
0,006667 |
0 |
0,053 |
0 |
0,006667 |
0,033333 |
0,01 |
0,061667 |
0 |
25 |
-8,33333 |
16,66667 |
0 |
1 |
-2,25 |
1,25 |
0 |
0 |
0 |
0,04875 |
-0,00375 |
0 |
0,053 |
0 |
0,006667 |
0,033333 |
0,01 |
0,061667 |
0 |
25 |
-8,33333 |
16,66667 |
0 |
1 |
-2,25 |
1,25 |
0 |
0 |
0 |
1 |
-0,07692 |
0 |
1,087179 |
0 |
0 |
0,033846 |
0,01 |
0,054419 |
0 |
0 |
-6,41026 |
16,66667 |
-27,1795 |
1 |
-2,25 |
1,25 |
0 |
0 |
0 |
1 |
-0,07692 |
0 |
1,087179 |
0 |
0 |
1 |
0,295455 |
1,607828 |
0 |
0 |
0 |
18,56061 |
-16,8729 |
1 |
-2,25 |
1,25 |
0 |
0 |
0 |
1 |
-0,07692 |
0 |
1,087179 |
0 |
0 |
1 |
0,295455 |
1,607828 |
0 |
0 |
0 |
1 |
-0,90907 |
По обратному ходу найдем искомые Mi :
M1 = 0.425397; M2 = 1.231519; M3 = 1.876417; M4 = -0.90907;
Найдем ΔMi = Mi+1 – Mi . M1 = 0.806122; M2 = 0.644898; M3 = -2.78549.
Все значения нам известны. Можно приступить к нахождения сплайна.
Для нахождения
сплайна нам понадобится
Где hi+1 = xi+1- xi, Δfi = fi+1 - fi , Δmi = mi+1 – mi , i=0,1,2,3.
Нам нужно найти значение сплайна в двух точках Х1 = 0,2 и Х2 = 0,17. Чтобы знать в какой из сплайнов подставлять Х, надо подставить в промежутки. Х1 подходит для второго уравнения, Х2 подходит для третьего. Подставляя Х мы находим значение сплайна в нужном Х.
Подставив 0,17 во второй сплайн, а 0,2в третий сплайн, нашли значение сплайнов, и они равны:
S3,1(0.17) = 1.185168, S3,2 (0.2) = 1.221476.
Глава II. Практическая реализация интерполирования кубическим сплайном
- Реализация в С++.
Программа
реализована с помощью трёх основных
функций – В главной функции vo
void main()
{
clrscr();
int ch;
cout<<"Viberi setky:"<<endl;
cout<<"1. Ravnomernaja"<<endl;
cout<<"2.Neravnomernaja"<<
cin>>ch;
if(ch==1) ravn();
if(ch==2)neravn();
cout<<"\n Vihod!";
getch();
}
Функция void neravn() и void ravn(). Предназначены для вычисления всех необходимых данных для нахождения сплайна. К примеру часть программы которая вычисляет сплайн выглядит так :
cout<<"\n Vvedite zna4enie X - "<<endl;
cin>>ot;
if(ot>=x[0] && ot<x[1])
{
s3[0]=((1.0/h)*dfx[0]-(h/2)*
s3[0]=s3[0]+(1.0/(6.0*h)*dm[1]
s3[0]+=fx[0];
cout<<"\n S3[0] = "<<s3[0]; }
if(ot>=x[1] && ot<x[2])
{
s3[1]=((1.0/h)*dfx[1]-(h/2)*
s3[1]=s3[1]+(1.0/(6.0*h)*dm[2]
s3[1]+=fx[1];
cout<<"\n S3[1] = "<<s3[1]; }
if(ot>=x[2] && ot<x[3])
{
s3[2]=((1.0/h)*dfx[2]-(h/2)*
s3[2]=s3[2]+(1.0/(6.0*h)*dm[2]
s3[2]+=fx[2];
cout<<"\n S3[2] = "<<s3[2]; }
- Реализация в Exel.
Для вычисления интерполяционного сплайна требуется знать значения X и Y, которые будут записаны в сетку. В данном пакете реализованы вычисления как по равномерной сетке, так и по неравномерной сетке.
1.Равномерная сетка.
2.Неравномерная сетка.
- Реализация в MathCad.
Для вычисления интерполяционного сплайна в редакторе MathCad существует спефиальная функция.
-vx и vy, содержащие координаты x и y, через которые нужно провести кубический сплайн.
- vs := cspline( vx, vy). Вектор vs содержит вторые производные интерполяционной кривой в рассматриваемых точках. функция cspline генерирует кривую сплайна, которая может быть кубическим полиномом в граничных точках.
- Чтобы найти
интерполируемое значение в
2.4 Сравнение полученных результатов.
Решая данный интерполяционный сплайн в Excel, C++, MathCad можно сделать вывод, что наиболее точными из трех вышеприведенных программ является Excel. Погрешность незначительная, но всё же она есть (5-го знак после запятой).
Результаты вычислений в С++ по равномерной сетке:
Результаты вычислений в С++ по неравномерной сетке:
Результаты вычислений в MathCad:
Неравномерная сетка.
Равномерная сетка:
Результаты вычислений в Exсel:
Равномерная сетка:
Неравномерная сетка:
2.5 Блок-схема программной
реализации сплайн интерполяции.
Начало
Ввод: Xi,F(Xi)