Вычисление интеграла фукции f (x) (методом Симпсона)
procedure norm(a:real);
var n:real;
begin
{ Если число слишком мало - возвращается ноль }
if (a<0.00001) then n:=0
else begin
{ Если число меньше единицы }
if (a<1) then begin
n:=1;
repeat
a:=a*10;
n:=n/10;
until (trunc(a)<>0);
end else begin
{ Если число больше единицы }
n:=1;
repeat
a:=a/10;
n:=n*10;
until (trunc(a)=0);
end;
end;
a:=n;
end;
{ Построение графика функции }
procedure out_grp(xmin,xmax,ymin,ymax:real);
var
drv,mode:integer;
mx,my:real; { Масштабы по осям }
xx,yy:real; { Текущие координаты }
sx:real; { Шаг по оси X }
dltx,dlty:integer;{ Приращение на графике при смещении графика }
s:string; { Строка }
begin
{ Инициализация графики }
drv:=VGA;
mode:=VGAHi;
initgraph(drv,mode,'');
{ Выяснение порядков минимумов и максимумов }
norm(xmax);
norm(ymax);
norm(ymin);ymin:=ymin/10;
norm(xmin);ymin:=ymin/10;
if (xmin/xmax)>0.01 then dltx:=20 else dltx:=0;
if (ymin/ymax)>0.01 then dlty:=20 else dlty:=0;
{ Расчет масштабов }
mx:=500/(xmax-xmin);
my:=400/(ymax-ymin);
{ Расчет приращения по X }
sx:=(xmax-xmin)/550;
{ Вывод системы координат }
settextjustify(1,1);
xx:=xmin;
repeat
setcolor(1);
line(trunc(40+mx*(xx-xmin)+dltx),20,trunc(40+mx*(xx-xmin)+dltx),469);
str(xx:4:2,s);
setcolor(15);
outtextxy(trunc(40+mx*(xx-xmin)+dltx),475,s);
xx:=xx+50*sx;
until (xx>(xmax+50*sx));
yy:=ymin+(ymax-ymin)/10;
repeat
setcolor(1);
line(41,trunc(470-my*(yy-ymin)-dlty),630,trunc(470-my*(yy-ymin)-dlty));
str(yy:4:2,s);
setcolor(15);
outtextxy(20,trunc(470-my*(yy-ymin)-dlty),s);
yy:=yy+(ymax-ymin)/10;
until (yy>(ymax+(ymax-ymin)/10));
line(40,0,40,480);
line(0,470,640,470);
line(40,0,38,10);
line(40,0,42,10);
line(640,470,630,472);
line(640,470,630,468);
{ Вывод графика }
xx:=xmin;
repeat
yy:=f(xx);
putpixel(trunc(40+mx*(xx-xmin)+dltx),trunc(470-my*(yy-ymin)-dlty),7);
xx:=xx+sx;
until (xx>xmax);
outtextxy(300,10,' Press ESC to continue ');
repeat until (readkey=#27);
closegraph;
end;
{ Основная программа }
begin
{ Ввод границ отрезков }
clrscr;
write(' Введите A,B: ');
readln(a,b);
{ Выводится график функции }
out_grp(a,b,f(b),f(a));
{ Вычисляется интеграл по методу трапеций }
n:=3;
r:=trap(a,b,n); { Начальное значение }
repeat
r2:=r; { Запоминается предыдущее значение }
n:=n+2; { Увеличивается количество шагов }
r:=trap(a,b,n); { Рассчитывается новое значение }
until (abs(r-r2)<0.001);{ Повторяется до достижения необходимой точности
}
{ Вывод результатов }
writeln(' Резльтат по методу трапеций равен: ',r:6:3);
writeln(' для получения необходимой точности
интервал был разбит на');
writeln(n,' отрезков');
{ Вычисляется интеграл по методу Симпсона }
n:=3;
r:=simpson(a,b,n); { Начальное значение }
repeat
r2:=r; { Запоминается предыдущее значение }
n:=n+2; { Увеличивается количество шагов }
r:=simpson(a,b,n); { Рассчитывается новое значение }
until (abs(r-r2)<0.001);{ Повторяется до достижения необходимой
точности }
{ Вывод результатов }
writeln;
writeln(' Резльтат по методу Симпсона равен: ',r:6:3);
writeln(' для получения необходимой точности интервал
был разбит на ');
writeln(n,' отрезков');
end.
6. Результаты работы программы
Введите A,B: 2 3
[pic]
Результат по методу трапеций равен: 1.062
для получения необходимой точности интервал был разбит на 11 отрезков
Результат по методу Симпсона равен: 1.061
для получения необходимой точности интервал был разбит на 7 отрезков.
Анализ полученных в ходе работы программы результатов говорит о том,
что поставленная задача успешно решается.
Метод трапеции является наиболее простым методом приближённого
интегрирования , этот метод позволяет точно интегрировать многочлен первой
степени , а для интегрирования данной функции требуется довольно много
итераций. Более совершенным является метод Симпсона , который позволяет
точно интегрировать многочлен второй производной и даже некоторые
многочлены третьей степени, поэтому он требует почти в 2 раза меньше
количества интервалов для получения результата.
Заключение
В данной курсовой работе решена задача приближённого интегрирования функции
[pic]
методами Симпсона и трапеции.
В процессе создания курсовой работы разработан алгоритм решения
поставленной задачи. По этому алгоритму на языке Турбо Паскаль 7.0.
составлена и отлажена программа.
В ходе тестирования были получены результаты работы метода трапеции и
метода Симпсона, по которым видно, что результаты интегрирования обоими
методами совпадают с достаточной точностью. Заметна лишь разница в качестве
приближения интервалов.
Программа является полностью работоспособной, что подтверждается
результатами её тестированием..
Список использованных источников:
1.Бронштейн И.Н., Семендяев К.А. Справочник по высшей математике для
инженеров и учащихся втузов. - М.: Наука , 1981 . - 718 с.
2.Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров
перевод с польского Д.И.Юренкова. -М.: Машиностроение , 1991. - 320 с.
3.Сергиевский М.В., Шалашов А.В. Турбо Паскаль 7.0; язык, среда
программирования. -М: Машиностроение.-1994,-254 с.ил.
4.Справочник по процедурам и функциям Borland Pascal 7.0. - Киев:
Диалектика, 1993. - 272 с.
5.Самарский А.А, Гулин А.В. Численные методы.М.:Наука,1989. – 430 с.
| | скачать работу |
Вычисление интеграла фукции f (x) (методом Симпсона) |