Материал: Лабораторная работа2

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Введение

На современном уровне техники сложность объектов зачастую не позволяет разработать для них эффективных математических моделей и тем более -

аналитических методов их решения. К тому же составление мат. модели и проведение расчёта требует определённой квалификации. Таковы две причины всё большего распространения численных методов.

Основой численных методов являются не менее сложные математические теории, их главное отличие - возможность значительно уменьшить долю ручных вычислений и корректировок мат. модели. Такое упрощение компенсируется необходимостью многократного повторения расчётных шагов - «итераций», однако для современных компьютеров это зачастую не является проблемой.

2

Ход работы

Метод Монте-Карло заключается в следующем: для целевой случайной величины генерируется набор случайных значений, а затем на его основе рассчитываются требуемые значения.

Современный вариант метода сформировался в рамках Манхэттенского проекта, где он применялся для моделирования расстояний, которые могут пройти нейтроны в различных материалах. Рассмотрим вычисление числа Пи с помощью метода Монте-Карло.

Вписав круг в квадрат, можно выразить отношение площади круга к площади квадрата следующим образом:

Если мы сможем вычислить это отношение, значит, мы сможем получить значение числа Пи.

Заполним квадрат точками со случайными координатами. Рассчитаем отношение количества точек, попавших в круг, к общему количеству точек.

Умножим результат на 4, чтобы получить значение числа Пи. Результат работы программы представлен на рисунке1.

Рисунок 1 –работа программы на c++

3

Код программы:

#include "pch.h" #include <iostream> #include <chrono> #include <thread> #include <functional>

#include <cstdlib>

//for

rand

#include

<ctime>

//for

TIME in rand

#include

<math.h>

 

 

using namespace std;

void timer_start(std::function <void(void)> func,unsigned int interval)

{

std::thread([func, interval]() { while (true)

{

func(); std::this_thread::sleep_for(std::chrono::milliseconds(interval));

}

}).detach();

}

int main() {

::std::srand((unsigned int)::std::time(NULL));

int iterations = 10000; int points = 0;

int a = 0; int b = 0; // int d;

for(int j = 0; j < 6;j++) {

for (int i = 0; i < iterations; i++) { a = (rand() % (100 + 1));

b = (rand() % (100 + 1));

if ((a * a + b * b) < (100 * 100)) points++;

};

a = 0; b = 0;

cout << "our Pi: " <<(float)4 * points / iterations << std::endl; points = 0;

}

while (true); return 0;

}

При выполнении работы было замечено, что при малом количестве итераций точность числа Pi уменьшается. В лабораторной работе мы подобрали оптимальное количество итераций, а именно 10000. Далее мы в Excel вычислим число ПИ с помощью метода Монте-Карло. Результат работы представлен на рисунке 2.

4

Рисунок 2 – метод Монте-Карло в Excel

Для подсчета и построения числа Пи с помощью нашего метода нам нужны две точки координат X и Y. С помощью СЛУЧ() мы сделали выборку для каждой точки, доесть 1000 случайно генерированных значений. Подсчитали кол-во точек на окружности и за ее приделами. График разброса точек координат представлен на рисунке 3.

Рисунок 3 – график разброса точек координат

Далее мы подсчитали p(вероятность). Для этого мы подсчитали точки не лежащими на окружности с общим количеством и поделили их. После получения вероятности мы умножили ее на 4 и получили число Пи. В Excel точность зависит от количества точек, чем больше, тем точней.

5

Источник: https://studfile.net/preview/16467141/