|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Дослідження методів чисельного інтегруванняДослідження методів чисельного інтегруванняМіністерство освіти і науки України Вінницький національний технічний університетІнститут автоматики, електроніки та комп'ютернихсистем управлінняФакультет АКСУКафедра АІВТКурсова роботаз дисципліни«Обчислювальні методи та застосування ЕОМ»Дослідження методів чисельного інтегрування2006Анотація В даній курсовій роботі розроблена програма для обчислення визначеного інтегралу методом Чебишева третього четвертого та п'ятого порядків. Програма дозволяє отримати розв'язання інтегралу зазначеним методом, оцінити похибки та порівнювати їх з точним обчисленнями отриманими в математичному пакеті Mathcad 2001 Professional. 1. Теоретичні відомості У курсовій роботі проведено дослідження методів чисельного інтегрування. Адже, у задачах, пов'язаних з аналізом, ідентифікацією, оцінкою якості, моделюванням різноманітних пристроїв автоматики, керування, інформаційно-вимірювальної техніки, радіоелектроніки, виникає необхідність обчислення визначених інтегралів. В основу чисельного інтегрування покладено наближене обчислення площини під кривою, яка описується підінтегральною функцією інтеграла: Загальний підхід до розв'язування цієї задачі такий: визначений інтеграл I являє собою площину, обмежену кривою f(х), віссю Х та прямими Х = a, Х =b, відрізок від a до b розбивають на множину менших відрізків, знаходять наближено площу кожної площини Si, яку отримують за таким розбиванням, значення інтеграла І знаходять як суму площ площин Sі, тобто I = Si. При цьому використовують два способи розбивання початкового відрізка на менші 1.Розбивання відрізка проводиться раніше, до того ж завжди відрізок вибирають рівним (метод прямокутників, трапецій, Сімпсона). 2.Місцезнаходження та довжина відрізків визначаються аналізом, до того ж спочатку ставиться за мету досягти найбільшої точності з заданим числом відрізків, а потім відповідно з цим визначають їхні межі (методи Гаусса, Ньютона - Котеса, Чебишева) [1]. 1.1 Метод прямокутників Найпростішим методом наближеного обчислення інтеграла є метод прямокутників, геометрична інтерпретація якого зводиться до знаходження визначеного інтеграла як суми площ N прямокутників (з висотою f(x) та основою h=xi=xi+1-xi), отриманих розділень відрізка[a,b] на N рівних частин, до того ж якщо розділити на прямокутники зліва на право, то отримаємо формулу лівих прямокутників: In=f(x)dxSi=h[f(x0)+f(x1)+...+f(xn-1)]=f(xi);(1.1) якщо ж розділити на N прямокутників справа на ліво, то отримаємо формулу правих прямокутників: Iпр=f(x)dxh[f(xn)+...+f(x1)]=f(xi)(1.2) 1.2 Метод трапецій Суть методу трапеції, полягає в тому, що інтеграл обчислюється по-іншому, відрізок інтегрування поділяється на N рівних відрізків, всередині яких підінтегральна крива f(x) замінюється кусково- лінійною функцією (x), отриманою стягуванням ординат N відрізків хордами. Обчислення визначеного інтеграла зводиться до знаходження сум площ Si прямокутних трапецій N. Площа кожної такої трапеції визначається як: Si=h(f(xi)+f(xi+1)).(1.3) Отже, формула трапеції: I=Si=h(f(x0)+f(x1)+f(x2)+...+f(xn-1)+f(xN)= =[(f(x0)+f(xn))+f(xi)].(1.4) Графічна модель Похибка обчислення інтеграла за формулою трапецій оцінюється як (1.5) Де М2 -максимальне значення другої похідної. f(x) при ,h-крок обчислень. 1.3 Метод Сімпсона (метод парабол або метод криволінійних трапецій) Цей метод також використано у курсовій роботі, близький до методу трапецій у тій частині, що інтегрування проводиться шляхом поділу відрізка інтегрування [а, b] на множину відрізків (N пар відрізків). Однак, з метою збільшення точності наближеного інтегрування на кожному відрізку [Xi, Xi+2] підінтегральної функції f(x) замінюють квадратичною параболою (x), обчислення визначеного інтеграла зводиться до обчислення суми N криволінійних трапецій Si: I= f(x)dxSi [1]. Графічна модель. Площа кожної такої трапеції визначається за формулою Сімпсона: Si= [f(xi)+4f(xi+1)+f(xi+2)], (1.6), тобто (y0+4y1+y2), (y2+4y3+y4), (y4+4y5+y6), (1.7) . . . . . . . . . . . . . . . . . . . . . . . (y2n-2+4y2n-1+y2n), Тоді чисельне значення визначеного інтеграла на відрізку [a,b] дорівнюватиме сумі інтегралів, тобто [y0+y2n+4(y1+...+y2n-1)+2(y2+...+y2n-2)], або [y0+y2n+4y2i-1+2y2i],(1.8) де h =(b-a)/2N. Похибка обчислення інтеграла за формулою Сімпсона оцінюється як де М4 -максимальне значення четвертої похідної. f(x) при , h-крок обчислень. 1.4 Метод Ньютона-Котеса Цей метод засновано на апроксимації однієї із сторін криволінійної трапеції, яка отримується поділом відрізка [a,b] на N рівних частин, многочленами вищих порядків, також як у методі трапецій використовується лінійна апроксимація (заміна однієї із сторін трапеції прямою лінією), а в методі Сімпсона - апроксимація параболою. Основна формула методу: yiHi,(1.9) де Hi - коефіцієнти Ньютона - Котеса. Ці коефіцієнти не залежать від вигляду f(x), а є функцією тільки N (кількість вузлів інтерполяцїї). Таким чином, коефіцієнти Ньютона - Котеса можна обчислити раніше для різного числа вузлів інтерполяції . Легко можна показати, що методи трапецій та Сімпсона є частинними випадками методу Ньютона - Котеса. 1.5 Метод Чебишева Метод Чебишева використано в курсовій грунтується на обчисленні інтеграла за значеннями функції yi =f(xi),(i=1,2,...,N) у зафіксованих вузлах інтерполяції x1,x2,...,xN (де h=const). Коефіцієнти Ньютона -Котеса Нi (i=1,N) не залежать від значень функції у вузлах інтерполяції. П.Л.Чебишев запропонував для обчислення визначених інтегралів використати формулу: cif(xi),(1.10) в якій квадратурні коефіцієнти сi (i = 1,2, ...,N) зафіксовані, а абсциси xi (i=1,2,...,N)підлягаютьвизначенню. Таблиця 1.1. Коефіцієнти Ньютона - Котеса
Для простоти обчислень необхідно вибрати С1=...=Сn. Розглядаємо спочатку частинний випадок, коли межі інтегрування дорівнюють -1 та 1. Тоді формула Чебишева набере вигляду: 2Cn[f(x1)+f(x2)+...+f(xn)],(1.11) де квадратурні коефіцієнти Сn та абсциси xi підлягають визначенню. Коефіцієнти та вузли інтерполяції xi визначимо із умови, що ця рівність є точною для випадку, коли f(х) многочлен вигляду: f(x)=a0+a1x+a2x2+...+anxn.(1.12) Підставимо многочлен у ліву частину попередньої формули та про- інтегруємо: (a0+a1x+a2x2+...+anxn)=2(a0+a2+a3+...).(1.13) У праву частину рівності (1. 11) підставимо значення многочлена (1.І2) у вузлах x1,x2,...,xn: f(x1)=a0+a1x1+a2x12+a3x13+...+anx1n, f(x2)=a0+a1x2+a2x22+a3x23+...+anx2n, f(x3)=a0+a1x3+a2x32+a3x33+...+anx3n,(1.14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f(xn)=a0+a1xn+a2xn2+a3xn3+...+anxnn, Тоді рівність (1.ІЗ) набере вигляду: 2(a0+a2+a4+...)=2cn[na0+a1(x1+x2+...+xn)+a2(x12+x22+...+xn2)+ +a3(x13+x23+...+xn3)+...+an(x1n+x2n+...+xnn)].(1.15) Отримана рівність повинна виконуватися за будь-яких значень a0,a1,...,an; таким чином, порівнюючи коефіцієнти аi в правій та лівій частинах (1.І5) знаходимо, що nсn = 1, звідки Cn=.(1.16) і, крім цього, x1+x2+x3+...+xn=0, x12+x22+x32+...+xn2=, x13+x23+x33+...+xn3=0,(1.17) x14+x24+x34+...+xn4=, . . . . . . . . . . . . . . . . . . . x1n+x2n+x3n+...+xnn=[1-(-1)n+1], Підставляючи знайдене для Сn виразу в співвідношені 1.13 отримаємо формулу Чебишева: [f(x1)+f(x2)+...+f(xn)],(1.18) де точки x1,...,хn визначаються із системи рівнянь (1.17). Значення x1,...,хn для різних n обчислюються раніше та зводять в табл. 1.2. Коли межі даного інтеграла відрізняються від -1 та 1, формула Чебишева матиме вигляд: [f(z1)+f(z2)+...+f(zn)],(1.19) де Таблиця 1.2.
Zi=+xi, (i=1,2,...,n),(1.20) а xi мають вкaзані в таблиці значення. Похибка обчислень за методом Чебишева знаходиться за формулою: 2. Розробка та опис логічної частини програмиПрограма складається з двох блоків. Це - інтерфейний модуль, що забезпечує користувача змогою спілкуватися з комп'ютером за допомогою клавіатури, та сама програма, що здійснює всі обчислювальні операції. При запуску спершу ініціюється графіка та створюється меню і ініціюються змінні. Потім іде блок зчитування з клавіатури. Він аналізує введену користувачем інформацію і згідно з нею виконує певні дії. При натисканні на клавіші управління курсором відбувається переміщення по меню. При натисканні на клавішу Enter відбувається аналіз кнопки, яка була обрана на даний момент, і згідно з цим виконання певних дій. Це можуть бути такі операції: 1) обчислення інтегралу методом Чебишева 3-го порядку: виконується алгоритм, який детально пояснено в додатку Б. 2) обчислення інтегралу методом Чебишева 4-го порядку. 3) обчислення інтегралу методом Чебишева 5-го порядку 4) Задається крок обчислення h=0.1; 5) Задається крок обчислення h=0.2; 6) Задається крок обчислення h=0.5; 7) Про автора - довідка про автора програми; 8) Вихід з програми - здійснюється вихід з програмного середовища ТР; Робота даної програми починається з підключення стандартного модуля введення-виведення crt та модуля graph для ініціалізації графіки, оскільки програма виконана в графічному режимі. Далі задаються константи інтегрування. Тип TMenuItems - масив пунктів меню. Далі задаємо підінтегральну функцію. Процедура InitGraphMode - процедура для ініціалізації графіки, VGA - тип графічного драйверу, VGAHi - тип графічного режиму. · DrawCursor(x,y:integer) - процедура для малювання курсору; · HideCursor(x,y:integer) - процедура, що автоматично забирає курсор з екрану; · Function WaitWhileKeypressed(var FKey:boolean):char - функція, що очікує нажатої клавіші, цикл повторюється до тих пір, доки не буде зчитано код нажатої клавіші; · Procedure menu(x,y:integer;…var poin:integer) - дана процедура власне виводить на екран графічне меню та надає змогу користувачеві здійснити вибір пункту меню за допомогою графічного курсору. 3. Функціональне призначення програмиПрограма призначена для обчислення визначеного інтегралу I=, методом Чебишева третього, четвертого та п'ятого порядків, також дає змогу зменшити похибку обчислень за рахунок зменшення кроку інтегрування. Програма має гарний інтерфейс користувача з меню, що керується з клавіатури. Результати обчислень виводяться на екран монітора. Дана програма пристосована для вирішення тільки одного інтегралу, а тому є вузько спеціалізованою, проте можлива зміна підінтегральної функції шляхом корегування програмного коду. Комп'ютер може швидко опрацьовувати дані і виводити результати на екран. 4. Вхідні та вихідні дані Вхідні дані: 1. Інтеграл: I=; 2. Крок обчислень 0.1,0.2,0.5; 3. Порядок інтегрування: третього , четвертого та п'ятого порядку. Вихідні дані: 1. Значення інтегралу, що знаходить программа. 2. Загальна похибка по заданим методам. 3. Порівняння результатів з точним значенням. 5. Результати розрахунків Результатами обчислень є знаходження значення визначеного інтеграла I=, , зазначеними методами, з кроком: h=0.1, h=0.2, h=0.5. При розрахунку інтегралу 3-го порядку програма виведе на екран слідуючі результати: Інтеграл Чебишева 3-го порядку: 2.649061117170 Загальна похибка: 0.0316342854 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.5 Інтеграл Чебишева 3-го порядку: 2,66138784520 Загальна похибка: 0.0193076119 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.2 Інтеграл Чебишева 3-го порядку: 2,67298758310 Загальна похибка: 0.00770787 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.1 При розрахунку інтегралу 4-го порядку програма виведе на екран слідуючі результати: Інтеграл Чебишева 4-го порядку: 2.6680680931 Загальна похибка: 0.01262744 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.5 Інтеграл Чебишева 4-го порядку: 2,6743859370 Загальна похибка: 0.006309519 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.2 Інтеграл Чебишева 4-го порядку: 2,676438956720 Загальна похибка: 0,00385156152 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.1 При розрахунку інтегралу 5-го порядку програма виведе на екран слідуючі результати: Інтеграл Чебишева 5-го порядку: 2,68069554160 Загальна похибка: 0.00000008443 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.5 Інтеграл Чебишева 5-го порядку: 2.68069545713707 Загальна похибка: 0.00000000512 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.2 Інтеграл Чебишева 5-го порядку: 2.68069545714209 Загальна похибка: 0,00000000010 Точне розв'язання (Mathcad 2001): 2.68069545714219 Крок: 0.1 Висновки В даній курсовій роботі було проведене дослідження чисельних методів вирішення визначеного інтегралу виду I=, по методу Чебишева. Алгоритм методу є досить простим. Для його реалізації потрібно мати функцію, межі та крок інтегрування. В курсовій роботі, для перевірки результатів обчислень, я використовував математичний пакет MatchCad 2001. Похибку для даної функції доцільно було б оцінювати, як абсолютне значення різниці між точним значенням та одержаним в програмі. Однак, хоча й виникали певні труднощі з виконанням завдання, але це було безперечно цікаво, і багато чому мене навчили. Література В.Т.Маликов, Р.Н.Кветный. Вычислительные методы и применение ЭВМ. - К.: Вища школа, 1989.- 213 с. В.М. Дубовий, Р.Н.Квєтний Методичні вказівки до лабораторних робіт з програмування та застосування ЕОМ . Навчальне видання. -Вінниця, ВПІ, 1992. В.М. Дубовий, Р.Н.Квєтний. Програмування комп'ютеризованих систем управління та автоматики. - В.: ВДТУ, 1997. - 208с. Р.Н.Кветний Методи комп'ютерних обчислень. Навчальний посібник.- Вінниця: ВДТУ, 2001.-148с. А. І. Марченко, Л. А. Марченко “Программирование в среде Турбо Паскаль 7.0”, Київ “ВЕК+”, 1999 р. Додаток А Лістинг program Kursova; uses crt,graph; const a=0; b=1; c=1.5; d=2; t3:array[1..3] of real=(-0.707107,0,0.707107); t4:array[1..4] of real=(-0.794654,-0.187592,0.187592,0.794654); t5:array[1..5] of real=(-0.832498,-0.374541,0,0.374541,0.832498); Type TMenuItems=array[1..10] of string; TDelta=array[1..300] of real; Var Item:TMenuItems; ResM:TDelta; i,n:integer; h:real; ki:integer; M,x,Ic,I2n,nc,sc1,sc2,I1n,x1,x2:real; s,hs,s1:string; k:Integer; sum,int,si:real; Delta,AllDelta,sum1:real; Function Fact(n:integer):integer; begin if n=0 then Fact:=1 else Fact:=n*Fact(n-1) end; {Ф-я} function f(x1:real):real; begin f:=exp(-d*x1*x1+c) end; procedure InitGraphMode; var gd,gm:integer; begin gd:=VGA; gm:=VGAHi; initgraph(gd,gm,''); end; procedure DrawCursor(x,y:integer); var i,j:integer; begin setcolor(white); setlinestyle(0,0,1); MoveTo(x,y+3);LineTo(x+10+5,y);LineTo(x+5,y-10);LineTo(x+10+10+5,y+3); LineTo(x+5,y+16);LineTo(x+10+5,y+6);LineTo(x,y+3); setfillstyle(1,red); end; {---------------------------------------------------------------------------} Procedure HideCursor(x,y:integer); begin setcolor(lightblue); {insert your background color instead of black} setlinestyle(0,0,1); MoveTo(x,y+3);LineTo(x+10+5,y);LineTo(x+5,y-10);LineTo(x+10+10+5,y+3); LineTo(x+5,y+16);LineTo(x+10+5,y+6);LineTo(x,y+3); setfillstyle(1,red); end; Function WaitWhileKeypressed(var FKey:boolean):char; var result:char; begin FKey:=false; while keypressed do result:=readkey; {It clears keyboard buffer} repeat until keypressed; result:=readkey; if result=#0 then begin result:=readkey; FKey:=true; end; WaitWhileKeypressed:=result; end; Procedure Menu(x,y:integer;Items:TMenuItems;n:integer;var point:integer); var i:integer; ch:char; FKey:boolean; begin setbkcolor(lightblue); setcolor(yellow); Rectangle(10,10,625,465); setcolor(lightgreen); Rectangle(14,14,621,461); setcolor(lightred); for i:=1 to n do outtextxy(x+50,y+(i-1)*30,Items[i]); repeat for i:=1 to n do if i<>point then HideCursor(x,y+(i-1)*30) else DrawCursor(x,y+(i-1)*30); ch:=WaitWhileKeypressed(FKey); case ch of #72: if point>1 then dec(point); #80: if point<n then inc(point); #27: point:=-1; end; until (ch=#13) or (ch=#27); for i:=1 to n do HideCursor(x,y+(i-1)*30); end; procedure PrintArray(n:integer; m:TDelta); var s0,s1:string; begin setfillstyle(1,lightblue); bar(360,40,620,450); for i:=1 to n do begin str(i,s0); str(m[i]:5:10,s1); if (i mod 25 =0) then begin readln; bar(360,40,620,450); end; outtextxy(430,(i mod 25)*15+40,s0+' '+s1); end; end; {-----------------------------------------------------------------------} begin InitGraphMode; setcolor(blue); h:=0.1; repeat cleardevice; Item[1]:='Метод Чебишева 3-го порядку'; Item[2]:='Метод Чебишева 4-го порядку'; Item[3]:='Метод Чебишева 5-го порядку'; Item[4]:='Крок обчислень=0.1'; Item[5]:='Крок обчислень=0.2'; Item[6]:='Крок обчислень=0.5'; Item[7]:='Про автора'; Item[8]:='Вихид'; i:=1; setcolor(white); Menu(50,30,Item,7,i); case i of 1:begin setbkcolor(lightblue);x:=a; sum:=0; i:=0; while x<=b do begin inc(i); x:=x+h; si:=0; for k:=1 to 3 do si:=si+f(x-h/2+h/2*t3[k]); si:=h/3*si; sum:=sum+si; sum1:=(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))* 48*exp(-2*x*x+1.5)-384*x*x*exp(-2*x*x+1.5)+256*x*x*x*x*exp(-2*x*x+1.5); n:=i+10; end; delta:=((b-a)/(n*fact(3)))*sum1; delta:=Abs(delta); AllDelta:=abs(delta); str(Delta:12:10,s1); Resm[i]:=Delta; setcolor(red); str(Sum:12:18,s); str(AllDelta:12:20,s1); str(h:2:3,hs); setcolor(blue); Outtextxy(100,240,'Интеграл: '+s); Outtextxy(45,260,'Точне значення (Mathcad): 2.68069545714219'); Outtextxy(100,280,'Похибка: '+s1); Outtextxy(100,300,'Крок: '+hs); readln; end; 2: begin setbkcolor(lightblue);x:=a; sum:=0; i:=0; while x<=b do begin inc(i); x:=x+h; si:=0; for k:=1 to 4 do si:=si+f(x-h/2+h/2*t4[k]); si:=h/4*si; sum:=sum+si; sum1:=(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))* (-960*x*exp(-2*x*x+1.5)+2560*x*x*x*exp(-2*x*x+1.5)-1024*x*x*x*x*x*exp(-2*x*x+1.5)); n:=i+10; end; delta:=((b-a)/(n*fact(3)))*sum1; delta:=Abs(delta); AllDelta:=abs(delta); str(Delta:12:10,s1); Resm[i]:=Delta; setcolor(red); str(Sum:12:18,s); str(AllDelta:12:20,s1); str(h:2:3,hs); setcolor(blue); Outtextxy(100,240,'Интеграл: '+s); Outtextxy(45,260,'Точне значення (Mathcad): 2.68069545714219'); Outtextxy(100,280,'Похибка: '+s1); Outtextxy(100,300,'Крок: '+hs); readln; end; 3:begin setbkcolor(lightblue);x:=a; sum:=0; i:=0; while x<=b do begin inc(i); x:=x+h; si:=0; for k:=1 to 5 do si:=si+f(x-h/2+h/2*t5[k]); si:=h/5*si; sum:=sum+si; sum1:=(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))*(x-((a+b)/2))* (x-((a+b)/2))*(-960*exp(-2*x*x+1.5)+11520*x*x*exp(-2*x*x+1.5) -15360*x*x*x*x*exp(-2*x*x+1.5)+4096*x*x*x*x*x*x*exp(-2*x*x+1.5)); n:=i+10; end; delta:=((b-a)/(n*fact(3)))*sum1; delta:=Abs(delta); AllDelta:=abs(delta); str(Delta:12:10,s1); Resm[i]:=Delta; setcolor(red); str(Sum:12:18,s); str(AllDelta:12:20,s1); str(h:2:3,hs); setcolor(blue); Outtextxy(100,240,'Интеграл: '+s); Outtextxy(45,260,'Точне значення (Mathcad): 2.68069545714219'); Outtextxy(100,280,'Похибка: '+s1); Outtextxy(100,300,'Крок: '+hs); readln; end; 4: begin sound(500); setbkcolor(lightred); h:=0.01; Outtextxy(150,200,'Крок h=0.01 '); Outtextxy(170,250,'Натиснить будь-яку клавишу ...'); delay(10000); nosound; repeat until keypressed; end; 5: begin setbkcolor(lightred); h:=0.02; Outtextxy(150,200,'Крок h=0.02 '); Outtextxy(170,250,'Натиснить будь-яку клавишу ...'); repeat until keypressed; end; 6: begin setbkcolor(lightred); h:=0.05; Outtextxy(150,200,'Крок h=0.05 '); Outtextxy(170,250,'Натиснить будь-яку клавишу ...'); repeat until keypressed; end; 7: begin setbkcolor(lightred); Outtextxy(160,200,'Програму виконав ст.гр. 3АВ-02'); Outtextxy(210,220,'Нетяга О.В.'); repeat until keypressed; end; 8: exit; end; until (i=7) or (i=-1); CloseGraph; end. Додаток Б
|
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |