Вычисление определенного интеграла методом “Монте-Карло” 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(‘Введите количество случайных значений(число испытаний):’); readln(n); 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 + |2 |5.737 |5.9702 |6.02 |5.99 |
|x | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
|f(x)=x * |3 |9.6775 |8.528 |8.7463 |8.937 |
|x | | | | | |