Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

метод симпсона (=0,001)

.doc
Скачиваний:
19
Добавлен:
09.12.2013
Размер:
51.71 Кб
Скачать

Агентство по образованию РФ

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

Кафедра АТ

Лабораторная работа №2

Адаптивный квадратурный алгоритм

Выполнил студент гр.КРЭС-05

Киляков И.Н.

Проверила преподаватель

Леготкина Т.С.

Пермь 2007

Цель работы: исследование адаптивных алгоритмов численного интегрирования.

Задание:

1.Составьте алгоритм и программу решения задачи адаптивного интегрирования методом Симпсона (n=2) при заданной погрешности (ε=0,001) методом двойного пересчета с банкированием и без него интеграл х*х*х*cos(3*ln x)dx в промежутке от 0,5 до 2.

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

Program laba2;

Uses CRT;

Const a=0.5; b=2; eps=0.001;

Var x1,x2,pogr,pogrS,e, int1,int2,int3,int,eps1:real; i:integer;

function f(x:real):real;

begin

f:=x*x*x*(cos(3*ln(x)));

end;

Begin clrscr;

Writeln('Вычисление интеграла без банкирования');

WriteLn('h(i)':17,'Q(i)':21,'e(i)':17,'R(i)':17);

x1:=a;x2:=b;e:=eps;

int:=0;pogrS:=0;i:=1;

repeat

int1:=(x2-x1)/2*(f(x1)+f(x2));

int2:=(x2-x1)/4*(f(x1)+f(x2)+2*f((x1+x2)/2));

pogr:=abs(int2-int1)/3;

eps1:=e*(x2-x1)/(b-a);

if pogr<=eps1 then

begin

int:=int+int2;

pogrS:=pogrS+pogr;

WriteLn(' ', (x2-x1):5:5, '| ' ,int:5:5, '| ',e*(x2-x1)/(b-a):5:5,' | ',pogr);

WriteLn; x1:=x2; x2:=b; i:=i+1;

end

else x2:=(x2+x1)/2; until b=x1;

writeln('Количество шагов=',i-1); writeln('Сумма интеграла= ',int:5:2); writeln('Сумма погрешностей= ',pogrS:5:2,' < 0.001'); readln;

Writeln('Вычисление интеграла cбанкированием');

WriteLn('h(i)':6,'Q(i)':6,'e(i)':6,'R(i)':6);

x1:=a;x2:=b;e:=eps;

int:=0;pogrS:=0;i:=1;

repeat

int1:=(x2-x1)/2*(f(x1)+f(x2));

int2:=(x2-x1)/4*(f(x1)+f(x2)+2*f((x1+x2)/2));

pogr:=abs(int1-int2)/3;

eps1:=e*(x2-x1)/(b-a);

if pogr<=eps1 then

begin

int:=int+int2;

pogrS:=pogrS+pogr;

WriteLn(' ', (x2-x1):5:5, '| ' ,int:5:5, ': ' , e*(x2-x1)/(b-a):5:5,' | ',pogr);

WriteLn; e:=e+e*(x2-x1)/(b-a)-pogr; x1:=x2;

x2:=b;

i:=i+1;

end

else x2:=(x2+x1)/2;

until b=x1;

writeln('Количество шагов=',i-1);

writeln('Сумма интеграла= ',int:5:2);

writeln('Сумма погрешностей= ',pogrS:5:6,' < 0.001');

readln;

end.

Результат вычислений при ε=0,001

Без банкирования

С банкированием