RMSD即均方根偏差(root mean square deviation)。设有两组向量P和Q,每组向量有N个维度为D的向量,因此P和Q可以看做N×D矩阵,那么这两组向量的RMSD为
若两组向量相同,则RMSD为零。若两组向量差别变大,则RMSD的值也会随之增大。RMSD可以量化两组向量之间的偏差,所以在计算化学中被用于衡量两个构象的相似度。
在计算RMSD之前首先要将向量平移和旋转,使两组向量达到最大重合的状态,才能得到最小的RMSD值。在比较两个构象的相似度时,不对构型进行平移和旋转操作得到的RMSD值是没有意义的。
Kabsch算法是一种计算最优旋转矩阵的算法。因为Kabsch算法只计算旋转矩阵,所以在计算之前需要将两组向量的几何中心移动到原点。而为了计算旋转矩阵,需要先计算协方差矩阵。Kabsch算法的总流程是
1. 将两组向量的几何中心平移到原点
2. 计算协方差矩阵
3. 计算旋转矩阵
1. 将两组向量的几何中心平移到原点
假设平移之前的两组向量如下图所示
可以看到这两组向量还远没有达到最大重合的状态。
首先计算每组向量的几何中心(centroid),计算公式为
随后每组向量的每个向量均减去相应的几何中心的坐标,即可将两组向量的几何中心平移到原点。
平移后的两组向量如下所示
平移后两组向量的重合程度增加了,但是由于没有旋转,RMSD值仍然偏大。
2. 计算协方差矩阵
协方差矩阵H的计算公式为
3. 计算旋转矩阵
旋转矩阵最简单的计算方法是做SVD。首先对协方差矩阵H做SVD
为了保证旋转操作后得到的坐标系依然是右手坐标系,需要对SVD的结果做符号检查。
其中sign(x)指x的符号,当x>0时,sign(x)=1;当x<0时,sign(x)=−1。最优的旋转矩阵为
令P=PR,即可得到旋转后的P。
旋转后的两组向量如下所示
很明显,经过旋转操作后,两组向量的重合程度达到最大值,此时RMSD最小。
参考资料: