Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Интерполяций функций с помощью сплайна - файл 1.doc


Интерполяций функций с помощью сплайна
скачать (485.8 kb.)

Доступные файлы (3):

1.cpp
1.doc983kb.21.12.2009 22:44скачать
1.exe

содержание

1.doc

ГОУ ВПО

Уфимский Государственный Авиационный Технический Университет


Лабораторная работа №1
ИНТЕРПОЛЯЦИЯ ФУНКЦИЙ С ПОМОЩЬЮ СПЛАЙНА

Выполнили:

студент гр. АСОИ-238

Булгакова Н.Ю.

Проверила:

Ошмарина Е.М.





Уфа 2009



1. Постановка задачи
Разработать программу для интерполяции произвольной функции методом кубического сплайна. В качестве краевых условий выберем пункт а) указанный в методических материалах. А также вычислим погрешность max, ∆оц, К∆. В качестве отладочного примера используем функцию sinx на промежутке [0;π].
^ 2. Текст программы на языке С++
#include <iostream.h>

#include <math.h>

#include <conio.h>

#include<iomanip.h>

using namespace std;

const int N=10240;

int main()

{

cout.setf(ios::left);

int i, n;

double max,max2,dK,oc,x1,A,B,h,x[N],a[N],b[N],c[N],d[N],y[N],mu[N],m[N],S3[N];

A=0;

B=3.141592653589;

max=0;

max2=0;

cout<<"============================================================="<<endl;

cout<<"| n | max | d ocenka | dk | "<<endl;

for(n=5;n<=10240;n=2*n)

{h=(B-A)/n;

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

x[i]=A+i*h;

a[0]=a[n]=1;

b[0]=c[n]=0;

d[0]=-sin(A);

d[n]=-sin(B);

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

{ a[i]=2*h/3;

b[i]=h/6;

c[i]=h/6;

d[i]=(sin(x[i+1])-2*sin(x[i])+sin(x[i-1]))/h;

}

y[0]=-b[0]/a[0];

mu[0]=d[0]/a[0];

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

{ y[i]=-b[i]/(a[i]+c[i]*y[i-1]);

mu[i]=(d[i]-c[i]*mu[i-1])/(a[i]+c[i]*y[i-1]);

}

m[n]=mu[n];

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

m[i]=y[i]*m[i+1]+mu[i];

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

{x1=x[i-1]+h/2;

S3[i]=((x[i]-x1)*sin(x[i-1])+(x1-x[i-1])*sin(x[i]))/h+(pow((x[i]-x1),3)-h*h*(x[i]-x1))*m[i-1]/(6*h)+(pow((x1-x[i-1]),3)-h*h*(x1-x[i-1]))*m[i]/(6*h);

}

max=fabs(S3[1]-sin(x[0]+h/2));

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

{ x1=x[i-1]+h/2;

if(fabs(S3[i]-sin(x1))>max) max=fabs(S3[i]-sin(x1));

}

if(n>5)

{ dK=max2/max;

oc=max2/16;

}

if(n==5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<max<<"|"<<setw(15)<<"-"<<"|"<<setw(18)<<"-"<<"|"<<endl;

if(n>5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<oc<<"|"<<setw(15)<<max<<"|"<<setw(18)<<dK<<"|"<<endl;

max2=max;

}

getch();}

^ 3. Блок-схема алгоритма

4. Пример работы программы

^ 5. Результаты работы программы
Вывод: В лабораторной работе была разработана программа для интерполирования функции sinx на отрезке [0, π] при равномерном разбиении с удвоением числа отрезков n. Краевые условия – равенство нулю второй производной (б). Результаты работы программы представлены в виде таблицы, содержащей максимальную погрешность и её оценку при каждом числе отрезков n.В колонке Δmax представлена максимальная погрешность |S3(x)-f(x)|, вычисленная в точках, находящихся между узлами сетки; KΔ отношение погрешности предыдущей строки к данной (коэффициент уменьшения погрешности при удвоение n). KΔ сохраняет значение до значений n = 640, выше которых в общей погрешности результата преобладает погрешность округления. Из таблицы видно, что с увеличением числа отрезков n точность метода возрастает.


Скачать файл (485.8 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации