Академический Документы
Профессиональный Документы
Культура Документы
Кафедра ИВТ
Дисциплина
«Вычислительные системы и сети»
Лабораторная работа № 2
Омск, 2019
Введение
На современном уровне техники сложность объектов зачастую не позволяет
разработать для них эффективных математических моделей и тем более -
аналитических методов их решения. К тому же составление мат. модели и
проведение расчёта требует определённой квалификации. Таковы две причины всё
большего распространения численных методов.
Основой численных методов являются не менее сложные математические
теории, их главное отличие — возможность значительно уменьшить долю ручных
вычислений и корректировок мат. модели. Такое упрощение компенсируется
необходимостью многократного повторения расчётных шагов - «итераций», однако
для современных компьютеров это зачастую не является проблемой.
1. Метод Монте-Карло
Суть метода заключается в следующем: для целевой случайной величины
генерируется набор случайных значений, а затем на его основе рассчитываются
требуемые значения.
Метод Монте-Карло имеет множество различных приложений. Он применяется
в следующих областях: в промышленности для моделирования изменчивости
производственных процессов; в физике, химии и биологии для моделирования
разнообразных явлений; в области игр для моделирования искусственного
интеллекта, например, в китайской игре го; в области финансов для оценки
производных финансовых инструментов и опционов.
Современный вариант метода сформировался в рамках Манхэттенского
проекта, где он применялся для моделирования расстояний, которые могут пройти
нейтроны в различных материалах.
Пример: вычисление числа Пи
Рассмотрим вычисление числа Пи с помощью метода Монте-Карло.
Вписав круг в квадрат (диаметр круга равен стороне квадрата), можно выразить
отношение площади круга к площади квадрата следующим образом:
int main() {
::std::srand((unsigned int)::std::time(NULL));
return 0;
}
4. Задания к ЛР
4.1 Изучить код к примеру 1, провести эксперименты с программой:
сделать вывод о влиянии числа «бросков» случайного числа на точность
получаемого ответа;
4.2 Модифицировать код к примеру 1, используя собственный вариант
генератора случайных чисел вместо функции стандартной библиотеки
::std::srand. Сравнить полученные результаты с изначальными. Один из
возможных вариантов основы генератора:
а) Считывание передвижений пользователем мыши в течение около 60 секунд. Для
считывания координат в приложении Windows Forms используется следующая
функция:
POINT p;
if (GetCursorPos(&p))
{
//позиция курсора: p.x p.y
}
Чтобы периодически получать координаты, рекомендуется пользоваться таймером:
#include <iostream>
#include <chrono>
#include <thread>
#include <functional>
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();
}
void do_something()
{
std::cout << "I am doing something" << std::endl;
}
int main() {
timer_start(do_something, 1000);
while(true);
}
Выполнил
Студент гр. АБВ-101
Серый И.А. ______________
(подп., дата)
Проверил
Старший преподаватель каф. ИВТ
Звонов А.О. ______________
(подп., дата)
Омск, 201_