Метод Монте-Карло/Lesson: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) |
Patarakin (обсуждение | вклад) |
||
| Строка 26: | Строка 26: | ||
cat("Абсолютная ошибка:", abs(pi_estimate - true_pi), "\n") | cat("Абсолютная ошибка:", abs(pi_estimate - true_pi), "\n") | ||
cat("Относительная ошибка:", percent(abs(pi_estimate - true_pi) / true_pi), "\n") | cat("Относительная ошибка:", percent(abs(pi_estimate - true_pi) / true_pi), "\n") | ||
</syntaxhighlight> | |||
=== Численное интегрирование функции === | |||
<syntaxhighlight lang="R" line> | |||
# Задача: вычислить интеграл функции 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") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия от 13:18, 6 декабря 2025
Оценка числа π методом Монте-Карло
# Установка параметров
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")
