状态分析与抽样

适用版本 · ArcQML 0.1.0

本页目录

9.1 精确概率与边缘概率

analysis::probabilities 读取当前 amplitudes,并计算 square(abs(amplitudes))。返回 shape [d] 的可微 F64 Tensor;第 index 项对应同一数值的计算基索引,其中 q0 是该索引的最低有效位。

marginal_probabilities 先验证选择集合非空、无重复且索引范围合法,然后将选择的 qubit 按编号降序排序。对每个完整基态索引,它依次移入选中位形成输出 segment id,再用 segment_sum 汇总概率。选择 [0, 2] 时,输出按照 q2q0 排列,依次对应 00011011,与输入数组中的选择顺序无关。

9.2 纯态保真度与 Bloch 向量

fidelity(lhs, rhs) 先检查两个 simulator 的量子比特数相等,再计算两个量子态内积的模平方:

F ⁣(ψ,ϕ)=ψϕ2.F\!\left(\lvert\psi\rangle,\lvert\phi\rangle\right) =\left\lvert\langle\psi\vert\phi\rangle\right\rvert^2.

返回值不执行区间截断,以保持前向表达式与反向规则一致;理论上相同归一化纯态的结果为 1、正交态为 0,但浮点舍入可能产生极小的区间外误差。

bloch_vector 对指定 qubit 的每对零分支振幅与一分支振幅计算相干项,并按照下式累加 Bloch 向量三个分量:

rx=2Re ⁣(a0a1),ry=2Im ⁣(a0a1),rz=(a02a12).\begin{aligned} r_x&=2\operatorname{Re}\!\left(\sum a_0^*a_1\right),\\ r_y&=2\operatorname{Im}\!\left(\sum a_0^*a_1\right),\\ r_z&=\sum\left(\lvert a_0\rvert^2-\lvert a_1\rvert^2\right). \end{aligned}

该函数返回普通 BlochVector {x, y, z},当前实现没有把它作为可微 Tensor 返回。

9.3 sample_counts 的精确行为

sample_counts 仅属于单态模拟器。它要求 shots 为正整数,读取当前已归一化 C64 state,取每个振幅的 norm_sqr 作为离散分布,使用给定 seed 或新随机 seed 初始化 StdRng,然后独立抽取指定次数。它不执行 Circuit,不写回 state,不产生测量坍缩,也不建立可微节点。

rust
let mut sim = StateVectorSimulator::new(2)?;
sim.apply_circuit(&bell)?;
let counts = sim.sample_counts(1_000, Some(42))?;
// keys 使用 q1q0 显示,如 "00" 与 "11"。