Метод Монте-Карло/Lesson
Материал из Поле цифровой дидактики
Оценка числа π методом Монте-Карло
# Установка параметров
n_simulations <- 1000000 # 1 миллион точек
set.seed(42) # Для воспроизводимости
# Генерация случайных координат в единичном квадрате
x <- runif(n_simulations, 0, 1)
y <- runif(n_simulations, 0, 1)
# Расстояние от начала координат
distance <- sqrt(x^2 + y^2)
# Подсчёт точек внутри окружности (расстояние <= 1)
inside_circle <- sum(distance <= 1)
# Оценка π
pi_estimate <- 4 * inside_circle / n_simulations
# Истинное значение π
true_pi <- pi
# Вывод результатов
cat("Число Монте-Карло оценка π:", pi_estimate, "\n")
cat("Истинное π:", true_pi, "\n")
cat("Абсолютная ошибка:", abs(pi_estimate - true_pi), "\n")
cat("Относительная ошибка:", percent(abs(pi_estimate - true_pi) / true_pi), "\n")
Численное интегрирование функции
# Задача: вычислить интеграл функции f(x) = x^2 на [0, 1]
# Аналитическое решение: ∫x^2 dx = x^3/3 |_0^1 = 1/3
n_simulations <- 1000000
set.seed(42)
# Генерация равномерных случайных чисел на [0, 1]
x <- runif(n_simulations, 0, 1)
# Вычисление значений функции
f_values <- x^2
# Оценка интеграла (среднее значение функции)
integral_estimate <- mean(f_values)
# Истинное значение
true_integral <- 1/3
cat("Оценка интеграла:", integral_estimate, "\n")
cat("Истинное значение:", true_integral, "\n")
cat("Ошибка:", abs(integral_estimate - true_integral), "\n")
# Стандартная ошибка оценки
std_error <- sd(f_values) / sqrt(n_simulations)
cat("Стандартная ошибка:", std_error, "\n")
# 95% доверительный интервал
ci_lower <- integral_estimate - 1.96 * std_error
ci_upper <- integral_estimate + 1.96 * std_error
cat("95% ДИ: [", ci_lower, ", ", ci_upper, "]\n")
