McCaskill Algorithm

McCaskill Algorithmは分配関数を計算する

McCaskill Algorithmは, RNA2次構造のBolzmann分布\(p(x,\sigma) = \frac{1}{Z(x)}e^{-E(x,\sigma)/RT}\)における分配関数\(Z(x)\)を計算する.
以下, \( (x) \) を省略する. \(Z(i,j)\)は、部分配列\(x_{i\ldots j}=x_i\ldots x_j\)のBoltzmann因子の総和である.

初期化: for \(1 \le i \le L\)
\[
Z(i,i) = Z(i,i-1) = 1.0 \\
Z^1(i,i) = Z^m(i,i) = Z^{m1}(i,i) = Z^{m1}(i+1,i) = 0.0
\]
再帰: for \(\ell = 2\) to \(L\), \(i=1\) to \(L-\ell+1\), \(j=i+\ell-1\):
\[
Z(i,j) = 1.0 + \sum_{h=i}^{j} Z(i,h-1) Z^{1}(h,j) \\
Z^1(i,j) = \sum_{h=i}^{j} Z^b(i,h) \\
Z^b(i,j) = e^{-{f_1(i,j)}/{RT}} + \sum_{h=i+1}^{j-2} \sum_{\ell =h+1}^{j-1} Z^b(h,\ell) e^{-{f_2(i,j,h,\ell)}/{RT}} + \sum_{h=i+1}^{j-1} Z^m(i+1,h-1)Z^{m1}(h,j-1) e^{-\left[ {f_3(i,j)}/{RT} \right]} \\
Z^m(i,j) = \sum_{h=i+1}^{j} \left[e^{-f_4(i,h-1)/RT} + Z^m(i,h-1)\right] Z^{m1}(h,j)
\]
\[
Z^{m1}(i,j) = \sum_{h=i+1}^{j} Z^b(i,h)e^{-f_4(h+1,j)/{RT}}
\]
終了処理: \( Z = Z(1,L) \)