Курсовая работа: Вычисление интегралов методом Монте-Карло

Курсовая работа: Вычисление интегралов методом Монте-Карло




🛑 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































ФАКУЛЬТЕТ ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ МЕТОДОМ МОНТЕ - КАРЛО
Целью данной работы является создание программного продукта для участия в конкурсе, проводимом группой компаний «Траст» по созданию программных разработок. Для реализации было выбрано следующее технической задание:
Задание 12 Вычисление интегралов методом Монте – Карло.

1) Реализация генератора случайных чисел для метода Монте – Карло.
2) Сравнение равномерного распределения и специально разработанного.
3) Вычисление тестового многомерного интеграла в сложной области.
1) Программный код в виде функции на языке С++ или Fortran .
2) Тестовые примеры в виде программы, вызывающие реализованные функции.
3) Обзор использованной литературы.
Для реализации данного технического задания был выбран язык C++. Код реализован в интегрированной среде разработки приложений Borland C++ Builder Enterprises и математически обоснован соответствующий способ вычисления интеграла.
Датой рождения метода Монте - Карло признано считать 1949 год, когда американские ученые Н. Метрополис и С. Услам опубликовали статью под названием «Метод Монте - Карло», в которой были изложены принципы этого метода. Название метода происходит от названия города Монте – Карло, славившегося своими игорными заведениями, непременным атрибутом которых являлась рулетка – одно из простейших средств получения случайных чисел с хорошим равномерным распределением, на использовании которых основан этот метод.
Метод Монте – Карло это статистический метод. Его используют при вычислении сложных интегралов, решении систем алгебраических уравнений высокого порядка, моделировании поведения элементарных частиц, в теориях передачи информации, при исследовании сложных экономических систем.
Сущность метода состоит в том, что в задачу вводят случайную величину , изменяющуюся по какому то правилу . Случайную величину выбирают таким образом, чтобы искомая в задаче величина стала математическим ожидание от , то есть .
Таким образом, искомая величина определяется лишь теоретически. Чтобы найти ее численно необходимо воспользоваться статистическими методами. То есть необходимо взять выборку случайных чисел объемом . Затем необходимо вычислить выборочное среднее варианта случайной величины по формуле:
Вычисленное выборочное среднее принимают за приближенное значение .
Для получения результата приемлемой точности необходимо большое количество статистических испытаний.
Теория метода Монте – Карло изучает способы выбора случайных величин для решения различных задач, а также способы уменьшения дисперсии случайных величин.
Будем считать, что область интегрирования , и что ограниченное множество в . Следовательно, каждая точка х
множества имеет n
координат: .
Функцию возьмем такую, что она ограничена сверху и снизу на множестве : .
Воспользуемся ограниченностью множества и впишем его в некоторый n
– мерный параллелепипед , следующим образом:
где - минимумы и максимумы, соответственно, - ой координаты всех точек множества : .
Доопределяем подынтегральную функцию таким образом, чтобы она обращалась в ноль в точках параллелепипеда , которые не принадлежат :
Таким образом, уравнение (2) можно записать в виде
Область интегрирования представляет собой n

