Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Вычисление інтеграла методом Ньютона-Котеса (теорія і яскрава програма на Паскале)

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Unit graphic; interface uses k_unit, crt, graph; procedure hwg (ea:word); procedure graphik (ea:word;a, b: real;f1:string); implementation procedure hwg (ea:word); {Процедура вікна допомоги при графіці} var f: 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… Читати ще >

Вычисление інтеграла методом Ньютона-Котеса (теорія і яскрава програма на Паскале) (реферат, курсова, диплом, контрольна)

Міністерство Вищої Освіти РФ.

Московський Інститут Електронної Техники.

(Технічний Университет).

Ліцей № 1557.

КУРСОВА РАБОТА.

«Обчислення інтеграла методом.

Ньютона-Котеса".

Написав: Коноплев А.А.

Перевірив: доцент Колдаев В.Д.

Москва, 2001 г.

1.

… 3 2. Теоретична часть…4 3. Алгоритм работы…

…8 4. Код программы…

…17. Модуль.

K_graph…17. Модуль.

Graphic…34. Модуль.

K_unit…38. Основна программа…40 5. Тестові испытания…

42 6. Корисні поради роботи з программой…42 7. Вікна введення та виведення програми… 8.

Вывод…

…43 9.

Список литературы

…44.

Математика — один із найбільш древніх наук. Праці багатьох учених увійшли до світової фонд і вони основою сучасних алгебри і геометрії. Наприкінці XVII на в., коли науки йшло все швидше, з’явилися поняття диференціювання, а слідом за й інтеграцію. Багато правила перебування невизначеного інтеграла тоді були відомі, тому вчені шукали інші, обхідні шляху пошуку значень. Першим методом з’явився метод Ньютона — пошук інтеграла через графік функції, тобто. перебування площі під графіком, методом прямокутників, згодом удосконалений в метод трапецій. Пізніше придумали параболічний метод чи метод Сімпсона. Проте частина учених терзав питання: А чи можна об'єднати всі ці методи до одного? Відповідь нею дали одночасно двома математиками Ньютоном і Котесом. Вони вивели загальну формулу, названу їх честь. Проте спосіб був частково забутий. У роботі будуть викладені основні тези теорії, розглянуті різні приклади, наведено таблиці, отримані що за різних огріхах, й, звісно описана роботу і код програми, яка розраховує інтеграл методом Ньютона-Котеса.

Пусть деяка функція f (x) задана в уздах інтерполяції: [pic] (i=1,2,3…, n) на відрізку [а, b] таблицею значений:

|X0=a |X1 |X2 |… |XN=b | |Y0=f (x0) |Y1=f (x1) |Y2=f (x2) |… |YN=f (xN) |.

Требуется знайти значення інтеграла [pic]. Спочатку складемо интерполяционный багаточлен Лагранджа:

[pic].

Для равноотстоящих вузлів интерполяционный багаточлен має вид:

[pic].

де q=(x-x0)/h — крок інтерполяції, замінимо подынтегральную функцію f (x) интерполяционным многочленом Лагранжа:

[pic].

Поменяем знак підсумовування і інтеграл і винесемо за знак інтеграла постійні элементы:

[pic].

Оскільки dp=dx/h, то, замінивши межі інтегрування, имеем:

[pic].

Для равноотстоящих вузлів інтерполяції на відрізку [a, b] величина крок окреслюється h=(a-b)/n. Представивши цей вислів для h в формулу (4) і виносячи (b-a) за знак суми, получим:

[pic].

Поклавши, что.

[pic] де i=0,1,2…, n; Числа Hi називають коефіцієнтами Ньютона-Котеса. Ці коэффиценты не залежить від виду f (x), а є функцією лише з n. Тому і можна визначити заздалегідь. Остаточна формула виглядає так:

[pic] Тепер на кілька примеров.

Пример 1.

Обчислити з допомогою методу Ньютона-Котаса: [pic], при n=7.

Вычисление.

1) Визначимо крок: h=(7−0)/7=1.

2)Найдем значення y:

|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 |.

3) Знаходимо коефіцієнти Ньютона-Котеса: H1=H7=0.0435, H1=H6=0.2040, H2=H5=0.0760, H3=H4=0.1730 Підставимо значення формулу і получим:

При підрахунку з допомогою формули Ньютона-Лейбница получим:

Пример 2. Обчислити з допомогою методу Ньютона-Котеса [pic], узявши n=5; Обчислення: 1) Визначимо крок h=(8−4)/5=0.8 2) Знайдемо значення y:

|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 |.

3) Знаходимо коефіцієнти Ньютона -Котеса: H0=H5=0.65 972 ;H1=H4=0.260 417 ;H2=H3=0.173 611; 4) Подставим значення формулу й одержимо: [pic].

