Калькулятор методу Монте-Карло
Метод Монте-Карло — це широкий клас обчислювальних алгоритмів, що використовують випадкові числа для розв'язання детерміністичних задач. Назва походить від казино Монте-Карло в Монако через аналогію з випадковістю азартних ігор. Метод був розроблений у 1940-х роках Станіславом Уламом та Джоном фон Нейманом під час роботи над Манхеттенським проектом. Метод Монте-Карло особливо ефективний для багатовимірних інтегралів, задач оптимізації, симуляції складних систем та оцінки ймовірностей рідкісних подій.
Інтерактивний калькулятор Монте-Карло
Теорія методу Монте-Карло
Основна ідея
Замість аналітичного обчислення використовуємо статистичну оцінку
на основі випадкової вибірки.
Приклад: обчислення інтеграла
I = ∫[a,b] f(x) dx
Монте-Карло оцінка:
Î = (b-a)/N × Σᵢ f(Xᵢ)
де Xᵢ ~ Uniform(a, b) — рівномірно розподілені випадкові числа.
За законом великих чисел:
Î → I при N → ∞ (майже напевно)
За центральною граничною теоремою:
(Î - I) / (σ/√N) → N(0, 1) при N → ∞
Історія
Хоча випадкове семплювання використовувалося і раніше (наприклад, голка Бюффона, 1777),
систематичний метод Монте-Карло був розроблений у 1940-х роках:
- 1946: Станіслав Улам, одужуючи від хвороби, грав у пасьянс і
замислився про статистичний підхід до оцінки ймовірності виграшу
- 1947: Улам та Джон фон Нейман застосували метод для моделювання
дифузії нейтронів у Манхеттенському проекті
- 1949: Перша публікація: Metropolis & Ulam "The Monte Carlo Method"
Швидкість збіжності
Стандартна похибка оцінки:
SE = σ / √N
де σ — стандартне відхилення f(X).
Для 95% довірчого інтервалу:
Î ± 1.96 × SE
КЛЮЧОВА ПЕРЕВАГА:
Похибка O(1/√N) НЕ ЗАЛЕЖИТЬ від розмірності!
Для d-вимірного інтегралу:
• Метод прямокутників: O(N^(-1/d))
• Монте-Карло: O(N^(-1/2)) незалежно від d
При d > 4 Монте-Карло зазвичай ефективніший.
Монте-Карло інтегрування
Простий метод (Hit-or-Miss)
Для інтеграла I = ∫[a,b] f(x) dx, де 0 ≤ f(x) ≤ M:
1. Генеруємо N точок (Xᵢ, Yᵢ) рівномірно у [a,b] × [0,M]
2. Рахуємо k = кількість точок під графіком (Yᵢ ≤ f(Xᵢ))
3. Оцінка: Î = (k/N) × (b-a) × M
Інтерпретація: площа під графіком ≈ частка точок × площа прямокутника
Базовий метод (Sample Mean)
I = ∫[a,b] f(x) dx = (b-a) × E[f(X)], де X ~ Uniform(a,b)
Оцінка: Î = (b-a)/N × Σᵢ f(Xᵢ)
Дисперсія оцінки:
Var(Î) = (b-a)² × Var(f(X)) / N
Ефективніший за Hit-or-Miss (менша дисперсія).
Importance Sampling (вибірка за важливістю)
Ідея: семплювати частіше там, де |f(x)| велике.
I = ∫ f(x) dx = ∫ [f(x)/g(x)] × g(x) dx = E_g[f(X)/g(X)]
де g(x) — "важлива" щільність (proposal distribution).
Оцінка: Î = (1/N) × Σᵢ f(Xᵢ)/g(Xᵢ), де Xᵢ ~ g
Оптимальний вибір: g(x) ∝ |f(x)|
Приклад: для ∫ e^(-x²) dx при великих x
краще семплювати з експоненціального розподілу.
Stratified Sampling (стратифікована вибірка)
Ідея: розбити область на страти, семплювати з кожної окремо.
1. Розбити [a,b] на k інтервалів [a₀,a₁], [a₁,a₂], ...
2. В кожному інтервалі генерувати n/k точок
3. Обчислити внесок кожної страти
Var(stratified) ≤ Var(simple)
Зменшення дисперсії за рахунок рівномірнішого покриття.
Антитетичні змінні
Ідея: використовувати корельовані пари для зменшення дисперсії.
Якщо U ~ Uniform(0,1), то (1-U) також Uniform(0,1).
Оцінка: Î = (1/N) × Σᵢ [f(Uᵢ) + f(1-Uᵢ)] / 2
Якщо f монотонна, Cov(f(U), f(1-U)) < 0,
що зменшує дисперсію суми.
Методи Монте-Карло марківських ланцюгів (MCMC)
Алгоритм Метрополіса-Гастінгса
Задача: вибірка з розподілу π(x), відомого з точністю до константи.
Алгоритм:
1. Ініціалізація: вибрати x₀
2. Для t = 0, 1, 2, ...
a) Генерувати кандидата y ~ q(y|xₜ)
b) Обчислити α = min(1, [π(y)q(xₜ|y)] / [π(xₜ)q(y|xₜ)])
c) З ймовірністю α: xₜ₊₁ = y (прийняти)
Інакше: xₜ₊₁ = xₜ (відхилити)
Якщо q симетричний (q(y|x) = q(x|y)):
α = min(1, π(y)/π(xₜ)) — оригінальний алгоритм Метрополіса (1953)
Асимптотично: {xₜ} ~ π
Семплер Гіббса
Для багатовимірного π(x₁, x₂, ..., xₐ):
Ітерація:
1. Семплювати x₁ ~ π(x₁ | x₂, x₃, ..., xₐ)
2. Семплювати x₂ ~ π(x₂ | x₁, x₃, ..., xₐ)
...
d. Семплювати xₐ ~ π(xₐ | x₁, x₂, ..., x_{d-1})
Перевага: не потрібна функція proposal, якщо умовні
розподіли мають просту форму.
Застосування: Байєсівська статистика, моделі Ізінга.
Hamiltonian Monte Carlo (HMC)
Ідея: використати фізичну аналогію з гамільтоновою механікою.
• Цільовий розподіл π(q) ∝ exp(-U(q))
• Додати допоміжну "швидкість" p ~ N(0, M)
• Гамільтоніан: H(q, p) = U(q) + p'M⁻¹p/2
Алгоритм:
1. Семплювати p ~ N(0, M)
2. Симулювати гамільтонову динаміку (leapfrog integrator)
3. Приймати/відхиляти на основі зміни H
Переваги:
• Менша кореляція між зразками
• Ефективний для високовимірних просторів
• Основа сучасних байєсівських бібліотек (Stan, PyMC3)
Застосування методу Монте-Карло
1. Фінанси
Оцінка похідних фінансових інструментів:
Європейський Call опціон:
C = e^(-rT) × E[max(S_T - K, 0)]
Геометричне броунівське движення:
S_T = S₀ × exp[(r - σ²/2)T + σ√T × Z], Z ~ N(0,1)
Монте-Карло оцінка:
Ĉ = e^(-rT) × (1/N) × Σᵢ max(S_T^(i) - K, 0)
Екзотичні опціони, Path-dependent деривативи,
Value at Risk (VaR), Credit Risk — все MC.
2. Фізика та хімія
- Ядерна фізика: транспорт частинок, моделювання детекторів
- Статистична механіка: модель Ізінга, фазові переходи
- Молекулярна динаміка: згортання білків, ліганд-докінг
- Квантова хромодинаміка: граткові обчислення QCD
- Астрофізика: перенос випромінювання, космологічні симуляції
3. Машинне навчання
- Байєсівський висновок: апостеріорні розподіли параметрів
- Генеративні моделі: VAE, нормалізуючі потоки
- Reinforcement Learning: Monte Carlo Tree Search (AlphaGo)
- Dropout: MC Dropout для оцінки невизначеності
4. Комп'ютерна графіка
Ray Tracing та Global Illumination:
Рівняння рендерингу (Kajiya):
L(x,ω) = Lₑ(x,ω) + ∫ f(x,ω',ω)L(x',ω')cos(θ')dω'
Інтеграл по всіх напрямках — ідеальний кандидат для MC.
Path Tracing:
• Випадкові шляхи від камери до джерел світла
• Оцінка освітленості на основі вибірки
Сучасні GPU реалізують MC ray tracing у реальному часі
(RTX, DXR).
5. Оптимізація
- Simulated Annealing: глобальна оптимізація з "охолодженням"
- Генетичні алгоритми: випадкові мутації та кросовери
- Particle Swarm: рій випадково рухомих частинок
- Cross-Entropy Method: ітеративне уточнення розподілу
6. Інженерія та надійність
- Аналіз надійності систем
- Оцінка ризиків (проекти, страхування)
- Чутливість до параметрів
- Пропагування невизначеності
Генерація випадкових чисел
Псевдовипадкові генератори (PRNG)
Лінійний конгруентний генератор (LCG):
Xₙ₊₁ = (a × Xₙ + c) mod m
Приклад (MINSTD): a=16807, c=0, m=2³¹-1
Mersenne Twister (MT19937):
• Період 2¹⁹⁹³⁷ - 1 (число Мерсенна)
• Стандарт у багатьох мовах (C++, Python)
Xorshift:
Швидкий, хороші статистичні властивості
ВАЖЛИВО: для криптографії потрібні CSPRNG!
(наприклад, ChaCha20, AES-CTR)
Генерація з довільного розподілу
1. Метод оберненої функції:
X = F⁻¹(U), де U ~ Uniform(0,1), F — CDF
Приклад (експоненціальний): X = -ln(U)/λ
2. Box-Muller (нормальний розподіл):
Z₁ = √(-2ln(U₁)) × cos(2πU₂)
Z₂ = √(-2ln(U₁)) × sin(2πU₂)
3. Rejection sampling:
Семплювати з g(x), приймати з ймовірністю f(x)/(M×g(x))
4. Ziggurat algorithm:
Швидкий метод для нормального та експоненціального
Quasi-Monte Carlo (QMC)
Ідея: замість випадкових точок використовувати
"квазівипадкові" послідовності з низькою дискрепантністю.
Приклади:
• Послідовність Холтона
• Послідовність Соболя
• Послідовність Нідеррайтера
Похибка: O(log(N)^d / N) замість O(1/√N)
При помірній розмірності d може бути значно
ефективнішим за звичайний MC.
Рандомізований QMC (RQMC):
Поєднує переваги QMC з можливістю оцінки похибки.
Фінансове моделювання
Модель Блека-Шоулза
Геометричний броунівський рух ціни акції:
dS = μS dt + σS dW
Розв'язок:
S(T) = S(0) × exp((μ - σ²/2)T + σ√T × Z)
де Z ~ N(0,1)
Ціна європейського колл-опціону:
C = e^(-rT) × E[max(S(T) - K, 0)]
MC оцінка:
C ≈ e^(-rT) × (1/N) × Σ max(S_i(T) - K, 0)
Екзотичні опціони
Азіатський опціон (середня ціна):
Payoff = max(Ā - K, 0), де Ā = (1/n)Σ S(tᵢ)
Бар'єрний опціон (knock-out/knock-in):
• Опціон "вмирає" або "активується" при досягненні бар'єра
Lookback опціон:
Payoff = S(T) - min S(t) (fixed strike lookback)
Basket опціон:
На корзину активів: Payoff = max(w₁S₁ + w₂S₂ + ... - K, 0)
Для цих опціонів немає замкнутих формул → MC!
Value at Risk (VaR)
VaR_α = -q_α(ΔP)
де q_α — α-квантиль зміни вартості портфеля
MC-підхід:
1. Згенерувати N сценаріїв ринкових факторів
2. Переоцінити портфель для кожного сценарію
3. VaR = -[⌈αN⌉-те найменше значення]
Conditional VaR (Expected Shortfall):
CVaR = -E[ΔP | ΔP ≤ -VaR]
Перевага MC: враховує нелінійності (опціони)
Фізичні застосування
Модель Ізінга
Гамільтоніан:
H = -J Σ_{⟨i,j⟩} sᵢsⱼ - h Σᵢ sᵢ
де sᵢ ∈ {-1, +1} — спіни
Алгоритм Метрополіса:
1. Обрати випадковий спін
2. Обчислити ΔE при flip
3. Прийняти flip з ймовірністю min(1, exp(-βΔE))
4. Повторити
Спостережувані величини:
• Намагніченість: M = ⟨Σsᵢ⟩/N
• Енергія: ⟨E⟩
• Теплоємність: C = (⟨E²⟩ - ⟨E⟩²)/(kT²)
• Сприйнятливість: χ = (⟨M²⟩ - ⟨M⟩²)/(kT)
Фазовий перехід при T_c (для 2D: T_c = 2J/k×ln(1+√2))
Квантові MC методи
Variational MC (VMC):
• Параметризована пробна функція Ψ(R; α)
• Мінімізація E[α] = ⟨Ψ|H|Ψ⟩/⟨Ψ|Ψ⟩
• Вибірка з |Ψ|² методом Метрополіса
Diffusion MC (DMC):
• Уявний час: exp(-Hτ)|Ψ⟩ → основний стан
• "Дифузія" walkers у конфігураційному просторі
• Точна енергія основного стану (для бозонів)
Path Integral MC (PIMC):
• Квантові системи при скінченній температурі
• Ланцюжок "бусинок" у уявному часі
• Статистика Бозе/Фермі через permutation sampling
Транспорт випромінювання
MC для переносу фотонів/нейтронів:
1. Генерація частинки з джерела
2. Семплінг відстані до взаємодії: l = -ln(U)/μ
3. Семплінг типу взаємодії (поглинання/розсіяння)
4. Якщо розсіяння: новий напрямок з фазової функції
5. Повторити поки частинка не вийде з області
Variance reduction techniques:
• Implicit capture (weight reduction замість поглинання)
• Splitting/Russian roulette (importance sampling)
• Forced collision
• Weight windows
Importance Sampling детально
Теорія
Задача: оцінити E_p[f(X)] = ∫ f(x) p(x) dx
Importance sampling:
E_p[f(X)] = ∫ f(x) p(x)/q(x) × q(x) dx = E_q[f(X) w(X)]
де w(X) = p(X)/q(X) — importance weight
MC оцінка: (1/N) Σ f(Xᵢ) w(Xᵢ), Xᵢ ~ q
Оптимальний q:
q*(x) ∝ |f(x)| p(x)
Дисперсія: σ² = E_q[f²w²] - μ²
Зменшується коли q "покриває" області великих |f×p|
Self-Normalized Importance Sampling
Коли p(x) відомо лише з точністю до константи:
p(x) = p̃(x) / Z
SNIS оцінка:
μ̂ = Σ wᵢf(Xᵢ) / Σ wᵢ
де wᵢ = p̃(Xᵢ)/q(Xᵢ)
Властивості:
• Зміщена, але консистентна
• Effective Sample Size: ESS = (Σwᵢ)² / Σwᵢ²
• ESS/N → 1 коли q → p (ідеально)
• ESS/N → 0 — погане q (weight degeneracy)
Адаптивний Importance Sampling
Cross-Entropy Method:
1. Почати з q₀ (початкова пропозиція)
2. Семплювати, перезважити
3. Оновити параметри q щоб мінімізувати KL(p||q)
4. Повторити
Population Monte Carlo (PMC):
• Множина пропозицій {qₖ} ("частинки")
• Адаптація на основі ESS кожної пропозиції
• Змішування з resample-move
Sequential Monte Carlo (SMC):
• Послідовність цільових розподілів p₀ → p₁ → ... → p
• Importance sampling + resampling + mutation
• Particle filter як окремий випадок
Практичні поради
Скільки семплів потрібно?
Стандартна похибка MC: SE = σ/√N
Для відносної точності ε:
N ≈ (σ/ε)² × 1/μ²
Приклад:
• Оцінка π ≈ 3.14, σ ≈ 1.6
• Для 4 знаків (ε = 0.0001): N ≈ 2.6×10⁸
Правило великого пальця:
• Кожна додаткова значуща цифра → 100× більше семплів
• 1% точність → ~10,000 семплів
• 0.1% точність → ~1,000,000 семплів
Діагностика
1. Візуальна перевірка збіжності
• Кумулятивне середнє vs N
• Має стабілізуватися
2. Оцінка дисперсії
• Batch means: розбити на блоки, порівняти середні
• Jackknife / Bootstrap для SE
3. Автокореляція (для MCMC)
• ACF plot: має швидко спадати
• Integrated ACT: τ_int = 1 + 2Σρₖ
• Effective N ≈ N / (2τ_int)
4. R-hat статистика (для MCMC)
• Порівняння дисперсій within/between chains
• R̂ < 1.1 — збіжність
Паралелізація
MC природно паралелізується:
1. Embarrassingly parallel:
• Кожен процесор — незалежна симуляція
• Об'єднання результатів в кінці
• Різні RNG seeds!
2. PRNG для паралельних обчислень:
• Не використовувати той самий seed
• Уникати перекриття періодів
• Рекомендовано: Random123, Philox, ThreeFry
3. GPU прискорення:
• CUDA, OpenCL
• cuRAND для генерації
• Тисячі потоків одночасно
Ресурси
Бібліотеки
- NumPy/SciPy (Python) — базові MC
- PyMC (Python) — Bayesian MCMC
- Stan (C++/R/Python) — HMC
- QuantLib (C++/Python) — фінансовий MC
- OpenMC (C++/Python) — ядерний MC
- Geant4 (C++) — транспорт частинок
Книги
- "Monte Carlo Methods in Financial Engineering" — Glasserman
- "Monte Carlo Statistical Methods" — Robert & Casella
- "Handbook of Monte Carlo Methods" — Kroese, Taimre, Botev
- "Computational Physics" — Newman (глави про MC)
Практичне значення та контекст
Коротка довідка
Методи математичного аналізу були незалежно розроблені Ньютоном (1665–1666) та Лейбніцем (1684). У XIX ст. Коші та Вейєрштрасс заклали суворі основи теорії границь.
Де застосовується
Математичний аналіз застосовується у кожній точній науці. У фізиці похідні описують швидкість і прискорення та рівняння руху. В інженерії інтеграли використовуються для розрахунку напружень і теплових потоків. В економіці диференціальне числення дозволяє знаходити граничні витрати та прибутки. У комп'ютерних науках градієнтний спуск (похідні) є основою навчання нейронних мереж.
Часті запитання (FAQ)
Як перевірити правильність розрахунку?
Перевірте результат підстановкою: для похідних — диференціюйте результат назад (якщо взяли первісну) або порівняйте з таблицею похідних. Для інтеграла — диференціюйте результат і порівнюйте з підінтегральною функцією. Наш калькулятор також показує проміжні кроки.
Чи є практичні застосування математичного аналізу?
Так, математичний аналіз є основою фізики, інженерії, економіки та багатьох інших наук. Похідні описують швидкості зміни величин (швидкість, прискорення, граничні витрати). Інтеграли обчислюють площі, об'єми, роботу, центри мас та накопичені зміни величин.
Як користуватися цим калькулятором?
Введіть необхідні значення у відповідні поля та натисніть кнопку обчислення. Результат відобразиться одразу. Калькулятор підтримує десяткові числа та від'ємні значення — для введення від'ємного числа використовуйте знак мінус. Усі розрахунки виконуються онлайн без встановлення додаткового програмного забезпечення.
Чи можна використовувати калькулятор безкоштовно?
Так, усі калькулятори на сайті calculator.party повністю безкоштовні. Жодна реєстрація не потрібна — просто відкрийте сторінку та починайте обчислення. Калькулятори доступні 24/7 і працюють у будь-якому сучасному браузері на комп'ютері, планшеті або смартфоні.
Яка точність обчислень калькулятора?
Калькулятор використовує 64-бітну арифметику з плаваючою точкою (стандарт IEEE 754), що забезпечує точність до 15–16 значущих цифр. Для більшості практичних задач цього більш ніж достатньо. Результати округлюються до 4–6 значущих цифр для зручності читання.