Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР Численные методы.docx
Скачиваний:
21
Добавлен:
10.05.2015
Размер:
83.07 Кб
Скачать

Вычисление кратных интегралов в пространстве методом Монте-Карло Обычный метод Монте-Карло

Пусть в пространстве задана функция , где , причём,хотя бы один раз, где,– компактное множество,- ограничена и сверху, и снизу. Требуется вычислить интеграл

Так как множество – компакт, то впишем его в n-мерный параллелепипед P с осями, параллельными осям координат. Зададим его двумя вершинами – самой младшей и самой старшей координатами и, причём. Очевидно, что объёмP можно выразить следующим образом:

Доопределим подынтегральную функцию следующим образом:

тогда исходный интеграл перепишем следующим образом:

Рассмотрим n-мерный вектор, имеющий равномерное распределение в параллелепипеде P, , тогда значение подынтегральной функции от случайного вектора будет выражаться как математическое ожидание следующим образом:

случайного вектора p, причём

Разобьём параллелепипед P на векторы классом разбиений ,

Причём установим между номерами разбиений взаимно однозначное соответствие между номерами разбиений в классе разбиений.

Тогда математическое ожидание можно оценить следующим образом:

Заключение

В данной работе рассмотрены методы численного вычисления интегралов с помощью метода Монте-Карло в пространствах и . В пространстве были рассмотрены детерминистический, обычный и геометрический методы. Получены следующие выводы: наиболее хорошая сходимость у детерминистического метода, а наиболее плохая - у геометрического метода. Ввиду слабой сходимости геометрического метода не актуально рассматривать его в пространстве . Также отмечено, что существенным отличием метода Монте-Карло от близких по характеру изучаемых в классической вычислительной математике является необходимость моделирования вероятностных распределений.

Приложения Текст программы «Вычисление интеграла методом Монте-Карло»

#include <math.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include<clocale>

void main()

{

setlocale(LC_CTYPE, "");

srand((unsigned)time(NULL));

printf("Функция: z=(8*x*sin(x)+7*x*y^3*cos(y)^2))/cos(x-y)^(1/2)\n");

float Zmax=0;

for(float x=0;x<=1;x=x+0.01)

{

for(float y=0;y<=1;y=y+0.01)

{

if(Zmax<(float)(8*x*sin(x)+7*x*pow(y,3)*pow(cos(y),2))/pow(cos(x-y),1/2))

{

Zmax=(float) (8*x*sin(x)+7*x*pow(y,3)*pow(cos(y),2))/pow(cos(x-y),1/2);

}

}

}

float SumINTEGR=0;//Сумма интегралов за 10 опытов

for(int i=1;i<=10;i++)

{

float X,Y,Z;// Рандомные точки

int HIT=0;// Число попаданий точек в искомый объем под поверхностью функции

float INTEGR=0;//Значение интеграла

for(float N=1;N<=183065;N++)

{

X=(float)(rand()%101)/100;

Y=(float)(rand()%101)/100;

Z=(float)(rand()%1001)/100;

if(Z<=(8*X*sin(X)+7*X*pow(Y,3)*pow(cos(Y),2))/pow(cos(X-Y),1/2))

{

HIT=HIT+1;

}

}

INTEGR=(float)HIT/183065*10;

SumINTEGR=SumINTEGR+INTEGR;

}

float averINTEGR=SumINTEGR/10;// Среднее значение интеграла в 10 случаях

printf("Значение интеграла - %f\n", averINTEGR);

printf("Z максимальное - %f",Zmax);

getch();

}