мерный параллелепипед со сторонами параллельными осям координат. Данный параллелепипед можно однозначно задать двумя вершинами , которые имеют самые младшие и самые старшие координаты всех точек параллелепипеда.
Обозначим через n
-мерный вектор, имеющий равномерное распределение в параллелепипеде : , где .
Тогда ее плотность вероятностей будет определена следующим образом
Значение подынтегральной функции от случайного вектора будет случайной величиной , математическое ожидание которой является средним значением функции на множестве :
Среднее значение функции на множестве равняется отношению значения искомого интеграла к объему параллелепипеда :
Таким образом, значение искомого интеграла можно выразить как произведение математического ожидания функции и объема n
- мерного параллелепипеда :
Следовательно, необходимо найти значение математического ожидания . Его приближенное значение можно найти произведя n
испытаний, получив, таким образом, выборку случайных векторов, имеющих равномерное распределение на . Обозначим и . Для оценки математического ожидания воспользуемся результатом
- квантиль нормального распределения, соответствующей доверительной вероятности .
Умножив двойное неравенство из (9) на получим интервал для I
:
Обозначим точечную оценку . Получаем оценку (с надежностью ):
Аналогично можно найти выражение для относительной погрешности :
Если задана целевая абсолютная погрешность , из (11) можно определить объем выборки, обеспечивающий заданную точность и надежность:
Если задана целевая относительная погрешность, из (12) получаем аналогичное выражение для объема выборки:
В данном программном продукте реализована возможность задавать дополнительные ограничения области интегрирования двумя двумерными сплайн – поверхностями (для подынтегральной функции размерности 3). Для задания этих поверхностей используются двумерные сплайны типа гибкой пластинки \4\.
Под сплайном (от англ. spline - планка, рейка) обычно понимают агрегатную функцию, совпадающую с функциями более простой природы на каждом элементе разбиения своей области определения. Сплайн – функция имеет следующий вид:
Исходные данные представляют собой троек точек .
Коэффициенты и определяются из системы:
Реализованный алгоритм включает следующие шаги:
1) выбирается начальное значение , разыгрываются случайные векторы из и определяются и ;
2) в зависимости от вида погрешности (абсолютная, относительная) определяется достигнутая погрешность; если она меньше целевой, вычисление прерывается;
3) по формулам (13) или (14) вычисляется новый объем выборки;
4) объем выборки увеличивается на 20%
В любом алгоритме использующем метод Монте – Карло генератор псевдослучайных чисел играет очень важную роль. Степень соответствия псевдослучайных чисел заданному распределению является важным фактором проведения качественных статистических испытаний.
В программе реализован конгруэнтный метод генерации псевдослучайных чисел \3\:
Авторский код, реализующий защиту от переполнения был, реализован на С++. Перед использование первые три числа последовательности удаляются. Для получении чисел из интервала (0,1) все числа делятся на .
Проверка равномерности распределения псевдослучайных чисел проводилась с помощью стандартного критерия χ 2
\2\.
Были использованы 3 последовательности псевдослучайных чисел, определяемых стартовыми значениями 1, 1001, 1000000 длиной 300000.
Интервал (0,1) подразделялся на 50 равных интервалов и программно подсчитывались абсолютные частоты (рис. 1).
Результаты проверки приведены в Таблице 1.
Следовательно, равномерность распределения не отвергается на уровне 5%.
В заключение можно сказать, что поставленная задача была полностью выполнена. То есть на языке С++ были разработаны генератор псевдослучайных чисел, функция рассчитывающая интеграл методом Монте – Карло (Приложение 1); был проведен расчет тестовых многомерных интегралов (Приложение 2); в интегрированной среде разработки приложений Borland C++ Builder Enterprises 7.0 был создан программный продукт «CarloS», реализующий описанные выше алгоритмы (Приложение 3).
1. Бережная Е. В., Бережной В. И. Математические методы моделирования экономических систем. – М.: Финансы и статистика, 2001. – 368 с.
2. Мюллер П., Нойман П., Шторм Р. Таблицы по математической статистике. – М.: Финансы и статистика, 1982. – 278 с.
3. Теннант-Смит Дж. Бейсик для статистиков. – М.: Мир, 1988. – 208 с.
4. Baranger J. Analyse numérique. Hermann, 1991.
5. Маделунг Э. Математический аппарат физики. Справочное руководство. М.: Наука, 1968., с.287.
6. В.Е. Гмурман Теория вероятностей и математическая статистика – М.: Высшая школа, 2003
Листинг 1 Функция расчета интеграла

// вычисление интеграла методом Монте – Карло

// размерность области интегрирования

//----- 3 d
график
--------------------------------------------------------

if (d_int==3) xyz=new matd(plot_dim_max,3);
//-------------------------------------------------------------------------

//
индикатор относительной погрешности

mcres.relok=Read1double("error_type.txt");
mcres.dlt_int=Read1double("error_value.txt");
// номер стандартного значения доверительной вероятности (начиная с 0)

int
nome_int=Read1double("error_omega.txt");
unsigned long
b=m_rng*m_rng-d_rng,c,r,i,PSChunk;
mcres.rng_seed=Read1double("rng_seed.txt");
pmatd fun_b, fun_A, con_b, con_A, con_U, con_v, \
a_int, b_int, ba_int, x_int, xyz_top, xyz_bottom;
// квантили нормального распределения

