Автор работы: Пользователь скрыл имя, 16 Мая 2013 в 19:07, курсовая работа
Чисельне інтегрування – одна з найбільш важливих тем обчислювальної математики.
В роботі ми розглянемо наступні методи чисельного інтегрування:
лівих та правих прямокутників;
трапецій;
Сімпсона;
Для демонстрації роботи методів чисельного інтегрування слід розробити програму, за допомогою якої буде автоматизовано інтегрування фіксованого переліку елементарних функцій.
Вступ ……………………………………………………………………………...3
1.Загальна постановка і аналіз.
1.1 Формули прямокутників і трапеції ………………….…………….4
1.2. Формула Сімпсона …………………………………………………...8
1.3 Параболічне інтерполювання ……………………………………...9
1.4 Дроблення проміжку ………………………………………………..13
1.5 Залишковий член формули прямокутників …………………..15
1.6 Залишковий член формули трапеції ……………………………18
1.7 Залишковий член формули Сімпсона ………………………….20
2.Програма Порівняння методів Сімпсона, прямокутників, трапецій
2.1. Проект програми …………………………………………………….23
2.2. Інструкція користувачу …………………………………….………25
Висновок ……………………………………………………………….………27
Використана література …………………………………………………….28
Як і вище, і користуючись тим, що другий множник підінтегральної функції і тут не змінює знака, знайдемо
Для випадку ділення проміжку на рівних частин
Звернемося, до формули (8). Можна було б, аналогічно тому, як це було зроблено вище, знов скористатись формулою Лагранжа з залишковим членом і покласти:
Проінтегрувавши рівність (15), ми не змогли б спростити інтегральний вираз для додаткового члену за допомогою теореми про середнє, бо вираз в підінтегральній функції вже змінює знак на проміжку . Тому ми зробимо інакше.
Вираз:
яким би не було число , в точках , , приймає одні і тіж значення, що і функція . Легко підібрати число так, щоб і похідна цього виразу при співпадала з похідною . Таким чином, при цьому значенні ми маємо не що інше, як інтерполяційний многчлен Ерміта, який відповідає простим вузлам , і двократному вузлу . Скориставшись формулою Ерміта з залишковим членом – в припущенні існування для функції похідних до четвертого порядку включно – отримаємо:
Тепер проінтегрувавши цю рівність від до ; ми знайдемо, що
так як
Якщо припустити похідну неперервною, то, як і в попередніх випадках, залишковий член формули (8)
користуючись тим, що другий множник в підінтергальному виразі не змінює знака, можна підставити в такому вигляді:
Якщо проміжок розділити на рівних частин, то – для формули Сімпсона (10) – отримаємо залишковий член у вигляді
Головним завданням програми є розв’язування задачі чисельного інтегрування, сформульованої в розділі 1.
Фактично, програма повинна забезпечувати порівняння ефективності та точності різних методів інтегрування.
Результати роботи програми повинні бути представлені в табличному форматі.
Програма також повинна мати інтуїтивно зрозумілий інтерфейс, характерний для сучасних Windows-програм, що буде запорукою ефективного її використання.
Вибір середовища реалізації проекту є однією з основних задач процесу розробки програмних продуктів.
Вибір середовища реалізації має дві складові:
Програма призначена для роботи під управлінням операційної системи Windows XP.
Вибір цієї ОС пов’язаний з тим, що зараз на переважній більшості персональних комп’ютерів використовується саме ця система або системи, споріднені з нею. Тому такий вибір забезпечуватиме можливість роботи з програмою на більшості з робочих станцій.
Програма розроблятиметься за допомогою візуальної системи програмування Delphi7.
Причинами такого вибору є наступні особливості системи Delphi7:
1) розробка програмних продуктів для платформи Win32;
2) візуальна розробка
графічного інтерфейсу
Наступні етапи проектування програми та розробка програмного коду відбуватимуться відповідно до вибраного середовища реалізації.
Визначимо основні функції програми:
Програма призначена для демонстрації застосування методів чисельного інтегрування до інтегрування елементарних функцій. Тобто в програмі реалізовано задачу чисельного інтегрування, поставлену в розділі 1.
Програма дозволяє обчислювати визначені інтеграли за допомогою таких чисельних методів:
1) лівих прямокутників;
2) трапецій;
3) Сімпсона;
У вікні задачі задається умова та виводяться результати обчислень (рис. 1).
Вікно задачі складається з таких частин:
1) межі інтегрування;
2) підінтегральна функція;
4) кількість точок розбиття;
6) значення інтегралу.
В двох полях з групи „Межі інтегрування” вказуються відповідно права та ліва границі інтегрування.
В програмі передбачено фіксований набір підінтегральних функцій. Вибрати її можна із відповідного списку.
Точність інтегрування визначається кількістю точок розбиття відрізка. Крок інтегрування не задається користувачем, а визначається відповідно до кількості точок розбиття.
У такий спосіб очевидно, що при обчисленні певних інтегралів за допомогою квадратурних формул, не дає нам точного значення, а тільки наближене.
Щоб максимально наблизитися до достовірного значення інтеграла потрібно вміти правильно вибрати метод і формулу, по якій буде вестися розрахунок.
Додаток 1:
Результати роботи програми
1) в межах від 0 до 1
n=1000
Метод Сімпсона 3,33333333333333E-7
Метод трапецій 2,15219773265892E-307
Метод прямокутників 2,15219773265892E-307
2) в межах від 0 до 1
n=1000
Метод Сімпсона 0,841416880687773
Метод трапецій 0,841929771178751
Метод прямокутників 0,842159620025817
3) в межах від 0 до 1
n=1000
Метод Сімпсона 0,332001999333334
Метод трапецій 0,332335499
Метод прямокутників 0,331835499
4) в межах від 0 до 1
n=1000
Метод Сімпсона 0,248669498000667
Метод трапецій 0,249003247001001
Метод прямокутників 0,
5) в межах від 0 до
n=1000
Метод Сімпсона 0,498667666666667
Метод трапецій 0,499001
Метод прямокутників 0,498501
Додаток 2:
Текст програми
unit Integral;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Spin, Menus, Grids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit2: TEdit;
Edit3: TEdit;
GroupBox3: TGroupBox;
Edit5: TEdit;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N5: TMenuItem;
Button1: TButton;
N3: TMenuItem;
N4: TMenuItem;
StringGrid1: TStringGrid;
GroupBox2: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
procedure N2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Function F(x:real):real;
end;
var
Form1: TForm1;
var
a,b,h,x,s1,s2,s3:real;
implementation
uses Unit2;
{$R *.dfm}
Function TForm1.F(x:real):real;
begin
If ComboBox1.ItemIndex=0 Then
Begin
F:=sin(x);
End
Else If ComboBox1.ItemIndex=1 Then
Begin
F:=cos(x);
End
Else If ComboBox1.ItemIndex=2 Then
Begin
F:=x*x*x;
End
Else If ComboBox1.ItemIndex=3 Then
Begin
F:=x;
End
Else If ComboBox1.ItemIndex=4 Then
Begin
F:=x*x;
End;
End;
procedure TForm1.N2Click(Sender: TObject);
begin
s1:=0;
s2:=0;
s3:=0;
Edit2.Visible:=True;
Edit3.Visible:=True;
Edit5.Visible:=True;
GroupBox1.Visible:=True;
GroupBox3.Visible:=True;
GroupBox2.Visible:=True;
Button1.Visible:=True;
ComboBox1.Visible:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var i,n,k:integer;
begin
StringGrid1.Visible:=True;
Label1.Visible:=True;
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
n:=StrToInt(Edit5.Text);
s1:=f(a);
s2:=(f(a)+f(b))/2;
s3:=(b-a)/n;
k:=1;
x:=a;
for i:=1 to n-1 do
begin
x:=x+h;
s1:=s1+f(x);
s2:=s2+f(x);
s3:=s3+(3+k)*f(x);
h:=(b-a)/n;
k:=-k;
end;
s1:=s1*h;
s2:=s2*h;
s3:=s3*h/3;
StringGrid1.Cells[0,1]:=
StringGrid1.Cells[1,1]:=
StringGrid1.Cells[2,1]:=
End;
procedure TForm1.N4Click(Sender: TObject);
begin
Close()
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit2.Text:='0';
Edit3.Text:='1';
Edit5.Text:='1000';
StringGrid1.Cells[0,0]:=' Метод Прямокутників';
StringGrid1.Cells[1,0]:=' Метод Трапецій';
StringGrid1.Cells[2,0]:='
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form2.Show;
end;
end.