61979 (Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале)), страница 5
Описание файла
Документ из архива "Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале)", который расположен в категории "". Всё это находится в предмете "кибернетика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "кибернетика" в общих файлах.
Онлайн просмотр документа "61979"
Текст 5 страницы из документа "61979"
var
sum:double;
p,i:integer;
kq,h:array[0..20] of double;
begin
p:=n;
hkoef(n,h);
sum:=0;
for i:=0 to p do
sum:=sum+h[i]*y[i]; {Сумма произведений y-ков на коэффициенты}
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.
-
Интерфейс программы составлен на 2 языках: русском и английском. Переход с одного языка на другой осуществляется в вводном окне путем нажатия клавишы F2. Сменить язык можно только в этой части программы.
-
При вводе значений функции вручную необходимо вводить только цифры и после каждого ввода нажимать клавишу ENTER.
-
При испытании программы под разные операционные системы(Dos, Windows 98-2k,NT, из под паскаля) происходил непонятный баг с неверным выводом на экран значений коэффициентов Ньютона-Котеса, хотя интеграл считался верно. Для нормального нахождения их желательно запускать программу через Dos.
-
При вводе параметров в “Меню задания параметров нахождения интеграла” желательно их вводить постепенно сверху вниз, т.е. сначала ввести количество узлов интерполяции, затем пределы интегрирования, а уж потом вводить саму функцию.
-
Данная версия программы не способна распознавать все функции. Она может распознать только стандартные функции Турбо Паскаля и еще несколько дотполнительных: 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)’ – желаемая формула для распознования.
-
Вся помощь по вводу и работе с пограммой выводится в окне помощи.
Для нахождения интеграла существует много методов, однако, метод Ньютона-Котеса один из самых быстрых: достаточно знать значения коэффициентов для n=4, чтобы с точностью до сотых мгновенно посчитать интеграл. Быстрота и простота –главные части этого метода.
В.И. Грызлов «Турбо Паскаль 7.0» Москва: ДМК 2000г.
Данилина «Численные методы» Москва: Высшая школа 1978г.
47