PLUMED协方差:先中心化,再计算
用原生加权均值和显式中心化得到真正的协方差,区分二阶矩与协方差,并展示实际矩阵图。
阅读本篇目录
COVARIANCE_MATRIX接收矩阵与权重时,本例的原生行为是计算传入数据的加权二阶矩。要得到通常统计意义上的协方差,需要先减去加权均值。本篇把这一步完整写出来,避免直接把二阶矩当成协方差。
1. 下载与看图#
下载PLUMED矩阵与分类资料包,保存为example.zip:
python3 -m zipfile -e example.zip .
cd plumed-matrix-covariance
bash results.sh
bash read.sh
bash plot.sh
这几条命令先读取随包保存的真实计算结果。CSV在data/,图片在figures/,完整输入和原生输出分别在inputs/与reference-results/。

图中两块矩阵色标不同,应读各自色标的数值,不能仅根据颜色比较大小。
2. 数据的行和列是什么#
本例仍用同一组32帧四原子几何。每一帧的三个距离组成v,再构造v+0.1与v²,用VSTACK连接。这里VSTACK ARG=v,v2,v3的参数作为列,因此得到3个观测、3个特征。每个观测的权重分别是1、2、3,总权重6。
本篇协方差是每帧内部三个观测的加权协方差,不是跨32帧累积的轨迹协方差。用于真实轨迹PCA时,需要另行准备正确的观测矩阵、原子对齐和充分采样。
3. 完整输入#
cat inputs/centered-covariance/plumed.dat
UNITS LENGTH=nm ENERGY=kj/mol TIME=ps
r: DISTANCE ATOMS=1,2 NOPBC
s: DISTANCE ATOMS=1,3 NOPBC
t: DISTANCE ATOMS=1,4 NOPBC
v: CONCATENATE ARG=r,s,t
v2: CUSTOM ARG=v FUNC=x+0.1 PERIODIC=NO
v3: CUSTOM ARG=v FUNC=x*x PERIODIC=NO
weights: CONSTANT VALUES=1,2,3
wsum: SUM ARG=weights PERIODIC=NO
vw: CUSTOM ARG=v,weights FUNC=x*y PERIODIC=NO
vsum: SUM ARG=vw PERIODIC=NO
vmean: CUSTOM ARG=vsum,wsum FUNC=x/y PERIODIC=NO
vcenter: CUSTOM ARG=v,vmean FUNC=x-y PERIODIC=NO
v2w: CUSTOM ARG=v2,weights FUNC=x*y PERIODIC=NO
v2sum: SUM ARG=v2w PERIODIC=NO
v2mean: CUSTOM ARG=v2sum,wsum FUNC=x/y PERIODIC=NO
v2center: CUSTOM ARG=v2,v2mean FUNC=x-y PERIODIC=NO
v3w: CUSTOM ARG=v3,weights FUNC=x*y PERIODIC=NO
v3sum: SUM ARG=v3w PERIODIC=NO
v3mean: CUSTOM ARG=v3sum,wsum FUNC=x/y PERIODIC=NO
v3center: CUSTOM ARG=v3,v3mean FUNC=x-y PERIODIC=NO
cov: COVARIANCE_MATRIX ARG=vcenter,v2center,v3center WEIGHTS=weights
PRINT ARG=vmean,v2mean,v3mean STRIDE=1 FILE=MEANS FMT=%.14g
DUMPVECTOR ARG=cov STRIDE=1 FILE=centered-cov.dat FMT=%.14g PRINT_ONE_FILE
计算次序为:对每列求Σwᵢxᵢ/6,每个观测减去这三个均值,再将中心化后的矩阵交给COVARIANCE_MATRIX。本例采用总体权重归一化Σw=6,不是统计估计中带自由度修正的无偏样本协方差。
4. 运行与读取#
本例使用CP2K配套的PLUMED 2.10.1 CPU程序。CP2K为Intel oneAPI 2024.2 / Intel MPI构建;这里运行的是独立PLUMED driver,无需调用CP2K或GPU。脚本设置单线程,分析使用NumPy与Matplotlib。
source /etc/profile.d/lmod.sh
module purge
module load cp2k/2026.2-8173m
export LD_LIBRARY_PATH=/public/software/cp2k/deps/2026.2/8173m/plumed-2.10.1/lib:${LD_LIBRARY_PATH:-}
想复跑三组坐标后处理,在一个新解压目录中执行:
sbatch run.slurm
任务完成后:
bash read.sh work analysis-new
bash plot.sh analysis-new figures-new work
提交脚本按CPU整节点规则申请56核,程序实际单线程。没有CPU资源时,仍可读取随包结果,不要把计算命令直接搬到登录节点。
head reference-results/centered-covariance/MEANS
head reference-results/centered-covariance/centered-cov.dat
head data/PLUMED-centered-covariance.csv
本例32帧均值、矩阵对称性与半正定性都可由随包reader直接检查;中心化协方差与独立NumPy计算最大差约5.1×10⁻¹⁷。修改自己的特征或权重后,先确认矩阵布局、单位和归一化,再解释协方差数值。