double
omegas_int[6]= {
0.9,0.95,0.99,0.999,0.9999,0.99999 }
;
double
zs_int[6]= {
1.64485362695147,1.95996398454005,2.5758293035489, \
3.29052673149191, 3.89059188641317, 4.4171734134667 }
;
mcres.omega_int=omegas_int[nome_int];
double
fun_cd,con_wd,fu_int,con_sum,sum1_int,sum2_int;
mcres.fun_type=Read1double("fun_kind.txt");
// 0 – отсутствуют (весь параллелепипед)

mcres.con_type=Read1double("con_type.txt");
//
загрузка параметров интегрируемой функции

case
2: fun_A= new
matd("fun_A.txt");
case
1: fun_b= new
matd("fun_b.txt");
case
0: fun_cd=Read1double("fun_c.txt");
//
загрузка параметров ограничений

xyz_bottom= new
matd("xyz_bottom.txt");
case
2: //
квадратичная функция ограничений

con_b= new
matd("con_b.txt"); con_A= new
matd("con_A.txt");
//
разность границ параллелепипеда

//
объем объемлющего параллелепипеда

DbBox("Нижняя граница объемлющего параллелепипеда выше верхней для \
mcres.V0_int=mcres.V0_int*_p(ba_int,j,1);
// основной цикл для достижения заданной точности

// число итераций, потребовавшихся для достижения заданной точности

getdate(&dat); gettime(&tim); mcres.t_start=dostounix(&dat,&tim);
WaitForm->Edit2->Text=mcres.n1_int;
WaitForm->ProgressBar1->Position=0;
// генерация случайных точек и накопление суммы

_p(x_int,j,1)=_p(a_int,j,1)+_p(ba_int,j,1)*double(r)/d_rng;
WaitForm->ProgressBar1->Position=100.0*(i-1)/(mcres.n1_int-1);
if
((_p(x_int,3,1) < sp_bottom->f(_p(x_int,1,1), \
_p(x_int,2,1)))||(_p(x_int,3,1) > sp_top->f(_p(x_int,1,1),_p(x_int,2,1)))) con_ok=0;
case
2: //
квадратичная функция ограничений

con_sum += _p(x_int,ii,1)*_p(con_U,ii,jj)*_p(x_int,jj,1);
con_sum += _p(con_v,ii,1)*_p(x_int,ii,1);
case
1: //
линейная функция ограничений

con_sum += _p(con_A,ii,jj)*_p(x_int,jj,1);
if
(con_sum > _p(con_b,ii,1)) {
con_ok=0; break
; }

if
(mcres.in_G_int <= plot_dim_max)
_p(xyz,mcres.in_G_int,1)=_p(x_int,1,1);
_p(xyz,mcres.in_G_int,2)=_p(x_int,2,1);
_p(xyz,mcres.in_G_int,3)=_p(x_int,3,1);
fu_int += _p(x_int,ii,1)*_p(fun_A,ii,jj)*_p(x_int,jj,1);
fu_int += _p(fun_b,ii,1)*_p(x_int,ii,1);
sum1_int+=fu_int; sum2_int+=fu_int*fu_int;
// оценка мат. ожидания и дисперсии

mcres.f1_int=sum1_int/mcres.n1_int;
mcres.vari_int=(sum2_int-sum1_int*sum1_int/mcres.n1_int)/(mcres.n1_int-1);
mcres.deltar=mcres.V0_int*mcres.z_int*sqrt(mcres.vari_int/mcres.n1_int);
mcres.deltar=mcres.z_int/fabs(mcres.f1_int)*sqrt(mcres.vari_int/mcres.n1_int);
getdate(&dat); gettime(&tim); mcres.t_end=dostounix(&dat,&tim);
mcres.t_calc=mcres.t_end-mcres.t_start;
InfoBox(" Оценка интеграла = 0 (выбрана относ. погрешность), вычисление \

WaitForm->Edit3->Text=mcres.deltar;
mcres.inte_int=mcres.V0_int*mcres.f1_int;
getdate(&dat); gettime(&tim); mcres.t_end=dostounix(&dat,&tim);
mcres.t_calc=mcres.t_end-mcres.t_start;
//
вычисление нового объема выборки

mcres.n1_int=ceil(mcres.vari_int*pow(mcres.V0_int*mcres.z_int/mcres.dlt_int,2));
mcres.n1_int=ceil(mcres.vari_int*pow(mcres.z_int/mcres.dlt_int/mcres.f1_int,2));
// корректировка объема выборки в большую сторону

if
(mcres.n1_int < 1000) mcres.n1_int=1000;
// точек не набралось, чтобы заполнить матрицу

xyz_tmp=new matd(mcres.in_G_int,3);
for
(i=1; i <= mcres.in_G_int; i++)
case
3: delete
xyz_top,xyz_bottom,sp_top,sp_bottom; break
;
case
2: delete
con_U,con_v; break
;
Листинг 2 структура для хранения результатов расчета интеграла
// индикатор относительной погрешности

// ÷число итераций, потребовавшихся для достижения заданной точности

// объем выборки на последней итерации

// число точек попавших в область интегрирования

//
объем объемлющего параллелепипеда

// продолжительность вычисления интеграла

Пример 1 Интеграл от квадратичной функции по 3-мерному симплексу.
Приближенное значение найдено для целевой абсолютной погрешности 0.00001.
Погрешность: 0.000034416630896 или 0.014749984670 %.
Примеры 2-10 Объемы многомерных шаров
Точные и приближенные объемы многомерных шаров приведены в следующей таблице.
[2]
Вычислено в Maple (20 значащих цифр).
[3]
Расчет с целевой относительной погрешностью 2%

Название: Вычисление интегралов методом Монте-Карло
Раздел: Рефераты по математике
Тип: курсовая работа
Добавлен 09:41:16 26 декабря 2010 Похожие работы
Просмотров: 191
Комментариев: 12
Оценило: 3 человек
Средний балл: 4.3
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Ребятки, кто на FAST-REFERAT.RU будет заказывать работу до 26го мая - вводите промокод iphone, и тогда будете учавствовать в розыгрыше iphone xs)) сам только что узнал, что у них такие акции бывают (п.с. кстати не удивляйтесь что вас перекидывает на сайт с другим названием, так и должно быть)
Мне с моими работами постоянно помогают на FAST-REFERAT.RU - можете просто зайти узнать стоимость, никто вас ни к чему не обязывает, там впринципе всё могут сделать, вне зависимости от уровня сложности) у меня просто парень электронщик там какой то, тоже там бывает заказывает))
Спасибо, Оксаночка, за совет))) Заказал курсач, отчет по практике, 2 реферата и дипломную на REFERAT.GQ , все сдал на отлично, и нервы не пришлось тратить)
Я обычно любые готовые работы покупаю на сайте shop-referat.tk , и свои все там же на продажу выставляю, неплохой доп.заработок. А если там не нахожу то уже на referat.gq заказываю и мне быстро делают.
Да, но только в случае крайней необходимости.

