Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут ІКНІ
Кафедра ПЗ
ЗВІТ
до лабораторної роботи № 4
На тему: “ Чисельне інтегрування ”
З дисципліни: “ Чисельні методи в інформатиці ”
Виконав:
ст. гр. КН - 3
Львів – 2008
Мета роботи: навчитись обчислювати інтеграли за формулами трапецій, Сімпсона та Монте-Карло.
Теоретичні відомості
Нехай треба обчислити визначений інтеграл: EMBED Equation.3 . (4.5.1)
Розіб’ємо відрізок [a,b] на N кроків інтегрування рівномірно. Величина кроку буде дорівнювати: h = (b-a)/N .
Значення функції у вузлових точках означимо як EMBED Equation.3
де EMBED Equation.3 .
Наближене (але з будь-якою точністю) значення інтегралу можна отримати за допомогою формули трапецій:
EMBED Equation.3 (4.5.2)
або формули Симпсона:
EMBED Equation.3 . (4.5.3)
Із зменшенням величини кроку h точність обчислення інтеграла збільшується.
Обчислення інтегралів методом Монте-Карло
Нехай x1, x2, ...,xM – множина випадкових величин з відрізка [a,b] таких, що мають рівномірне розподілення. Тоді інтеграл (4.5.1) можна наближено обчислити по формулі:
EMBED Equation.3 (4.5.4)
Точність обчислення інтегралу збільшується із збільшенням M і з покращанням якості випадкової послідовності.
Переваги методу Монте-Карло особливо помітні при обчисленні кратних інтегралів. Нехай потрібно обчислити інтеграл кратності p такого виду:
EMBED Equation.3 . (4.5.5)
Область інтегрування є p-вимірний паралелепіпед:
EMBED Equation.3
Оберемо у ньому N рівномірно розподілених випадкових точок
EMBED Equation.3 .
Наближене значення інтегралу можна отримати за допомогою такої формули:
EMBED Equation.3 . (4.5.6)
Завдання
Обчислити значення інтегралу за формулами трапецій, Сімпсона та Монте-Карло.
EMBED Equation.3
Текст програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
GroupBox1: TGroupBox;
XPManifest1: TXPManifest;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Image1: TImage;
Bevel1: TBevel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
e:real;
n:integer;
const a : integer = 0;
const b : integer = 4;
implementation
{$R *.dfm}
function AbsReal(X : Extended):Extended;
begin
if X>=0 then
Result:=X
else
Result:=-X;
end;
function f(x : real ): real;
begin
result:=(1+2*x)/(sqr(ln(2+sqr(x))));
end;
function IntegralTrapezium(const a : Double;
const b : Double;
const Epsilon : Double):Double;
var
i : Integer;
n : Integer;
h : Double;
s1 : Double;
s2 : Double;
begin
n := 1;
h := b-a;
s2 := h*(F(a)+F(b))/2;
repeat
s1 := s2;
s2 := 0;
i := 1;
repeat
s2 := s2+F(a-h/2+h*i);
i := i+1;
until not (i<=n);
s2 := s1/2+s2*h/2;
n := 2*n;
h := h/2;
until not (AbsReal(s2-s1)>3*Epsilon);
Result := s2;
end;
function IntegralSimpson(const a : Double;
const b : Double;
const Epsilon : Double):Double;
var
i : Integer;
n : Integer;
h : Double;
s : Double;
s1 : Double;
s2 : Double;
s3 : Double;
x : Double;
begin
s2 := 1;
h := b-a;
s := F(a)+F(b);
repeat
s3 := s2;
h := h/2;
s1 := 0;
x := a+h;
repeat
s1 := s1+2*F(x);
x := x+2*h;
until not (x<b);
s := s+s1;
s2 := (s+s1)*h/3;
x := AbsReal(s3-s2)/15;
until not (x>Epsilon);
Result := s2;
end;
function fMonte_Karlo: real;
var
y,x:real;
i,l,h:integer;
begin
n:=100;
randomize();
y:=0;
for i:=1 to n do
begin
l:=Random(b);
h:=Random(100);
x:=l+h/100;
y:=y+f(x);
end;
result:=((b-a)/n)*y;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=FloatToStr(IntegralTrapezium(a,b,StrToFloat(Edit1.Text)));
Edit3.Text:=FloatToStr(IntegralSimpson(a,b,StrToFloat(Edit1.Text)));
Edit4.Text:=FloatToStr(fMonte_Karlo);
end;
end.
Протокол роботи програми
Висновок: під час виконання лабораторної роботи я навчився обчислювати значення інтегралу за формулами трапецій, Сімпсона та Монте-Карло.