Міністерство Вищої Освіти РФ. p>
Московський Інститут Електронної Техніки p>
(Технічний Університет) p>
Ліцей № 1557 p>
Курсова робота
"Обчислення інтеграла методом p>
Ньютона-Котеса" p>
Написав: Конопльов А.А. p>
Перевірив: доцент Колдаев В.Д. p>
Москва, 2001р. p>
1. p>
Вступ ...................... ............................................ p>
................... 3
2. Теоретична частина ................................................ ................... 4
3. Алгоритм роботи ................................................ .................... p>
.... 8
4. Код програми ................................................ ................. p>
........ 17
. Модуль p>
K_graph ......................................... ................... 17
. Модуль p>
Graphic ......................................... .................... 34
. Модуль p>
K_unit ......................................... ...................... 38
. Основна програма ................................................ .... 40
5. Тестові випробування ................................................ ................. p>
42
6. Корисні поради по роботі з програмою ............................. 42
7. Вікна введення та виведення програми .............................................
8. P>
Висновок ........................................ ............................. p>
.............. ....... 43
9. Список літератури ................................................ ................ p>
... 44 p>
Математика - одна з найдавніших наук. Праці багатьох учених увійшли досвітової фонд і стали основою сучасних алгебри та геометрії. Наприкінці XVIIв., коли розвиток науки йшло швидкими темпами, з'явилися поняттядиференціювання, а слідом за ним і інтегрування. Багато правилазнаходження невизначеного інтеграла в той час не були відомі, томувчені намагалися знайти інші, обхідні шляхи пошуку значень. Першимметодом з'явився метод Ньютона - пошук інтеграла через графік функції, тобтознаходження площі під графіком, методом прямокутників, надаліудосконалений у метод трапецій. Пізніше був придуманий параболічнийметод або метод Сімпсона. Однак частина вчених мучив питання: А чи можнаоб'єднати всі ці методи в один??
Відповідь на нього була дана одночасно двома математиками Ньютоном і Котесом.
Вони вивели загальну формулу, названу на їхню честь. Проте їх метод бувчастково забутий. У цій роботі будуть викладені основні положення теорії,розглянуті різні приклади, наведені таблиці, отримані при різнихпогрішності, і звичайно описана робота і код програми, яка розраховуєінтеграл методом Ньютона-Котеса. p>
Нехай деяка функція f (x) задана в уздах інтерполяції:
(i = 1,2,3 ..., n) на відрізку [а, b] таблицею значень: p>
| X0 = a | X1 | X2 | ... | XN = b |
| Y0 = f (x0) | Y1 = f (x1) | Y2 = f (x2) | ... | YN = f (xN) | p>
Потрібно знайти значення інтеграла.
Для початку складемо інтерполяційний многочлен Лагранджа: p>
p>
Для рівновіддалених вузлів інтерполяційний многочлен має вигляд: p>
p>
де q = (x-x0)/h - крок інтерполяції, замінимо подинтегральную функцію f (x)інтерполяційним многочленів Лагранжа: p>
p>
поміняємо знак підсумовування та інтеграл і винесемо за знак інтегралапостійні елементи: p>
p>
Так як dp = dx/h, то, замінивши межі інтегрування, маємо: p>
p>
Для рівновіддалених вузлів інтерполяції на відрізку [a, b] величина кроквизначається як h = (a-b)/n. Представивши цей вираз для h у формулу (4) івиносячи (ba) за знак суми, отримаємо: p>
p>
Покладемо, що p>
де i = 0,1,2 ..., n; Числа Hi називають коефіцієнтами Ньютона-Котеса. Цікоефіцієнти не залежать від виду f (x), а є функцією тільки за n.
Тому їх можна вирахувати заздалегідь. Остаточна формула виглядає так: p>
Тепер розглянемо декілька прикладів. P>
Приклад 1. P>
Обчислити за допомогою методу Ньютона-Котаса:
, при n = 7. P>
Обчислення. p>
1) Визначимо крок: h = (7-0)/7 = 1. p>
2) Знайдемо значення y: p>
| x0 = 0 | y0 = 1 |
| x1 = 1 | y1 = 0.5 |
| x2 = 2 | y2 = 0.2 |
| x3 = 3 | y3 = 0.1 |
| x4 = 4 | y4 = 0.0588 |
| x5 = 5 | y5 = 0.0384 |
| x6 = 6 | y6 = 0.0270 |
| x7 = 7 | y7 = 0.02 | p>
3) Знаходимо коефіцієнти Ньютона-Котеса:
H1 = H7 = 0.0435, H1 = H6 = 0.2040, H2 = H5 = 0.0760, H3 = H4 = 0.1730
Підставимо значення в формулу і отримаємо: p>
При підрахунку за допомогою формули Ньютона-Лейбніца отримаємо: p>
Приклад 2.
Обчислити за допомогою методу Ньютона-Котеса
, Взявши n = 5;
Обчислення:
1) Визначимо крок h = (8-4)/5 = 0.8
2) Знайдемо значення y: p>
| x0 = 0 | y0 =- 2.61 |
| x1 = 4.8 | y1 = 0.42 |
| x2 = 5.6 | y2 = 4.34 |
| x3 = 6.4 | y3 = 6.35 |
| x4 = 7.2 | y4 = 4.38 |
| x5 = 8 | y5 =- 0.16 | p>
3) Знаходимо коефіцієнти Ньютона-Котеса:
H0 = H5 = 0.065972; H1 = H4 = 0.260417; H2 = H3 = 0.173611;
4) Підставимо значення в формулу і отримаємо:
p>
Розглянемо окремі випадки формули Ньйтона-Котеса.
Нехай n = 1 тоді
H0 = H1 = 0.5 і кінцева формула набуде вигляду:
Тим самим в якості окремого випадку нашої формули ми отрималиформулу трапецій.
Взявши n = 3, ми отримаємо
. Окремий випадок формули Ньютона-Котеса - формула Сімпсона p>
Тепер проведемо аналіз алгоритму і розглянемо основний принципроботи програми. p>
Для обчислення інтеграла спочатку знаходяться коефіцієнти Ньютона-
Котеса. Їх перебування здійснюється в процедурі hkoef.
Основною проблемою обчислення коефіцієнтів є інтеграл відтвори множників. Для його розрахунку необхідно: p>
А) порахувати коефіцієнти при розкритті дужок при q
(процедура mnogoclen)
Б) домножити їх на 1/n, де n-ступінь при q (процедура koef)
В) підставити замість q значення n (функція integral) p>
Далі обчислюємо факторіали (функція faktorial) і перемножуєтеотримані вирази (функція mainint). Для збільшення швидкості роботивводиться обчислення половини від кількості вузлів інтерполяції і подальшоїпідстановкою їх замість неподсчітанних. p>
Процедура koef (w: масив; n: цілий; var e: масив); p>
p>
Процедура hkoef (n: цілий; var h: масив); p>
p>
p>
Процедура mnogochlen (n, i: цілі; var c: масив); p>
p>
Процедура funktia (n: ціла; a, b: речовини.; var y: масив; c: речовини.; f: string); p>
Функція facktorial (n: цілий): подвійний; p>
p>
Функція integral (w: масив; n: цілий): подвійний; p>
p>
Функція mainint (n: цілий; a, b: речовини.; y: масив): подвійний; p>
p>
Основна програма p> < p> p>
Програма складається з 8 файлів:
. K_main.exe - файл завантаження основної програми
. K_unit.tpu - модуль обчислювальних процедур і функцій
. K_graph.tpu - модуль графічних процедур
. Graphic.tpu - модуль процедур для побудови графіка
. Egavga.bgi - файл графічної ініціалізації
. Sans.chr, litt.chr - файли шрифтів
. Keyrus.com (не обов'язково) - файл встановлення російської мови.
Для роботи програми з російським інтерфайсом бажано запускати її врежимі DOS. p>
======================================== ======== p>
========== МОДУЛЬ GRAPH ========== p>
====== ==========================================< br>($ N +)unit k_graph;interfaceusescrt, graph, k_unit, graphic;procedure winwin1;procedure proline (ea: word);procedure winwwodab (ea: word);procedure error1 (ea: word);procedure helpwin (ea: word);procedure error (ea: word);procedure newsctext (ea: word);procedure newsc (ea: word);procedure win1 (ea: word);procedure win2 (ea: word; var k: word);procedure wwodn (ea: word; var n: integer);procedure wwodab (ea: word; var a, b: real);procedure wwod1 (ea: word; var y: array of double; var n: integer; var a, b: real);procedure wwod2 (ea: word; var ea1: word; var n: integer; var a, b: real; varst: string);procedure win3 (ea: word; n: integer; a, b: real; int: double; f: string; h: array ofdouble; var k: word);implementationprocedure proline (ea: word);
(Проседура смуги процесу)vari: integer;f: string;c: char;begin newsc (ea); setcolor (15); setfillstyle (1,7); bar (160,150,460,260); rectangle (165,155,455,255); rectangle (167,157,453,253); case (ea mod 2) of p>
0: outtextxy (180,170, 'Йде робота. Чекайте ..'); p>
1: outtextxy (180,170,' Working.Please wait ..'); end; setfillstyle (1,12); setcolor (0); rectangle (200,199,401,221); for i: = 1 to 9 do line (200 + i * 20,200,200 + i * 20,220); delay (20000); for i: = 1 to 100 do begin if ((i-1) mod 10) = 0 then line (200 + ((i-1) div 10) * 20,200,200 + ((i-1) div 10) * 20,220); bar (round (200 +2 * (i-0.5)), 200,200 +2 * i, 220); delay (1100); setcolor (15); setfillstyle (1,7); bar (280,230,323,250); str (i, f); f: = f +'%'; outtextxy (290,235, f); if (i mod 25) = 0 then bar (170,180,452,198); if (ea mod 2) = 0 then case (i div 25) of p>
0: outtextxy (170,190, 'Підготовка'); p>
1: outtextxy (170,190, 'Розрахунок коефіцієнт в многочленів'); p>
2: outtextxy (170,190,' Розрахунок коефіцієнт Ньютона-Котеса'); p>
3: outtextxy (170,190, 'Розрахунок інтеграла'); end else case (i div 25) of p>
0: outtextxy (170,190, 'Prepearing'); p>
1: outtextxy (170,190, 'Calculation of mnogochlen coeff .'); p>
2: outtextxy (170,190,' Calculation of Newton-Cotes coeff.'); p>
3: outtextxy (170,190, 'Calculation of integral '); end; setfillstyle (1,12); setcolor (0); end;end;procedure winwwodn (ea: word);
(Вікно введення числа вузлів інтерполяції)varc: char;f: string;begin helpwin (ea); if (ea mod 2) = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести кількість вузлів'); outtextxy (360,170, 'інтерполяції, від якого') ; outtextxy (360,185, 'буде залежати точність'); outtextxy (360,200, 'обчислення інтеграл і'); outtextxy (360,215, 'кількість зн чений функції.'); outtextxy (360,240, 'УВАГА: Настійно'); outtextxy (360,250 , 'РЕКОМЕНДУЄТЬСЯ Не вводьте'); outtextxy (360,260, 'ЗНАЧЕННЯ N БІЛЬШЕ 12!!'); end else begin outtextxy (360,140, 'In this window you have to'); outtextxy (360,155, 'put into the number.' ); outtextxy (360,170, 'The accuracy of calculation'); outtextxy (360,185, 'and the number of function'); outtextxy (360,200, 'parameters will depend on'); outtextxy (360,215, 'this number.'); outtextxy (360,240, 'WARNING: IT IS HARDLY'); outtextxy (360,250, 'RECOMENDED NOT TO PUT IN'); outtextxy (360,260, 'NUMBER MORE THEN 12!!'); end; setcolor (2); setfillstyle (1 , 14); bar (70,200,340,300); rectangle (75,205,335,295); rectangle (77,207,333,293); if (ea mod 2) = 0 then begin outtextxy (90,227, 'Введіть кількість вузлів (n ):'); outtextxy (80,270,' УВАГА : При великих n можлива '); outtextxy (80,280,' некоректна робота комп'ютера !!'); end else begin outtextxy (80,217, 'Put in number of'); outtextxy (80,227, 'interpolation units:'); outtextxy (80,270 , 'WARNING: if you use big number'); outtextxy (80,280, 'of units, PC wont work properly!'); end; setfillstyle (1,0); bar (190,240,230,255);end;procedure wwodn (ea: word; var n: integer);
(Процедура введення вузлів n)varec, p: integer;k, f: string;x: integer;c: char;begin newsc (ea); winwwodn (ea); repeat repeat winwwodn (ea); gotoxy (25,16); read (k); val (k, p, ec); if ec0 then begin error1 (ea); readln; end; until ec = 0; n: = p; if n> 12 then begin if keypressed then c: = readkey; c: = 'r'; setcolor (15); setfillstyle (1,12); bar (140,210,490,300); rectangle (145,215,485,295); rectangle (147,217,483,293); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Попередження!'); outtextxy (150,237, 'Ви дейcтвітельно хочете використовувати'); outtextxy (150,250, 'велике значення N ???'); end else begin outtextxy (150,227, 'Warning!!
'); Outtextxy (150,237,' Do you realy want to use a big
'); Outtextxy (150,250,' number interpolation units (N )???< br>'); End; sound (600); delay (4000); nosound; setfillstyle (1,2); bar (320,260,350,280); setfillstyle (1,12); bar (250,260,280,280); repeat if keypressed then begin c: = readkey ; if (c = # 80) or (c = # 72) or (c = # 77) or (c = # 75) then x: = x +1; setfillstyle (1,2); if (x mod 2) = 0 then begin bar (250,260,280,280); setfillstyle (1,12); bar (320,260,350,280); end else begin bar (320,260,350,280); setfillstyle (1,12); bar (250,260,280,280); p>
END; p>
end; if (ea mod 2) = 0 then begin outtextxy (255,267, 'ТАК'); outtextxy (325,267, 'НІ'); end else begin outtextxy (255,267, 'YES'); outtextxy (325,267, 'NO'); end; until c = # 13; if abs (x mod 2) = 1 then begin n: = 0; setcolor (15); setfillstyle (1,2); bar (160,200,460,280); rectangle (165,205,455,275); rectangle (167,207,453,273); if (ea mod 2) = 0 then begin outtextxy (180,227, 'Для роботи програми необхідно'); outtextxy (180,237, 'заново ввести N.'); outtextxy (180,247, 'Натисніть ENTER для продовження. '); end else begin outtextxy (180,227,' To continue you have to '); outtextxy (180,237,' again put in N. '); outtextxy (180,247,' Press ENTER to continue. '); end; readln; readln; end; end; until n> 0;end; p>
procedure winwwodab (ea: word);
(Вікно введення прибудов інтегрування)varf: string;begin helpwin (ea); if (ea mod 2) = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести спочатку нижнє'); outtextxy (360,170, 'значення інтеграл і натиснути') ; outtextxy (360,185, 'ENTER, а потім ввести'); outtextxy (360,200, 'верхнє значення інтеграла'); outtextxy (360,215, 'і знову натиснути ENTER.'); end else begin outtextxy (360,140, 'In this window you have to: '); outtextxy (360,155,' firstly, put in lower value '); outtextxy (360,170,' of integral and press ENTER, '); outtextxy (360,185,' then put in higher value '); outtextxy (360,200 , 'of integral and press ENTER'); end; setcolor (2); setfillstyle (1,5); bar (10,210,335,320); rectangle (15,215,330,315); rectangle (17,217,328,313); settextstyle (0,0,0); if ( ea mod 2) = 0 then begin outtextxy (20,230, 'Введіть значення внизу'); outtextxy (20,244, 'інтеграл:'); outtextxy (20,262, 'Введіть верхнє значення'); outtextxy (20,272, 'інтеграл:'); end else begin outtextxy (20,230, 'Put in lower value of'); outtextxy (20,244, 'integral:'); outtextxy (20,262, 'Put in higher value of'); outtextxy (20,272, 'integral:'); end ;end;procedure wwodab (ea: word; var a, b: real);
(Процедура введення прибудов інтегрування)varf: string;k: string;ec: integer;begin newsc (ea); winwwodab (ea); readln; repeat winwwodab (ea); gotoxy (16,16); read (k); val (k, a, ec); if ec0 then error1 (ea); until ec = 0; readln; repeat winwwodab (ea); str (a: 4:2, f); outtextxy (120,244, f); gotoxy (16,18); read (k); val (k, b, ec); if ec0 then error1 (ea); until ec = 0;end;procedure helpwin (ea: word);
(основа вікна допомоги)begin setfillstyle (1,3); bar (350,100,590,380); setcolor (0); rectangle (353,103,587,377); rectangle (355,105,585,375); setcolor (14); if (ea mod 2) = 0 then outtextxy (360,115, 'ВІКНО ДОПОМОГИ' ) else outtextxy (360,115, 'HELP WINDOW');end;procedure error1 (ea: word);begin setcolor (15); setfillstyle (1,12); bar (140,210,490,280); rectangle (145,215,485,275); rectangle (147,217,483,273); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Помилка'); outtextxy ( 150,237, 'вводяться параметр не число!!'); outtextxy (150,250, 'Перевірте значення і заново введіть його.'); end else begin outtextxy (150,227, 'Error!'); outtextxy (150,237, 'The value you entered isn `ta quantity !!'); outtextxy (150,250, 'Check it and put it in again.'); end; sound (600); delay (4000); nosound; readln; readln;end;procedure error (ea: word);
(Процедура помилки)begin setcolor (15); setfillstyle (1,12); bar (140,210,490,260); rectangle (145,215,485,255); rectangle (147,217,483,253); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Помилка'); outtextxy ( 150,237, 'Недолік вводяться параметрів !!'); end else begin outtextxy (150,227,' Error! '); outtextxy (150,237,' Not all parameters are set! '); end; sound (600); delay (4000); nosound; readln;end;procedure newsctext (ea: word);
(Текст для процедури newsc)beginif ea mod 2 = 0 then begin settextstyle (0,0,1); setcolor (15); outtextxy (400,440, 'Мова - російська.'); outtextxy (400,450, 'Версія 1.0 Останнє видання'); outtextxy (400,460, 'ї Всі права захищені.'); end else begin settextstyle (0,0,1); setcolor (15); outtextxy (400,440, 'Language - English.'); outtextxy (400,450, 'Version 1.0 Final release.') ; outtextxy (400,460, 'ї All rights reserved.'); end;end;procedure newsc (ea: word);
(Процедура оновлення екрану)begin cleardevice; setfillstyle (10,8); floodfill (1,1,15); setcolor (0); setfillstyle (1,7); bar (80,10,580,80); rectangle (82,12,578,78); rectangle (85,15,575,75); settextstyle (0,0,2); setcolor (10); if ea mod 2 = 0 then begin settextstyle (0,0,2); outtextxy (90,20, 'Обчислення інтеграл') ; outtextxy (90,50, 'методом Ньютона-Котеса.'); newsctext (ea); end else begin settextstyle (3,0,2); outtextxy (90,20, 'Calculeting of integral'); outtextxy (90, 47, 'using the Newton-Cotes method.'); newsctext (ea); end; settextstyle (0,0,1);end;procedure winwin1;
(Вікно процедури win1)begin setfillstyle (1,7); bar (160,110,460,380); setcolor (0); rectangle (162,113,457,377); rectangle (165,115,455,375);end;procedure win1 (ea: word);
(Вступне вікно)begin settextstyle (0,0,1); setcolor (10); if (ea mod 2) = 0 then begin outtextxy (168,135, 'Міністерство Вищої освіти РФ); outtextxy (168,150,' Московський Державний Інститут '); outtextxy (168,160 , 'Електронної Техніки'); outtextxy (168,170, '(Технічний лніверсітет)'); outtextxy (168,180, 'Лицей № 1557'); outtextxy (168,210, 'КУРСОВА РАБО'А'); outtextxy (168,230, ' «Обчислення інтеграла '); outtextxy (168,245,' метедом Ньютона-Котеса » '); outtextxy (158,270,' Написав: Конопльов А.А. '); outtextxy (158,285,' Керівник: доцент Колдаев В.Д. '); end else begin outtextxy (168,135, 'Department of High Education'); outtextxy (168,150, 'Moscow State Institute of'); outtextxy (168,160, 'Electronic Technics'); outtextxy (168,170, '(Technics University)'); outtextxy (168,180, 'Lyceum № 1557'); outtextxy (168,210, 'COURSE WORK'); outtextxy (168,230, ' «Calculation of integral'); outtextxy (168,245, 'by Newton-Cotes method»'); outtextxy (158,270, 'Author: Konoplev AA '); outtextxy (158,285,' Supervisor: senior lecturer '); outtextxy (158,300,' Koldaev VD '); end;end;procedure win2 (ea: word; var k: word);
(Вікно вибору способу підрахунку)varc: char;x: integer;f: string;begin setcolor (2); setfillstyle (1,5); bar (70,200,340,330); rectangle (75,205,335,325); rectangle (77,207,333,323); settextstyle (0,0,0); setfillstyle (1,15); bar (80,250,330,270); setfillstyle (1,5); bar (80,285,330,305); if ea mod 2 = 0 then begin outtextxy (77,220, 'виберете спосіб завдання значень'); outtextxy (75,230, 'функції.'); outtextxy (70,255, 'По таблиці (в ручну) '); outtextxy (70,295,' За розрахунками (автом т.) '); end else begin outtextxy (77,220,' Choose a method of putting in '); outtextxy (75,230,' the values of function. '); outtextxy (70,255, 'By the table (by hand)'); outtextxy (70,295, 'By calculations (automat.)'); end; helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі необхідно '); outtextxy (360,155,' самостійно вводити '); outtextxy (360,170,' значення функції. '); end else begin outtextxy (360,140,' In this method you have '); outtextxy (360,155,' to put in values of '); outtextxy (360,170,' function by yourself. '); end; x: = 0; repeat if keypressed then begin c: = readkey; if (c = # 80) or (c = # 72) then x: = x +1; setfillstyle (1,15); if (x mod 2) = 0 then begin bar (80,250,330,270); setfillstyle (1,5); bar (80,285,330,305); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі необхідно'); outtextxy (360,155, 'самостійно вводити'); outtextxy (360,170, 'значення функції.'); end else begin outtextxy (360,140, 'In this method you have '); outtextxy (360,155,' to put in values of '); outtextxy (360,170,' function by yourself. '); end; end else begin bar (80,285,330,305); setfillstyle (1,5); bar (80,250,330,270); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі комп'ютер'); outtextxy (360,155, 'сам вичесляет значення'); outtextxy (360,170, 'функції з вводиться функції.'); end else begin outtextxy (360,140, 'In this method PC will'); outtextxy (360,155, 'automaticly count the value'); outtextxy (360,170, 'of function by the function'); outtextxy (360,185, 'you enter'); end; end; setcolor (2); if ea mod 2 = 0 then begin outtextxy (70,255, 'По таблиці (в ручну)'); outtextxy (70,295, 'За розрахунками (автом т.)'); end else begin outtextxy (70,255, 'By the table (by hand)'); outtextxy (70,295, 'By calculations (automat.)'); end; end; until c = # 13;k: = x mod 2;end;procedure wwod1 (ea: word; var y: array of double; var n: integer; var a, b: real);
(Вікно ручного введення функції)vari, p: integer;s, f: string;p1: real;c: char; p>
begin wwodn (ea, n); if n = 0 then wwodn (ea, n); newsc (ea); wwodab (ea, a, b); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'поступово вводити'); outtextxy (360,170, 'значення функції.'); outtextxy (360,185, 'після кожного введення' ); outtextxy (360,200, 'певного значення'); outtextxy (360,215, 'натисніть ENTER.'); end else begin outtextxy (360,140, 'In this window you have'); outtextxy (360,155, 'to gradually enter the') ; outtextxy (360,170, 'values of functions.'); outtextxy (360,185, 'After each enter press'); outtextxy (360,200, 'ENTER key.'); end; setfillstyle (1,9); bar (40,200,330,300); rectangle (45,205,325,295); rectangle (47,207,323,293); if ea mod 2 = 0 then outtextxy (56,227, 'Введіть 0-е значення фінкціі:') else outtextxy (56,227, 'Enter 0-th value of function:'); for i : = 0 to n do begin setfillstyle (1,0); bar (137,250,180,273); gotoxy (19,17); setfillstyle (1,9); read (p1); y [i]: = p1; bar (120,227,134,240) ; str (i +1, s); outtextxy (120,227, s); bar (310,220,320,250); end; p>
end;procedure wwod2 (ea: word; var ea1: word; var n: integer; var a, b: real; varst: string);
(Вікно 2 меню автомат. підрахунку)var i: integer; c, k: char; x: longint; f: string;begin repeat x: =- 600000; if keypressed then c: = readkey; c: = 't'; newsc (ea); setfillstyle (1,15); bar (70,120,342,330); setcolor (12); rectangle (75,125,337,325); rectangle (77,127,335,323); settextstyle (0,0,0); setfillstyle (1,11); bar (80,170,330,190); if ea mod 2 = 0 then begin outtextxy (80,130, 'Меню ввести установки знаходження'); outtextxy (80,140, 'інтеграла'); outtextxy (80,180, 'Ввести кількість вузлів (n)'); outtextxy (80,210, 'Ввести межа інтегрування'); outtextxy (80,240, 'Ввести функцію'); outtextxy (80,270, 'Вважати інтеграл'); outtextxy (80,300, 'Вихід'); end else begin outtextxy (80,130, 'Menu of entering the parameters'); outtextxy (80,140, 'of integral'); outtextxy (80,180, 'Put in the number of units'); outtextxy (80,210, 'Enter the bounds of integral'); outtextxy (80,240, 'Enter function'); outtextxy (80,270, 'Count integral'); outtextxy (80,300, 'Exit'); end; helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть Enter для'); outtextxy (360,155, 'введення кількості вузлів'); end else begin outtextxy (360,140, 'Press Enter to put'); outtextxy (360,155, 'in the number of units '); end; repeat if keypressed then begin c: = readkey; case c of p>
# 80: x: = x-1; p>
# 72: x: = x +1; end; setfillstyle (1,11); case (abs (x) mod 5) of p>
0: begin bar (80,170,330,190); setfillstyle (1,15); bar (80,200,330,220) ; bar (80,290,330,310); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть Enter для'); outtextxy (360,155, 'введення кількості вузлів'); end else begin outtextxy (360,140, 'Press Enter to put '); outtextxy (360,155,' in the number of units. '); end; end; p>
1: begin bar (80,200,330,220); setfillstyle (1,15); bar (80,170,330,190) ; bar (80,230,330,250); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для введення'); outtextxy (360,155, 'прибудов інтегрування.'); end else begin outtextxy (360,140, ' Press ENTER to put in '); outtextxy (360,155,' the bounds of integral. '); end; end; p>
2: begin bar (80,230,330,250); setfillstyle (1,15); bar (80,200,330,220 ); bar (80,260,330,280); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для введення'); outtextxy (360,155, 'функції.'); end else begin outtextxy (360,140, ' Press ENTER to enter '); outtextxy (360,155,' function. '); end; end; p>
3: begin bar (80,260,330,280); setfillstyle (1,15); bar (80,230,330,250); bar ( 80,290,330,310); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для початку'); outtextxy (360,155, 'підрахунку самого інтеграла.'); end else begin outtextxy (360,140, 'Press ENTER to begin '); outtextxy (360,155,' integral calculations. '); end; end; p>
4: begin bar (80,290,330,310); setfillstyle (1,15); bar (80,260,330,280); bar (80,170,330,190 ); helpwin (ea); end; end; setcolor (12); if ea mod 2 = 0 then begin outtextxy (80,130, 'Меню ввести установки знаходження'); outtextxy (80,140, 'інтеграла'); outtextxy (80,180, 'Ввести кількість вузлів (n)'); outtextxy ( 80,210, 'Ввести межа інтегрування'); outtextxy (80,240, 'Ввести функцію'); outtextxy (80,270, 'Вважати інтеграл'); outtextxy (80,300, 'Вихід'); end else begin outtextxy (80,130, 'Menu of entering the parameters '); outtextxy (80,140,' of integral '); outtextxy (80,180,' Put in the number of units '); outtextxy (80,210,' Enter the bounds of integral '); outtextxy (80,240,' Enter function ') ; outtextxy (80,270, 'Count integral'); outtextxy (80,300, 'Exit'); end; end; until c = # 13; c: = 't'; case (abs (x) mod 5) of p >
0: begin wwodn (ea, n); end; p>
1: wwodab (ea, a, b); p>
2: begin helpwin (ea); setcolor (15); setfillstyle (1,9); bar (70,200,340,300); rectangle (75,205,335,295); rectangle (77,207,333,293); if ea mod 2 = 0 then begin outtextxy (86,227, 'Введіть функцію f (x ):'); setcolor (14); outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести саму функцію.'); outtextxy (360,200, 'Примітка: 1.данная програма'); outtextxy (360,215, 'розпізнає тільки' ); outtextxy (360,230, 'елементарні функції.'); outtextxy (360,245, '(x, cos (x) та ін)'); outtextxy (360,260, '2. При неправильному введенні '); outtextxy (360,275,' за замовчуванням f (x) = x; '); outtextxy (360,275, '3. Якщо після натискання ENTER'); outtextxy (360,275, 'нічого не відбулося, то outtextxy (360,275,' занововведіте функцію. '); end else begin outtextxy (86,227, 'Enter function f (x ):'); setcolor (14); outtextxy (360,140,' In this window you have '); outtextxy (360,155,' to enter the function. '); outtextxy (360,200, 'Note: This version of'); outtextxy (360,215, 'programm can indentify only'); outtextxy (360,230, 'simple functions, as'); outtextxy (360,245, 'x, cos (x) and other.'); end; setfillstyle (1,0); bar (86,255,330,275); readln; gotoxy (13,17); read (st); writeln (st); readln; end; p>
3: if (n0) and (ab) and (st'') and ((abs (x) mod 5) = 3);end;procedure win3 (ea: word; n: integer; a, b: real; int: double; f: string; h: array ofdouble; var k: word);
(Остання вікно перегляду результатів)var i: integer; c: char; x: longint; p1, p: string; y: array [0 .. 16] of double;begin funktia (n, a, b, y, 1, f); f :='('+ f +')'+' dx = '; repeat x: =- 600000; newsc (ea); setfillstyle (1,2 ); bar (170,120,490,360); setcolor (14); rectangle (175,125,485,355); rectangle (177,127,483,353); settextstyle (0,0,0); setfillstyle (1,1); bar (180,170,480,190); if ea mod 2 = 0 then begin outtextxy (180,135, Функція распознана.Інтеграл підраховано. '); outtextxy (180,180,' Check значення інтеграла '); outtextxy (180,210,' Check коефіцієнти Ньютона-Котеса '); outtextxy (180,240,' Check значення функції '); outtextxy (180,270, 'Показати графік'); outtextxy (180,300, 'Вважати знову'); outtextxy (180,330, 'Вихід'); end else begin outtextxy (180,135, 'Function Indentified.Integral counted.'); outtextxy (180,180, ' View value of integral '); outtextxy (180,210,' View Newton-Cotes coefficients '); outtextxy (180,240,' Veiw values of function '); outtextxy (180,270,' View graphik '); outtextxy (180,300,' Count again ' ); outtextxy (180,330, 'Exit'); end; repeat if keypressed then begin c: = readkey; case c of p>
# 80: x: = x-1; p>
# 72: x: = x +1; end; setfillstyle (1,1); case (abs (x) mod 6) of p>
0: begin bar (180,170,480,190); setfillstyle (1,2) ; bar (180,200,480,220); bar (180,320,480,340); end; p>
1: begin bar (180,200,480,220); setfillstyle (1,2); bar (180,170,480,190); bar (180,230,480,250); end; p >
2: begin bar (180,230,480,250); setfillstyle (1,2); bar (180,200,480,220); bar (180,260,480,280); end; p>
3: begin bar (180,260,480,280); setfillstyle (1, 2); bar (180,230,480,250); bar (180,290,480,310); end; p>
4: begin bar (180,290,480,310); setfillstyle (1,2); bar (180,260,480,280); bar (180,320,480,340); end;
5: begin bar (180,320,480,340); setfillstyle (1,2); bar (180,290,480,310); bar (180,170,480,190); end; end; if ea mod 2 = 0 then begin outtextxy (180,135, 'Функція розпізнана . Інтеграл підраховано. '); outtextxy (180,180,' Check значення інтеграла '); outtextxy (180,210,' Check коефіцієнти Ньютона-Котеса '); outtextxy (180,240,' Check значення функції '); outtextxy (180,270,' Показати графік ' ); outtextxy (180,300, 'Вважати знову'); outtextxy (180,330, 'Вихід'); end else begin outtextxy (180,135, 'Function Indentified.Integral counted.'); outtextxy (180,180, 'View value of integral'); outtextxy (180,210, 'View Newton-Cotes coefficients'); outtextxy (180,240, 'Veiw values of function'); outtextxy (180,270, 'View graphik'); outtextxy (180,300, 'Count again'); outtextxy (180,330, ' Exit '); end; p>
end; until c = # 13; c: =' t '; case (abs (x) mod 6) of p>
0: begin setcolor ( 15); setfillstyle (1,12); bar (140,200,490,280); rectangle (145,205,485,275); rectangle (147,207,483,273); settextstyle (2,0,1); setusercharsize (1,1,5,1); outtextxy (170,210, ' S '); settextstyle (2,0,4); str (a: 3:3, p); outtextxy (160,257, p); str (b: 3:3, p); outtextxy (160,212, p); settextstyle (3,0,2); outtextxy (180,224, f); p :=''; str (abs (int): 7:3, p); outtextxy (190 + length (f) * 12,224, p); readln ; end; p>
1: begin newsc (ea); setfillstyle (1,2); bar (170,120,490,180 + n * 15); setcolor (14); rectangle (175,125,485,175 + n * 15); rectangle ( 177,127,483,173 + n * 15); if ea mod 2 = 0 then begin outtextxy (180,130, 'Коефіцієнти Ньютона-Котеса:'); outtextxy (180,140 + (n +1) * 15, 'Натисніть ENTER для продовження'); end else begin outtextxy (180,130, 'Newton-Cotes coefficients:'); outtextxy (180,140 + (n +1) * 15, 'Press ENTER to continue'); end; hkoef (n, h); for i: = 0 to n do begin str (i, p); str (h [i]: 2:4, p1); p: = 'H' + p + '=' + p1; outtextxy (180,140 + i * 15, p); end; readln; end; p>
2: begin newsc (ea); setfillstyle (1,2); bar (170,120,490,180 + n * 15); setcolor (14); rectangle (175,125,485,175 + n * 15); rectangle (177,127,483,173 + n * 15); if ea mod 2 = 0 then begin outtextxy (180,130, 'Значення функції:'); outtextxy (180,140 + (n +1) * 15, 'Натисніть ENTER для продовження'); end else begin outtextxy (180,130, 'Values of function:'); outtextxy (180,140 + (n +1) * 15, 'Press ENTER to continue'); end; for i: = 0 to n do begin str (i, p); str (y [i]: 2:4, p1); p: = 'Y' + p + '=' + p1; p1 :=''; outtextxy (180,140 + i * 15, p); str ((a + i * (ba)/n): 2:4, p1); str (i, p); if ea mod 2 = 0 then p: = ', У' + 'X' + p + '=' + p1 else p : = ', When' + 'X' + p + '=' + p1; outtextxy (285,140 + i * 15, p); end; p>
readln; end; p>
3 : graphik (ea, a, b, f); p>
5: begin closegraph; halt; end;end;until (abs (x) mod 6) = 4; k: = abs (x) mod 6;end;end. p>
========================================= ======= p>
======== МОДУЛЬ GRAPHIC ======== p>
=========== =====================================unit graphic;interfaceusesk_unit, crt, graph;procedure hwg (ea: word);procedure graphik (ea: word; a, b: real; f1: string);implementationprocedure hwg (ea: word);
(Процедура вікна допомоги при графіку)varf: string;begin settextstyle (0,0,0); setfillstyle (1,3); bar (150,100,390,380); setcolor (0); rectangle (153,103,387,377); rectangle (155,105,385,375); setcolor (14); if ea mod 2 = 0 then begin outtextxy (160,115, 'ВІКНО ДОПОМОГИ'); outtextxy (160,140, 'Для роботи з графіком'); outtextxy (160,155, 'використовуйте кнопки:'); outtextxy (160,180, 'PAGE UP-початковий'); outtextxy (160,195, ' вигляд графіка; '); outtextxy (160,210,' HOME-початковий масштаб; '); outtextxy (160,225,' INSERT-включіть/виключеть '); outtextxy (160,240,' заливку області; '); outtextxy (160,255,' DELETE - увімкнути/виключеть '); outtextxy (160,270,' сітку; '); outtextxy (160,285,' END-показать/убрать цифри '); outtextxy (160,300,' F1-Допомога; '); outtextxy (160,315,' Стрілки ВГОРУ/ВНИЗ-'); outtextxy (160,330,' збільшення/зменшення '); outtextxy (160,345,' масштаб. '); outtextxy (160,360,' Для возрата натисніть ENTER. '); end else begin outtextxy (160,115,' HELP WINDOW ' ); outtextxy (160,140, 'For the work with graphic'); outtextxy (160,155, 'use this keys:'); outtextxy (160,180, 'PAGE UP-Primery form of'); outtextxy (160,195, 'graphik;') ; outtextxy (160,210, 'HOME-Primery scale;'); outtextxy (160,225, 'INSERT-Turn on/off inking'); outtextxy (160,240, 'the field;'); outtextxy (160,255, 'DELETE-Turn on/off the '); outtextxy (160,270,' net; '); outtextxy (160,285,' END-View/delete the figures '); outtextxy (160,300,' F1-Help; '); outtextxy (160,315,' Arrows UP/DOWN-Increase/'); outtextxy (160,330,' lower the scale; '); outtextxy (160,360,' Press ENTER to continue. '); end; readln; setcolor (15);end;procedure graphik (ea: word; a, b: real; f1: string);
(процедура побудови графіків)varf, f2: string;d: char;i, v, r: integer;x1, x2, n, p, x: integer;c, k, k1: longint;y: array [0 .. 1] of double;begin x1: =- 240; x2: = 240; c: = 24; setcolor (15); n: = 0; v: = 0; r: = 0; repeat cleardevice; settextstyle (0,0,0); if ea mod 2 = 0 then begin outtextxy (10,1, 'Натисніть F1 для допомоги'); str (c/24: 2:2, f); f: = 'Масштаб' + f + ': 1'; end else begin outtextxy (10,1, 'Press F1 for help'); str (c/24: 2:2, f); f: = 'Scale' + f + ': 1'; end; outtextxy (200,1, f) ; settextstyle (3,0,1); outtextxy (307,10, 'y'); outtextxy (574,235, 'x'); outtextxy (310,240, '0 '); setlinestyle (1,7,100); line (70,240,580,240) ; line (320,20,320,460); line (320,20,315,25); line (321,20,326,25); line (580,239,575,244); line (580,240,575,235); line (70,239,580,239); line (321,20,321,460); for i : =- 9 to 10 do begin if ((320 + i * 24) 71) then line (320 + i * 24,240,320 + i * 24,242); if ((240 + i * 24) 19) then line (320,240 + i * 24,322,240 + i * 24); end; setcolor (15); for x: = -240 + round ((240 + x1)/10) to 240 + round ((240 + x1)/10) do begin funktia (1 , x-1, x, y, c, f1); k: = round (240 - (y [0]) * c); k1: = round (240 - (y [1]) * c); if ( (k0) or (k10)) then line (319-round ((240 + x1)/10) + x, k ,320-round ((240 + x1)/10) + x, k1); end; if ( v mod 2) = 0 then begin funktia (1, a, b, y, 1, f1); k: = round (240 - (y [0]) * c); k1: = round (240 - (y [ 1]) * c); line (320-round ((240 + x1)/10) + round (a * c), k, 320 --round ((240 + x1)/10) + round (a * c), 240); line (320-round ((240 + x1)/10) + round (b * c), k1, 320 --round ((240 + x1)/10) + round (b * c), 240); if 320-round ((240 + x1)/10) + a * c560 then begin funktia (1, (-240-round ( (240 + x1)/10))/c, (240 --round ((240 + x1)/10))/c, y, 1, f1); k1: = round (240 - (y [1]) * c); line (560, k1, 560,240); end; for x: = -240 to 240 do begin funktia (1, x-1, x, y, c, f1); k1: = round (240 - (y [1]) * c); if ((x/c) > a) and ((x/c) 2) then begin if k17 then setfillstyle (6,3) else setfillstyle (1,3); floodfill (320-round ((240 + x1)/10) + x, k1, 15); end; end; end; end; str (x1, f2); outtextxy (1,450, f2); if (n mod 2) = 0 then for i: =- 9 to 10 do begin settextstyle (2,0, 2); setcolor (14); if ((320 + i * 24) 71) and (i0) then begin str ((i * 24 + round ((240 + x1)/10))/c: 2:2, f); p: = 247; outtextxy (310 + i * 24, p, f); str (-i * 24/c: 2:2, f); outtextxy (330,240 + i * 24, f); end; end; for i: =- 9 to 10 do begin setcolor (15); if ((r mod 2) = 1) and (i0) then begin if ((320 + i * 24) 71) then line (320 + i * 24,20,320 + i * 24,460); if ((240 + i * 24) 19) then line (80,240 + i * 24,560,240 + i * 24); end; end; setcolor (15); d: = readkey; case d of p>
# 75: begin x1: = x1-30; x2: = x2-30; end; p>
# 77: begin x1: = x1 +30; x2: = x2 +30; end; p>
# 80: if c> 1 then c: = c-1; p>
# 72: c: = c +1; p> < p> # 71: c: = 24; p>
# 79: n: = n +1; p>
# 83: r: = r +1; p>
# 82: v: = v +1; p>
# 73: begin c: = 24; n: = 0; r: = 0; v: = 0; x1: =- 240; x2: = 240; end; p>
# 59: hwg (ea); end; p>
until d = # 13;end;end. p>
========================================= ======= p>
========== МОДУЛЬ UNIT ========== p>
======= =========================================< br>($ N +)
Unit k_unit;
(Модуль знаходження інтеграл від многочлена q (q-1) .. (q-i +1) (qi-1) .. (qn),)
(де n-точність інтеграла, i-номер коофіціента. )interfaceprocedure rasposn (f: string; x: real; var ec: word; var t: real);procedure hkoef (n: integer; var h: array of double);procedure funktia (n: integer; a, b: real; var y: array ofdouble; c: real; f: string);procedure koef (w: array of double; n: integer; var e: array of double);procedure mnogochlen (n, i: integer; var c: array of double);function facktorial (n: integer): double;function integral (w: array of double; n: integer): double;function mainint (n: integer; a, b: real; y: array of double): double;implementationprocedure rasposn (f: string; x: real; var ec: word; var t: real);
(Процедура розпізнання функції)vark: word;begin k: = pos ( 'x', f); if k0 then begin (Розпізнавання функції) ec: = 1; (Код помилки) t: = x; k: = pos ( 'abs (x)', f); if k0 then t: = abs (x); k: = pos ( 'sin (x)', f); if k0 then t: = sin (x); k: = pos ( 'cos (x)', f ); if k0 then t: = cos (x); k: = pos ( 'arctg (x)', f); if k0 then t: = arctan (x); k: = pos ( 'sqr (x)' , f); if k0 then t: = x * x; k: = pos ( 'exp (x)', f); if k0 then t: = exp (x); k: = pos ( 'cos (x) * x ', f); if k0 then t: = cos (x) * x; k: = pos (' ln (x) ', f); if k0 then begin if x> 0 then t: = ln (x ) else t: = 0; end; k: = pos ( 'sqrt (x)', f); if k0 then if x> = 0 then t: = sqrt (x) else t: = 0; k: = pos ( 'arcctg (x)', f); if k0 then t: = pi/2-arctan (x); k: = pos ( 'sin (x)/x', f); if k0 then if x0 then t : = sin (x)/x; end else ec: = 0;end;procedure funktia (n: integer; a, b: real; var y: array ofdouble; c: real; f: string);
(Процедур підрахунок Y-ков і розпізнавання функції)vart, h, x: real;k, i: integer;es: word;begin h: = (ba)/n; for i: = 0 to n do begin x: = (a + h * i)/c; rasposn (f, x, es, t); y [i]: = t ; end;end;procedure koef (w: array of double; n: integer; var e: array of double);
(Зміна коофіціентов для інтеграла)vart: integer;begin for t: = 1 to n do e [t]: = w [t]/(n-t +2);end;procedure mnogochlen (n, i: integer; var c: array of double);
(процедура знаходження коофіціентов при Q ^ n (q в ступені n))vark, j: integer;d: array [1 .. 100] of double;begin d [1]: = 1; for j: = 1 to n do begin (Обчислення коефіцієнтів при розкритті q * (q-1) * (q-2 )*..*( qn)) d [j +1] : = d [j] * j * (-1); if j> 1 then for k: = j downto 2 do d [k]: = d [k] + d [k-1] * j * (-1 ); end; c [1]: = d [1]; (Ділення многочлена на (qi) за схемою Горнера) for j: = 1 to n +1 do c [j]: = i * c [j-1] + d [j]; koef (c, n, c); (Зміна коефіцієнтів при інтегруванні)end;function facktorial (n: integer): double;
(функція знаходження факторіалу)vart: integer;s: double;begin s: = 1; if n = 0 then s: = 1 else for t: = 1 to n do s: = s * t; facktorial: = s;end;function integral (w: array of double; n: integer): double;
(функція підрахунку самого інтеграла)vart, p: integer;s, c: double;begin s: = 0; p: = n; for t: = 0 to p +1 do s: = s + w [t] * exp ((p-t 2) * ln (p)); (Підрахунок інтеграла ) integral: = s;end;procedure hkoef (n: integer; var h: array of double);
(Процедура підрахунку коеф. Ньютона-Котеса)varp, j, d, c, i: integer;kq: array [0 .. 20] of double;s: array [0 .. 20] of double;begin p: = n; if (p mod 2) = 1 then (Обчислення половини від усіх обчисленькоефіцієнтів) d: = round ((p-1) * 0.5) else d: = round (0.5 * p); for i: = 0 to n do begin mnogochlen (p, i, kq); s [i]: = integral (kq, p); (Формування масиву з інтегралів) end; for i: = 0 to d do begin if ((pi) mod 2) = 0 then c: = 1 else c: = (-1); h [ i]: = (c * s [i])/(facktorial (i) * facktorial (pi) * p); h [pi]: = h [i]; end;end;function mainint (n: integer; a, b: real; y: array of double): double;
(функція підрахунку основного інтеграла)varsum: 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 * (ba);end;end. p>
========================================= ======= p>
======= ОСНОВНА ПРОГРАМА ======= p>
============= =================================== p>
($ N +)program Newton_Cotes_metod; (Програма знаходження визначеного інтеграла)uses (методом Ньютона-Котеса)k_unit, k_graph, graph, crt;constt = 15;varc: 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); p>
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 k4; closegraph;end. p>
p>
p>
p>
p>
p>
p>
p>
Розглянемо результати тестових випробувань для функцій sin (x) наінтервалі [-5; 3] і exp (x) на інтервалі [2; 8] p>
| | 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 | p>
Видно, що при збільшенні кількості вузлів інтерполяції точність зростає,проте при великих n (n> 15) спостерігався зворотний ефект.
Рекомендований діапозон n: від 7 до 13. P>
1) Інтерфейс програми написаний 2 мовами: українською та англійською. Перехід з однієї мови на іншу здійснюється в початковому вікні шляхом натиснення клавіши F2. Змінити мову можна тільки в цій частині програми.
2) При введенні значень функції вручну необхідно вводити тільки цифри і після кожного введення натискати клавішу ENTER.
3) При випробуванні програми під різні операційні системи (Dos, Windows 98 - p>
2k, NT, з під Паскаля) відбувався незрозумілий баг з невірним виводом на екран значень коефіцієнтів Ньютона-Котеса, хоча інтеграл вважався вірно. Для нормального перебування їх бажано запускати програму через p>
Dos.
4) При введенні параметрів до "Меню завдання параметрів знаходження інтеграла" бажано їх вводити поступово зверху вниз, тобто спочатку ввести кількість вузлів інтерполяції, потім межі інтегрування, а вже потім вводити саму функцію.
5) Дана версія програми не здатна розпізнавати всі функції. Вона може розпізнати тільки стандартні функції Турбо Паскаля і ще кілька дотполнітельних: sin (x)/x, cos (x) * x, arcctg (x). Для роботи зі специфічними функціями необхідно в модулі K-unit у процедурі RASPOSN в кінці, перед end else, додати: k: = pos ( 'Формула f (x)', f); if k0 then t: = 'Формула f (x ) ';де 'Формула f (x)' - бажана формула для розпізнання.
6) Всі допомоги по вводу і роботі з пограммой виводиться у вікні допомоги. P>
Для знаходження інтеграла існує багато методів, проте, метод
Ньютона-Котеса один з найшвидших: достатньо знати значеннякоефіцієнтів для n = 4, щоб з точністю до сотих миттєво порахуватиінтеграл. Швидкість і простота-головні частини цього методу. P>
В.І. Гризлов «Турбо Паскаль 7.0" Москва: ДМК 2000р.
Даніліна «Чисельні методи" Москва: Вища школа 1978р. P>
------------------ -----< br> p>
p>
p>