Вычисление интегралов методом Монте-Карло
Вычисление определенного интеграла методом “Монте-Карло”
b
Определенный интеграл I = ò f(x)dx по
методу “Монте-Карло”
n
a
по формуле I = (1/n)* å (f(xi))/(g(xi)) ,где n – число
испытаний ;g(x) – плотность
i=1
b
распределения “вспомогательной” случайной величины X, причем
ò g(x)dx = 1 ,
a
В программе g(x) = 1/(b-a) .
Программа
написана на языке TURBO PASCAL 7.0
Program pmk;
Uses crt;
Var k,p,s,g,x,Integral :
real;
n,i,a,b : integer;
BEGIN
randomize;
writeln(‘Введите промежуток интегрирования (a;b):’);
readln(a);
readln(b);
writeln(‘Введите количество случайных значений(число
испытаний):’);
k:=b-a;{Переменной“k”присвоим значение длины промежутка
интегрирования}
writeln(‘k=’,k);
for i:= 1 to n do begin {проведем n
испытаний}
g:=random; {g – переменная вещественного типа,случайная
величина из
промежутка
[0;1]}
x:= a + g*(b-a);{По этой формуле получается произвольная
величина из [a;b] }
s:=s + (1+x); {s:=s +(x*x)}{Вообще можно подставить любую функцию }
delay(10000); {задержка,чтобы произвольные значения не
повторялись}
end;{конец испытаний}
writeln(‘s=’,s);{Сумма функции для n произвольных значений}
Integral:=(1/n)*k*s ;
writeln(‘Интеграл=’,Integral);
readln;
END.
Требуется ввести промежуток интегрирования и
количество испытаний, интегрируемая функция уже задана в программе(но ее можно
поменять).
3 3
ò(x+1)dx = 6 ; ò (x*x)dx = 9;
(По методу Ньютона-Лейбница).
1
Функция
k
|
N= 10
|
N= 100
|
N= 500
|
N= 1000
|
f(x)=1 + x
|
2
|
5.737
|
5.9702
|
6.02
|
5.99
|
f(x)=x * x
|
3
|
9.6775
|
8.528
|
8.7463
|
8.937
|