Курсовая работа: Вычисление интегралов методом Монте-Карло
Содержание Стандарта Реферат
Диссертация Подготовка И Защита
Реферат Про Елену Глинскую
Реферат по теме Рекреационно-туристический потенциал Приднестровья и проблемы охраны
Дипломная Работа Короткометражный Фильм
Реферат: Cosmological Argument Essay Research Paper How Well
Реферат: Основные направления в психологии
Реферат: Великобритания 17-19 века. Скачать бесплатно и без регистрации
Курсовая работа по теме Разработка технологического процесса механической обработки детали 'Вал промежуточный'
Контрольная Работа 8 Класс Личность И Общество
Курсовая работа по теме Место и функции теории государства и права
Реферат Интернет Банкинг
Контрольная Работа На Тему Понятие Банковских Рисков, Их Классификация
Дипломная работа: Микроклимат пещеры "Мраморная" и формы антропогенного влияния
Курсовая работа по теме Организация и перспективы развития производства продукции свиноводства в колхозе 'Раковский' Уссурийского района
Готовое Сочинение Остроухова Золотая Осень
Контрольная работа: Цивільне право
Дипломная работа по теме Эффективные продажи
История Развития Автотранспорта Реферат
Курсовая работа: Железобетонные конструкции
Курсовая работа: Методы оценки эффективности инвестиционного проекта
Реферат: Вирусы и борьба с ними
Реферат: Архитектура возрождения

Report Page