MI/KLdivergence 算法

1.二面角计算过程
{res={atoms,coord}}m
for resi in{res}m:
  • switch (dihedrals_type)
    • resi --->  四原子 atom,coord
    • 矢量叉积(coord)-->angle
2.MI计算
1)I(X;Y)=H(X)+H(Y)-H(X,Y)
H(X),H(Y)是单变量熵,H(X,Y)是联合熵
计算过程
输入矩阵:dihedrals×frame=[dij]mn
映射到[0-2pi]上:dij∈[0,2pi]
排序索引:将每一列的二面角进行排序,然后将每个二面角的值替换成排序后的索引值
for j:
  • dij=idx(sort(di) && dik==dij)
S1计算:然后就是对每个列进行单变量熵的计算(这里的单变量指的就是二面角列表示的二面角)
for j:
  • for k:
    • H(X+Y)=H(dij)+H(dik)
S2计算:计算任意两个列的联合熵
for j:
  • for k:
    • H(XY)=H(dij,dik)
MI计算:
  • I=H(X+Y)-H(XY)
通过I(XY)=H(X)+H(Y)-H(XY)就可以得到MI矩阵了