Дослідження чисельних методів інтегрування
Дослідження чисельних методів інтегрування
Зміст Вступ 1. Теоретичні відомості 2. Алгоритми методів 3. Опис програми 3.1 Вибір інструментальних засобів 3.2 Вхідні та вихідні дані 3.3 Структура програми 3.4 Інструкція користувачеві 4. Аналіз результатів розрахунку Висновки Література Додатки Вступ Сучасний світ неможливо уявити без використання комп'ютерних технологій. Зараз комп'ютер використовується у багатьох сферах людського життя, але на початку свого розвитку ЕОМ створювалась для складних інженерних розрахунків. Зараз обчислення залишаються одним із основних видів застосування ЕОМ. Хоча комп'ютер дуже швидко виконує прості арифметичні дії, без спеціальних програм він не в змозі проводити складні обчислення. Тому постає задача алгоритмізувати поставлене завдання, тобто перевести його в зрозумілу для ЕОМ форму. В багатьох задачах, що пов'язані з аналізом, ідентифікацією, оцінкою якості різних засобів та систем автоматики та управління, виникає необхідність обчислення певних інтегралів. 1. Теоретичні відомості Визначений інтеграл - чисельно рівний площі, обмеженою частиною графіка функції y = f(x), віссю Ох і ординатами f(a) і f(b). Якщо крива перетинає вісь Ох один або декілька разів всередині інтервалу, то інтеграл чисельно рівний алгебраїчній сумі площ, що знаходяться по кожну сторону вісі Ох[6]. Чисельне інтегрування - являє собою стійкий процес і в протиставлення чисельному диференціюванню зменшує дію похибок у початкових даних на кінцевий результат. В основу чисельного інтегрування покладено наближене обчислення площини під кривою, яка описується підінтегральною функцією інтеграла: Визначений інтеграл - являє собою площину, обмежену кривою f(x), віссю Х та прямими x=a; x=b[6]. Класифікація методів рішення поставленої задачі Інженеру часто приходиться обчислювати визначений інтеграл чисельними методами. Це буває у тих випадках, коли або не вдається виразити інтеграл у замкненій формі, або вона настільки складна, що простіше скористатися чисельним інтегруванням. Отже основною задачею є обчислення інтегралу виду: де a і b - нижня та верхня межа інтегрування; f(x) - неперервна функція, відносно якої шукають інтеграл, на відрізку [a,b]. Суть більшості методів обчислення визначених інтегралів заключається в заміні підінтегральної функції f(x) апроксимуючою функцією f(х), для якої можна легко записати первісну в елементарних функціях, тобто де S - наближене значення інтеграла; R - похибка обчислення інтеграла[2]. Методи чисельного інтегрування, що найбільш часто використовуються на практиці можна згрупувати в залежності від способу апроксимації підінтегральної функції. Дамо коротку характеристику груп найбільш розповсюджених методів. Методи Ньютона-Котеса засновані на поліноміальній апроксимації підінтегральної функції. Методи цього класу відрізняються один від одного степенем використовуваного полінома, від якого залежить кількість вузлів, де необхідно обчислити функцію f(x). Алгоритми методів прості і легко піддаються програмній реалізації[1]. Сплайнові методи базуються на апроксимації підінтегральної функції сплайнами, що являють собою кусочний поліном. Методи розрізняють по типу вибраних сплайнів. Такі методи є сенс використовувати в задачах, де алгоритми сплайнової апроксимації застосовуються для обробки даних. В методах найвищої алгебраїчної точності (методи Гаусса-Кристоффеля та інші) використовують не рівновіддалені вузли, розташовані по алгоритму, що забезпечує мінімальну похибку інтегрування для найбільш складних функцій при заданій кількості вузлів. Методи розрізняються способами вибору вузлів і широко використовуються для інтегрування, в тому числі вони можуть бути застосовані і для невласних інтегралів[3]. В методах Монте-Карло вузли вибираються за допомогою датчика випадкових чисел, відповідь носить ймовірний характер. Методи виявляються ефективними при обчисленні великої кратності.
2. Алгоритми методів Для обчислення інтегралу за формулою Сімпсона потрібно спочатку розбити проміжок інтегрування x є (a,b) на рівні інтервали величиною h (крок інтегрування), потім знаходять вузли інтерполяції xi за формулою xi=xi-1+h або xi=x0+ih=a+ih, після чого підставляють отримані значення у формулу (3). В кінці оцінюють похибку. У додатку А приведено алгоритм методу Сімпсона. Для обчислення значення інтегралу методом Чебишева обирають порядок методу n і знаходять значення ti. Після цього розбивають інтервал інтегрування на k проміжків і знаходять значення інтегралу для кожного проміжку (j=1,…,k), після чого сумують отримані значення I=?Ij Значення абсцис xi всередині кожного інтервалу знаходять за формулою xi=(aj+1+aj)/2+ti(aj+1-aj)/2, де aj=a+ih, a0=a, ak=b. Ij знаходять за формулою (1.5). В кінці оцінюють похибку. Алгоритм методу Чебишева приведено у додатку А. 3. Опис програми 3.1 Вибір інструментальних засобів Для написання програми, яка обчислює інтеграли заданими методами, було обрано компілятор Тurbo C++. Даний компілятор був обраний тому, що мова програмування C++ дуже проста і в той же час сам компілятор являється потужною сучасною системою програмування. Найважливішим аргументом для вибору даного компілятора, є тип дійсних чисел extended, який має дуже високу точність (до 19 цифри), якої немає в жодному іншому широковживаному компіляторі. Так як різниця між деякими числами, отриманими в результаті роботи програми, дуже мала і іноді помітна починаючи з дев'ятого знаку, то стає очевидним що потрібна точність саме такого порядку.
3.2 Вхідні та вихідні дані Для розробленої програми вхідними даними є межі інтегрування a та b, а також множники біля змінної інтегрування x, c та d. Всі дані мають тип extended. Вихідними даними являється чисельне значення інтегралу, обчислене методами Трапеції та Чебишева, причому кожним методом інтеграл обчислюється з 3 кроками. Також вихідними даними являються похибки, обчислені для кожного знайденого значення. 3.3 Структура програми Програма, написана для вирішення поставленої задачі, містить кілька підпрограм. Спочатку програма виводить загальні відомості про своє призначення, потім пропонує змінити деякі параметри, після чого виконує обчислення інтегралу згаданими вище методами з кроками 0.1, 0.2 та 0.5. Підінтегральна функція для зручності міститься у функції f. Для обчислення інтегралу методом Сімпсона використовується функція Simpson, що приймає в якості параметрів межі інтегрування та крок обчислення. Для обчислення інтегралу методом Чебишева використовується дві функції: Chebushev та difChebushev. Функція Chebushev викликається безпосередньо з основної програми. Вона ділить межі інтегрування на проміжки, за величиною рівні кроку h, викликає функцію difChebushev для обчислення інтегралу на кожному проміжку, після чого сумує отримані значення, вираховуючи значення інтегралу. Потім основна програма виводить отримані значення на монітор, після чого для кожного значення вираховує похибку і виводить її на монітор. Блок-схему програми наведено в додатку Б.
3.4 Інструкція користувачеві Для запуску програми необхідно запустити на виконання файл program.exe. Розроблена програма інтуїтивно зрозуміла користувачеві. Перша дія, яку потрібно виконати користувачеві - проглянути параметрі та при необхідності в момент, коли програма запропонує змінити деякі параметри, натиснути клавішу `Y' та ввести потрібні значення параметрів. Після цього програма виводить на монітор обчислені значення інтегралу. Користувачеві потрібно лише використати ці значення в своїх цілях. В кінці програма пропонує або вихід, або перезавантаження для повторного розрахунку. Якщо користувачеві потрібно обчислити ще один інтеграл, необхідно натиснути клавішу `R'. 4. Аналіз результатів розрахунку Як видно з похибок програма дає досить точні результати обчислень. Отримані дані підтверджують, що обчислення методом Чебишева дають результат, який за точністю на кілька порядків перевищує точність методу Трапеції. Значення інтегралу, обчисленого за допомогою програми Mathcad, рівне - 2,681. Нижче наведено результат роботи програми. Висновки В ході виконання даної курсової роботи було розглянуто методи чисельного інтегрування, а саме: Чебишева та Трапеції. Було досліджено вказані методи інтегрування та порівняно їх точності, розроблено програму на компіляторі Turbo C++, яка знаходить чисельне значення вказаного інтегралу. Таким чином були набуті практичні навички програмування задач, які ставить курс «Обчислювальні методи та застосування ЕОМ». Література 1. Квєтний Р.Н. Методи Комп'ютерних обчислень. - Навчальний посібник. - Вінниця: ВДТУ, 2001. - с. 92 2. Волков Е. А. Численные методы. - М.: Наука, 1982. - с. 102. 3. Самарский А.А., Гулин А.В. Численные методы. - М: Наука, 1989. - с. 161. 4. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. - Численные методы. - М: Наука, 1987. - с. 83 Додатки Додаток А Алгоритми методів Алгоритм методу Сімпсона Алгоритм методу Чебишева Додаток Б Блок-схема програми
Додаток В Лістинг пргорами {$N+,E+} program integral; uses CRT, graph; const h1=0.1; h2=0.2; h5=0.5; var a, b, c, d, sharp: extended; ch: char; res: array [1..2,1..3] of extended; delta: array [1..2,1..3] of extended; i, j: integer; label lbl1; {------------------------------------------------} function f (x: extended): extended; begin f:=c*x/2-d/(exp(x)+exp(-x)); {sec(d*x)=d/(exp(x)+exp(-x))} end; {------------------------------------------------} function Simpson (a, b, h: extended): extended; var I, x: extended; j: integer; begin I:=0; x:=a+h; j:=0; I:=f(a)+f(b); while (x<b-0.000001) do begin j:=j+1; if ((j mod 2) = 0) then I:=I+2*f(x) else I:=I+4*f(x); x:=x+h end; Simpson:=I*h/3; end; {------------------------------------------------} function difChebushev (a, b: extended): extended; const t4:array [1..4] of extended = (-0.794654, -0.187592, 0.187592, 0.794654); n=4; var x, I: extended; j: integer; begin I:=0; for j:=1 to 4 do begin x:=(a+b)/2+t4[j]*(b-a)/2; I:=I+f(x); end; difChebushev:=I*(b-a)/n; end; {------------------------------------------------} function Chebushev (a, b, h: extended): extended; var I, x: extended; j: integer; begin j:=0; I:=0; x:=a; while (x<b-0.000001) do begin I:=I+difChebushev(x,x+h); x:=x+h; j:=j+1; end; Chebushev:=I end; {------------------------------------------------} BEGIN lbl1: clrscr; c:=2.1; d:=6; a:=0; b:=1; textmode (3); textcolor(15); writeln ('Програма обчислюэ iнтеграл функцii cx/2-sec(dx) в межах вiд a до b двома'); writeln ('методами: Сiмпсона та Чебишева IV порядку'); writeln ('Поточнi значення параметрiв:'); writeln ('a=', a:2:6); writeln ('b=', b:2:6); writeln ('c=', c:2:6); writeln ('d=', d:2:6); writeln ('Ви хочете змiнити параметри a та b? (y - так, iнша клавiша - нi)'); ch:=readkey; if ((ch='y') or (ch='Y')) then begin write ('a='); readln (a); write ('b='); readln (b); end; writeln ('Ви хочете змiнити параметри c та d? (y - так, iнша клавiша - нi)'); ch:=readkey; if ((ch='y') or (ch='Y')) then begin write ('c='); readln (c); write ('d='); readln (d); end; clrscr; writeln ('Пiдiнтегральна функцiя: ', c:2:6, 'x/2-sec(', d:2:6, 'x)'); writeln ('Межi iнтегрування - вiд ', a:2:6, ' do ', b:2:6); writeln ('Iнтеграл обчислюэться методами Сiмпсона та Чебишева IV порядку з 3 кроками: '); writeln (h1:2:6, ', ', h2:2:6, ' та ', h5:2:6); writeln; write ('Виконуються обчислення.'); res[2,1]:=Chebushev(a, b, h1); write ('.........'); res[2,2]:=Chebushev(a, b, h2); write ('.........'); res[2,3]:=Chebushev(a, b, h5); write ('.........'); res[1,1]:=Simpson(a, b, h1); write ('.........'); res[1,2]:=Simpson(a, b, h2); write ('.........'); res[1,3]:=Simpson(a, b, h5); writeln ('.........'); gotoxy (wherex, wherey-1); writeln ('Нижче виведено результати обчислень двома методами з 3 кроками '); writeln; write ('Крок:'); gotoxy (13, wherey); write ('h=', h5:2:6); gotoxy (35, wherey); write ('h=', h2:2:6); gotoxy (57, wherey); writeln ('h=', h1:2:6); writeln ('Метод'); write ('Сiмпсона:'); gotoxy (13, wherey); write ('I=', res[1][3]:5:14); gotoxy (35, wherey); write ('I=', res[1][2]:5:14); gotoxy (57, wherey); writeln ('I=', res[1][1]:5:14); write ('Чебишева:'); gotoxy (13, wherey); write ('I=', res[2][3]:5:14); gotoxy (35, wherey); write ('I=', res[2][2]:5:14); gotoxy (57, wherey); writeln ('I=', res[2][1]:5:14); write ('Обчислення похибки.....'); if (a=0) and (b=1) and (c=2.1) and (d=6) then sharp:=-2.07230756449615 else sharp:=1.1*Chebushev(a, b, 0.0001); for i:=1 to 2 do for j:=1 to 3 do begin delta[i][j]:=abs(sharp-res[i][j]); write('....'); end; writeln; gotoxy (wherex, wherey-1); writeln(' '); writeln ('Нижче виведено похибки обчислень'); writeln; write ('Крок:'); gotoxy (13, wherey); write ('h=', h5:2:6); gotoxy (35, wherey); write ('h=', h2:2:6); gotoxy (57, wherey); writeln ('h=', h1:2:6); writeln ('Метод'); write ('Сiмпсона:'); gotoxy (13, wherey); write ('I=', delta[1][3]:5:14); gotoxy (35, wherey); write ('I=', delta[1][2]:5:14); gotoxy (57, wherey); writeln ('I=', delta[1][1]:5:14); write ('Чебишева:'); gotoxy (13, wherey); write ('I=', delta[2][3]:5:14); gotoxy (35, wherey); write ('I=', delta[2][2]:5:14); gotoxy (57, wherey); writeln ('I=', delta[2][1]:5:14); writeln; writeln ('Для перезавантаження програми натиснiть клавiшу R'); writeln ('Для виходу натиснiть будь-яку клавiшу'); ch:=readkey; if ch='r' then goto lbl1; END.
|