Logo GenDocs.ru

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


Загрузка...

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


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

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

lab1.cpp
лаб1_отчет.docx27kb.06.12.2009 21:32скачать
Лабораторная работа 1.pdf223kb.04.10.2009 15:11скачать

содержание
Загрузка...

лаб1_отчет.docx

Реклама MarketGid:
Загрузка...
Лабораторная работа №1

по дисциплине «Вычислительная математика»

тема:

ИНТЕРПОЛЯЦИЯ ФУНКЦИЙ С ПОМОЩЬЮ СПЛАЙНА

Выполнил студент

гр. АСОИ-237

Рахимов Роман

Проверила:

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



Цель работы:

Ознакомление студентов с задачей интерполяции функций, с методом прогонки для решения систем линейных алгебраических уравнений с ленточной матрицей, с понятием сплайна, получение навыков решения задач вычислительной математики на ЭВМ.
Задача работы:

Разработать программу для интерполяции функции sinx на отрезке [0,π] при равномерном разбиении с удвоением числа отрезков n. Краевые условия – равенство нулю второй производной.


^ Код программы:
#include <iostream.h>

#include <math.h>

#include <conio.h>

#include <iomanip.h>
using namespace std;
double func(double x)

{

return sin(x);

}

int main()

{const int N=10240;

int i, n;

double max,max2,K,oc,X,A=0,B=3.141592653589,h,x[N],a[N],b[N],

c[N],d[N],l[N],v[N],m[N],S3[N];

cout<<" n dmax doc Kd \n";

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]=-func(A);

d[n]=-func(B);

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

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

b[i]=h/6;

c[i]=h/6;

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

}

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

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

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

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

v[i]=(d[i]-c[i]*v[i-1])/(a[i]+c[i]*l[i-1]);

}

m[n]=v[n];



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

m[i]=l[i]*m[i+1]+v[i];

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

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

S3[i]=((x[i]-X)*func(x[i-1])+

(X-x[i-1])*func(x[i]))/h+

(pow((x[i]-X),3)-h*h*(x[i]-X))*m[i-1]/(6*h)+

(pow((X-x[i-1]),3)-h*h*(X-x[i-1]))*m[i]/(6*h);

}

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

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

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

if(fabs(S3[i]-func(X))>max) max=fabs(S3[i]-func(X));

}

cout<<endl<<setw(7)<<n<<" "<<setw(16)<<max;

if(n>5)

{ oc=max2/16; cout<<" "<<setw(16)<<oc;

K=max2/max; cout<<" "<<setw(16)<<K;

}

max2=max;

}

getch();

}

^ Тест работы программы:

Вывод:

В ходе лабораторной работы была разработана программа для интерполяции заданной функции методом прогонки с помощью сплайна. Результат оценки погрешности представлен в виде таблицы выше.


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

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

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