状态分析与抽样
适用版本 · 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 排列,依次对应 00、01、10 和 11,与输入数组中的选择顺序无关。
9.2 纯态保真度与 Bloch 向量
fidelity(lhs, rhs) 先检查两个 simulator 的量子比特数相等,再计算两个量子态内积的模平方:
返回值不执行区间截断,以保持前向表达式与反向规则一致;理论上相同归一化纯态的结果为 1、正交态为 0,但浮点舍入可能产生极小的区间外误差。
bloch_vector 对指定 qubit 的每对零分支振幅与一分支振幅计算相干项,并按照下式累加 Bloch 向量三个分量:
该函数返回普通 BlochVector {x, y, z},当前实现没有把它作为可微 Tensor 返回。
9.3 sample_counts 的精确行为
sample_counts 仅属于单态模拟器。它要求 shots 为正整数,读取当前已归一化 C64 state,取每个振幅的 norm_sqr 作为离散分布,使用给定 seed 或新随机 seed 初始化 StdRng,然后独立抽取指定次数。它不执行 Circuit,不写回 state,不产生测量坍缩,也不建立可微节点。
let mut sim = StateVectorSimulator::new(2)?;
sim.apply_circuit(&bell)?;
let counts = sim.sample_counts(1_000, Some(42))?;
// keys 使用 q1q0 显示,如 "00" 与 "11"。