Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале)Рефераты >> Кибернетика >> Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале)
mainint:=sum*(b-a);
end;
end.
================================================
=======ОСНОВНАЯ ПРОГРАММА=======
================================================
{$N+}
program Newton_Cotes_metod;{Программа нахождения определенного интеграла}
uses {методом Ньютона-Котеса }
k_unit,k_graph,graph,crt;
const
t=15;
var
c:char;
a1,b1,a,b:real;
n1,v,r,n:integer;
h,y:array[0 t] of double;
ea,k:word;
int:double;
f:string;
begin
ea:=10;
v:=detect;
initgraph(v,r,'');
cleardevice;
newsc(ea);
winwin1;
setcolor(15);
outtextxy(380,430,'Нажмите F2 для смены языка.');
repeat
win1(ea);
settextstyle(3,0,1);
outtextxy(178,340,'Press Enter .');
delay(13000);
bar(178,340,350,365);
delay(13000);
if keypressed then {Смена языка}
begin
c:=readkey;
if c=#60 then
begin
ea:=ea+1;
newsc(ea);
winwin1;
setcolor(15);
if ea mod 2 =0 then
outtextxy(380,430,'Нажмите F2 для смены языка.')
else
outtextxy(380,430,'Press F2 key to change language.');
end;
end;
until c=#13;
repeat
newsc(ea);
win2(ea,k); {Ввод способа задания функции}
case k of
0:
wwod1(ea,y,n,a,b);
1:
begin
wwod2(ea,ea,n1,a1,b1,f);
n:=n1;a:=a1;b:=b1;
k:=4;
end;
end;
if k=4 then
funktia(n,a,b,y,1,f);
int:=mainint(n,a,b,y); {Вычисление интеграла}
hkoef(n,h);
proline(ea);
win3(ea,n,a,b,int,f,h,k); {Последнее меню вывода результатов}
until k<>4;
closegraph;
end.
Рассмотрим результаты тестовых испытаний для функций sin(x) на интервале [-5;3] и exp(x) на интервале [2;8]
n=1 |
n=2 |
n=3 |
n=4 |
n=5 |
n=7 | |
Sin(x) |
4,040017 |
3,02112 |
0,087629 |
1,779012 |
1,537481 |
1,246 |
Exp(x) |
8965,041 |
3581,999 |
3271,82 |
3002,908 |
2990,644 |
2974,322 |
N=9 |
n=12 | |||||
1,273561 |
1,27366 | |||||
2973,593 |
2973,569 |
Видно, что при увеличении числа узлов интерполяции точность растет, однако при больших n (n>15) наблюдался обратный эффект.
Рекомендуемый диапозон n: от 7 до 13.
1) Интерфейс программы составлен на 2 языках: русском и английском. Переход с одного языка на другой осуществляется в вводном окне путем нажатия клавишы F2. Сменить язык можно только в этой части программы.
2) При вводе значений функции вручную необходимо вводить только цифры и после каждого ввода нажимать клавишу ENTER.
3) При испытании программы под разные операционные системы(Dos, Windows 98-2k,NT, из под паскаля) происходил непонятный баг с неверным выводом на экран значений коэффициентов Ньютона-Котеса, хотя интеграл считался верно. Для нормального нахождения их желательно запускать программу через Dos.
4) При вводе параметров в “Меню задания параметров нахождения интеграла” желательно их вводить постепенно сверху вниз, т.е. сначала ввести количество узлов интерполяции, затем пределы интегрирования, а уж потом вводить саму функцию.
5) Данная версия программы не способна распознавать все функции. Она может распознать только стандартные функции Турбо Паскаля и еще несколько дотполнительных: sin(x)/x, cos(x)*x ,arcctg(x). Для работы со специфическими функциями необходимо в модуле K-unit в процедуре RASPOSN в конце, перед end else, добавить :
k:=pos(‘Формула f(x)’,f);
if k<>0 then t:= ‘Формула f(x)’;
где ‘Формула f(x)’ – желаемая формула для распознования.
6) Вся помощь по вводу и работе с пограммой выводится в окне помощи.
Для нахождения интеграла существует много методов, однако, метод Ньютона-Котеса один из самых быстрых: достаточно знать значения коэффициентов для n=4, чтобы с точностью до сотых мгновенно посчитать интеграл. Быстрота и простота –главные части этого метода.
В.И. Грызлов «Турбо Паскаль 7.0» Москва: ДМК 2000г.
Данилина «Численные методы» Москва: Высшая школа 1978г.