Метод Монте-Карло/Lesson: различия между версиями

Материал из Поле цифровой дидактики
Новая страница: «== Процесс получения данных == <syntaxhighlight lang="R" line> # Установка параметров n_simulations <- 1000000 # 1 миллион точек set.seed(42) # Для воспроизводимости # Генерация случайных координат в единичном квадрате x <- runif(n_simulations, 0, 1) y <- runif(n_simulations, 0, 1) # Расстояние от начала координа...»
 
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
== Процесс получения данных ==
== Оценка числа π методом Монте-Карло ==
<syntaxhighlight lang="R" line>
<syntaxhighlight lang="R" line>
# Установка параметров
# Установка параметров
Строка 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")