Автор работы: Пользователь скрыл имя, 18 Мая 2012 в 19:08, курсовая работа
Целью данной курсовой работы является разработка программного продукта, реализующего решение  интерполяционного кубического  сплайна методом фронтальной  прогонки, а так же методом Гаусса.
Для достижения цели были поставлены  следующие задачи:
Изучить теоретический материал по теме: «Интерполяционные кубические сплайны».
Применить изученный материал к разработке программного продукта.
Написать программу на языке С++ для решения данного кубического сплайна методом фронтальной рпогонки.
Проверить решение с помощью приложения MathCad, Excel.
Сравнить результаты, полученные в трех пакетах.
Введение 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
Список  литературы
Замечания.
(i= ) , и если устойчивым, если |Рi|<1, (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]; }
Для вычисления интерполяционного сплайна требуется знать значения X и Y, которые будут записаны в сетку. В данном пакете реализованы вычисления как по равномерной сетке, так и по неравномерной сетке.
1.Равномерная сетка.
2.Неравномерная сетка.
Для вычисления интерполяционного сплайна в редакторе MathCad существует спефиальная функция.
-vx и vy, содержащие координаты x и y, через которые нужно провести кубический сплайн.
- vs := cspline( vx, vy). Вектор vs содержит вторые производные интерполяционной кривой в рассматриваемых точках. функция cspline генерирует кривую сплайна, которая может быть кубическим полиномом в граничных точках.
- Чтобы найти 
интерполируемое значение в 
Решая данный интерполяционный сплайн в Excel, C++, MathCad можно сделать вывод, что наиболее точными из трех вышеприведенных программ является Excel. Погрешность незначительная, но всё же она есть (5-го знак после запятой).
Результаты вычислений в С++ по равномерной сетке:
Результаты вычислений в С++ по неравномерной сетке:
Результаты вычислений в MathCad:
Неравномерная сетка.
Равномерная сетка:
Результаты вычислений в Exсel:
Равномерная сетка:
Неравномерная сетка:
Начало
Ввод: Xi,F(Xi)