モンテカルロ法
🔥 Vibe プロンプト
「ダーツを投げてπを推定。モンテカルロで∫∫(x²+y²<1)を推定。収束を表示。」
import random, math
def estimate_pi(n):
inside = 0
for _ in range(n):
x, y = random.random(), random.random()
if x*x + y*y <= 1:
inside += 1
return 4 * inside / n
for n in [100, 1000, 10000, 100000]:
pi_est = estimate_pi(n)
error = abs(pi_est - math.pi) / math.pi * 100
print(f"n={n:>7}: π ≈ {pi_est:.6f} (誤差: {error:.4f}%)")
def mc_integral(n, func, low=0, high=1):
xs = [random.uniform(low, high) for _ in range(n)]
return (high - low) * sum(func(x) for x in xs) / n
result = mc_integral(100000, lambda x: x**2)
print(f"∫₀¹ x² dx = {result:.4f} (厳密値: {1/3:.4f})")
収束率
MC誤差 ∝ 1/√n。誤差を半分にするにはnを4倍に。
ランダム化アルゴリズムコース完了!🎉
- ✅ QuickSort
- ✅ ランダムハッシュ
- ✅ Quickselect
- ✅ リザーバーサンプリング
- ✅ モンテカルロ法
応用
- 金融オプション価格設定
- 物理シミュレーション
- ベイズ推論
- 強化学習
重要なポイント
- コアコンセプトをしっかり理解する
- ハンズオンコード例で実践する
- 実世界の問題に応用する
- 演習で知識を強化する
さらに学ぶ
- 公式ドキュメント
- GitHubのオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル