回答:
確かにコードを使用できますが、シミュレーションは行いません。
「マイナスM」の部分は無視します(最後に十分簡単に行うことができます)。
確率は非常に簡単に再帰的に計算できますが、実際の答え(非常に高い精度)は単純な推論から計算できます。
ロールを。してみましょうS T = Σ トン、私は= 1 Xの私を。
してみましょう最小のインデックスであるS τ ≥ M。
同様に
次に、上記の最初の式と同様の方程式を(少なくとも原則として)初期条件のいずれかにヒットして、初期条件と必要な確率(これは面倒で特に啓発的ではない)の間の代数関係を得るまで実行できます。または、対応するフォワード方程式を作成し、それらを初期条件からフォワードすることができます。これは、数値的に簡単に実行できます(これにより、回答を確認しました)。しかし、それはすべて回避できます。
ポイントの確率は、以前の確率の加重平均を実行しています。これらは、(幾何学的に迅速に)初期分布からの確率の変動を平滑化します(問題の場合、ゼロ点でのすべての確率)。の
近似(非常に正確1)に我々はそれを言うことができるにM - 1は、一度にほぼ等しい確率であるべきτ - 1(実際にそれに近い)、そして私たち以上の確率がすることを書き留めることができますから、単純な比率であることに非常に近く、それらは正規化する必要があるため、確率を書き留めることができます。
つまり、確率は6:5:4:3:2:1の比率であり、合計が1になるため、書き留めるのは簡単です。
.Machine$double.eps
2.22e-16
これが私のコードです(ほとんどは変数を初期化するだけで、作業はすべて1行で行われます)。コードは最初のロールの後に開始します(セル0を配置するのを節約するために、これはRで扱うには少し面倒です)。各ステップで、占有可能な最低セルを取得し、サイコロを前に移動します(そのセルの確率を次の6つのセルに広げます)。
p = array(data = 0, dim = 305)
d6 = rep(1/6,6)
i6 = 1:6
p[i6] = d6
for (i in 1:299) p[i+i6] = p[i+i6] + p[i]*d6
(これをrollapply
(from zoo
)を使用してより効率的に行うことができます-または他のいくつかのそのような関数-しかし、明示的にしておくと翻訳が容易になります)
注d6
1〜6上の離散確率関数であるので、最後の行のループ内のコードは、以前の値の加重平均を実行して構築されています。確率をスムーズにするのはこの関係です(私たちが関心を持つ最後のいくつかの値まで)。
確率分布から、確率の平均と分散は単純になります。
このシーケンスの初期値は
この分布の平均と分散の計算は簡単で簡単です。
R
χ 2 0.1367
M <- 300
n.iter <- 1e5
set.seed(17)
n <- ceiling((2/7) * (M + 3*sqrt(M)))
dice <- matrix(ceiling(6*runif(n*n.iter)), n, n.iter)
omega <- apply(dice, 2, cumsum)
omega <- omega[, apply(omega, 2, max) >= M+5]
omega[omega < M] <- NA
x <- apply(omega, 2, min, na.rm=TRUE)
count <- tabulate(x)[0:5+M]
(cbind(count, expected=round((2/7) * (6:1)/6 * length(x), 1)))
chisq.test(count, p=(2/7) * (6:1)/6)
[self-study]
タグを追加してwikiを読んでください。次に、これまでに理解したこと、試したこと、行き詰まっているところを教えてください。私たちはあなたが行き詰まるのを助けるためのヒントを提供します。