Розглянемо окремі випадки формули Ньйтона-Котеса. Нехай n=1 тоді H0=H1=0.5 й кінцева формула набуде вигляду: [pic] Тим самим у ролі окремого випадку нашої формули ми маємо формулу трапецій. Узявши n=3, ми матимемо [pic]. Приватний випадок формули Ньютона -Котеса — формула Симпсона.

Тепер зробимо аналіз алгоритму і розглянемо основний принцип роботи программы.

Для обчислення інтеграла спочатку перебувають коефіцієнти НьютонаКотеса. Їх перебування ввозяться процедурі hkoef. Основною проблемою обчислення коефіцієнтів є інтеграл від твори множників. На його розрахунку необходимо:

А) вважати коефіцієнти при розкритті скобок при q (процедура mnogoclen) Б) домножить їх у 1/n, де n -ступінь при q (процедура koef) У) підставити замість q значення n (функція integral).

Далі обчислюємо факториалы (функція faktorial) і перемножуємо отримані висловлювання (функція mainint). Для збільшення швидкості роботи вводиться обчислення половини кількості вузлів інтерполяції і наступного підстановкою їх замість неподсчитанных.

Процедура koef (w: массив;n:целый;var e: массив);

[pic].

Процедура hkoef (n:целый;var h: массив);

[pic].

[pic].

Процедура mnogochlen (n, i: целые;var c: массив);

[pic].

[pic].

Процедура funktia (n:целая;a, b: вещест.;var y: массив;c:вещест.;f:строка);

[pic].

Функція facktorial (n:целый):двойной;

[pic].

Функція integral (w:массив;n:целый):двойной;

[pic].

Функція mainint (n:целый;a, b: вещест.;y:массив):двойной;

[pic].

Основна программа.

[pic].

Програма складається з 8 файлів:. K_main.exe — файл завантаження програми. K_unit.tpu — модуль обчислювальних процедур та зняття функцій. K_graph.tpu — модуль графічних процедур. Graphic. tpu — модуль процедур для побудови графіка. Egavga. bgi — файл графічної ініціалізації. Sans. chr, litt. chr — файли шрифтів. Keyrus.com (необов'язково) — файл установки російської. Робота програми з російським интерфайсом бажано запускати їх у режимі DOS.

================================================.

==========МОДУЛЬ GRAPH==========.

================================================ {$N+} unit k_graph; interface uses crt, 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;var st: string); procedure win3(ea:word;n:integer;a, b: real;int:double;f:string;h:array of double;var k: word); implementation procedure proline (ea:word); {Проседура смуги процесу} var i: 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.

0: outtextxy (180,170, «Йде робота.Чекайте. »);

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 (20 000); for i:=1 to 100 do begin if ((i-1) mod 10)=0 then line (200+((i-1) divx 10)*20,200,200+((i-1) divx 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 (і mod 25) =0 then bar (170,180,452,198); if (ea mod 2)=0 then case (і divx 25) of.

0: outtextxy (170,190, «Підготовка »);

1: outtextxy (170,190, «Розрахунок коеффициентов в многочлене »);

2: outtextxy (170,190, «Розрахунок коеффициентов Ньютона-Котеса »);

3: outtextxy (170,190, «Розрахунок інтеграла »); end else case (і divx 25) of.

0: outtextxy (170,190, «Prepearing »);

1: outtextxy (170,190, «Calculation of mnogochlen coeff. »);

2: outtextxy (170,190, «Calculation of Newton-Cotes coeff. »);

3: outtextxy (170,190, «Calculation of integral »); end; setfillstyle (1,12); setcolor (0); end; end; procedure winwwodn (ea:word); {Вікно введення числа вузлів інтерполяції} var c: 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} var ec, 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; з:= «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)??? »); 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);

END;

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;

procedure winwwodab (ea:word); {Вікно введення приделов інтегрування} var f: 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); {Процедура введення приделов інтегрування} var f: 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`t a 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} begin if 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 A.A. »); outtextxy (158,285, «Supervisor:senior lecturer »); outtextxy (158,300, «Koldaev V.D. »); end; end; procedure win2(ea:word;var k: word); {Вікно вибору способу підрахунку } var c: 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); {Вікно ручного введення функції} var i, p: integer; s, f: string; p1: real; c: char;

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;

end; procedure wwod2(ea:word;var ea1: word;var n: integer;var a, b: real;var st: string); {Вікно 2 меню автомат. підрахунку} var i: integer; c, k: char; x: longint; f: string; begin repeat x:=-600 000; if keypressed then c:=readkey; з:= «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 з of.

#80: x:=x-1;

#72: x:=x+1; end; setfillstyle (1,11); case (abs (x) mod 5) of.

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;

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;

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;

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;

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; з:= «t »; case (abs (x) mod 5) of.

0: begin wwodn (ea, n); end;

1: wwodab (ea, a, b);

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;

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 of double;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:=-600 000; 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, «Подивитися значення інтеграла »); outtextxy (180,210, «Подивитися коефіцієнти Ньютона-Котеса »); outtextxy (180,240, «Подивитися значення функції «); 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 з of.

#80: x:=x-1;

#72: x:=x+1; end; setfillstyle (1,1); case (abs (x) mod 6) of.

0: begin bar (180,170,480,190); setfillstyle (1,2); bar (180,200,480,220); bar (180,320,480,340); end;

1: begin bar (180,200,480,220); setfillstyle (1,2); bar (180,170,480,190); bar (180,230,480,250); end;

2: begin bar (180,230,480,250); setfillstyle (1,2); bar (180,200,480,220); bar (180,260,480,280); end;

3: begin bar (180,260,480,280); setfillstyle (1,2); bar (180,230,480,250); bar (180,290,480,310); end;

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, «Подивитися значення інтеграла »); outtextxy (180,210, «Подивитися коефіцієнти Ньютона-Котеса »); outtextxy (180,240, «Подивитися значення функції «); 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;

end; until c=#13; з:= «t »; case (abs (x) mod 6) of.

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, «P.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;

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;

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*(b-a)/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;

readln; end;

3: graphik (ea, a, b, f);

5: begin closegraph; halt; end; end; until (abs (x) mod 6)=4; k:=abs (x) mod 6; end; end.

================================================.

========МОДУЛЬ GRAPHIC========.

================================================ unit graphic; interface uses k_unit, crt, graph; procedure hwg (ea:word); procedure graphik (ea:word;a, b: real;f1:string); implementation procedure hwg (ea:word); {Процедура вікна допомоги при графіці} var f: 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); {процедура побудови графіків} var f, 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.

#75: begin x1:=x1−30; x2:=x2−30; end;

#77: begin x1:=x1+30; x2:=x2+30; end;

#80: if c>1 then c:=c-1;

#72: c:=c+1;

#71: c:=24;

#79: n:=n+1;

#83: r:=r+1;

#82: v:=v+1;

#73: begin c:=24; n:=0;r:=0;v:=0;x1:=-240;x2:=240; end;

#59: hwg (ea); end;

until d=#13; end; end.

================================================.

==========МОДУЛЬ UNIT==========.

================================================ {$N+} Unit k_unit; {Модуль перебування інтеграл від багаточлена q (q-1).(q-i+1)(q-i-1).(q-n),} {де n-точность інтеграла, i-номер коофициента. } interface procedure 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 of double;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; implementation procedure rasposn (f:string;x:real;var ec: word;var t: real); {Процедура распознования функції} var k: 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 of double;c:real;f:string); {Процедур підрахунок Y-ков і розпізнавання функції} var t, h, x:real; k, i: integer; es: word; begin h:=(b-a)/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); {Зміна коофициентов для інтеграла} var t: 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)} var k, j: integer; d: array[1.100] of double; begin d[1]: =1; for j:=1 to n do begin {Обчислення коефіцієнтів при розкритті q*(q-1)*(q-2)*.*(q-n)} 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]; {Розподіл багаточлена на (q-i) за схемою Горнера} 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; {функція перебування факториала } var t: 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; {функція підрахунку самого інтеграла} var t, 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); {Процедура підрахунку коэф. Ньютона-Котеса} var p, 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 ((p-i) mod 2) = 0 then c:=1 else c:=(-1); h[i]: =(c*s[i])/(facktorial (i)*facktorial (p-i)*p); h[p-i]: =h[i]; end; end; function mainint (n:integer;a, b: real;y:array of double):double; {функція підрахунку основного інтеграла} 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 (13 000); bar (178,340,350,365); delay (13 000); 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 k4; closegraph; end.

[pic].

[pic].

[pic].

[pic].

[pic].

[pic].

[pic].

Розглянемо результати тестових випробувань для функцій sin (x) на інтервалі [-5;3] і exp (x) на інтервалі [2;8].

| |n=1 |n=2 |n=3 |n=4 |n=5 |n=7 | |Sin (x) |4,40 017 |3,2 112 |0,87 629 |1,779 012 |1,537 481 |1,246 | |Exp (x) |8965,041 |3581,999 |3271,82 |3002,908 |2990,644 |2974,322 | |N=9 |n=12 | |1,273 561 |1,27 366 | |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 k0 then t:= ‘Формула f (x)'; де ‘Формула f (x)' - бажана формула для распознования. 6) Уся допомога введення й роботи з пограммой виводиться з вікна помощи.

Для перебування інтеграла є багато методів, проте, метод Ньютона-Котеса одне із найбільш швидких: досить знати значення коефіцієнтів для n=4, щоб із точністю до сотих миттєво вважати інтеграл. Швидкість і простота -головні частини цієї метода.

В.І. Гризлов «Турбо Паскаль 7.0» Москва: ДМК 2000 р. Данилина «Чисельні методи» Москва: Вищу школу 1978 г.

———————————- [pic].

[pic].

Показати весь текст
Заповнити форму поточною роботою