十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MATLAB量子纠缠工具箱:从部分转置判据到负度计算

MATLAB量子纠缠工具箱:从部分转置判据到负度计算 简介面向量子信息研究者和工程技术人员的MATLAB量子纠缠工具箱聚焦量子态生成、纠缠度量、纠缠检测与演化模拟等核心任务适合理论物理背景学生及从事量子计算、量子通信开发的工程师上手使用。压缩包共含152个文件以144个m脚本/函数为主配合少量txt说明、md文档以及git配置文件m文件覆盖纠缠判定、层级分析、Bell不等式优化等典型算法模块txt/md用于补充使用说明与示例。整体包体仅189KB轻量易部署。资源目前已有98人学习下载内容难度偏向中高级需具备一定线性代数与量子力学基础。通过学习可获得完整的量子纠缠计算框架既能生成Bell态、GHZ态、W态等常用量子态也能计算concurrence、negativity等纠缠度量并应用Peres-Horodecki判据、PPT判据等方式检测纠缠还支持对称扩展等NPA层级优化分析配套示例脚本将抽象理论转为可直接运行的代码便于在此基础上扩展纠缠交换、量子隐形传态等应用实验有效降低量子信息方向的研究门槛。1. 量子纠缠的 MATLAB 工具箱zip 里装的不是代码是判据把量子纠缠的量化和判定封装成 MATLAB 工具箱看起来是件顺手的事无非把密度矩阵和谱分解写成函数。真正麻烦的是纠缠不是单一指标——同一个密度矩阵部分转置判据可能说它是纠缠的而并发度函数可能输出零。于是解压 zip 之后你必须先决定“我今天到底要证明纠缠、度量纠缠还是蒸馏纠缠”。这正是这类工具箱的价值它把 Peres-Horodecki 判据、负度、对数负度、形成纠缠度等不同层级的算法放在同一套数据结构上让你拿到密度矩阵就能直接做横向对比。下面按判据选型、zip 安装、回归计算到批量改造走一遍我拿到类似压缩包后的完整处理路线。2. 纠缠判据怎么选决定这个 MATLAB 工具箱合不合手拿到这类工具箱最先进去翻的不是 README而是函数清单。我一般先找三个名字partial_transpose/PartialTranspose、negativity/Negativity、concurrence/Concurrence。它们分别回答“是不是纠缠”“纠缠有多强”“纠缠能不能被提取出来”。先看判据再看实现否则再漂亮的 MATLAB 代码也只是数值外壳。2.1 Peres-Horodecki 判据部分转置是工具箱的第一道闸门两体量子系统里最常用的必要条件是可分离态的密度矩阵在做部分转置后仍然半正定。把子系统 B 的指标交换如果新矩阵出现负特征值就说明该态不能被写成两组局部态的概率混合这个判定叫 NPT 纠缠判据。很多 MATLAB 工具箱的第一个核心函数就是在做这件事。如果压缩包里没有现成partial_transpose我一般会写下面这个兜底版本方便核对原工具箱的行为function rho_pt partial_transpose(rho, sys, dims) %PARTIAL_TRANSPOSE 对密度矩阵 rho 的子系统 sys 做部分转置 % rho: 方阵密度矩阵维度 prod(dims) x prod(dims) % sys: 整数指定转置哪个子系统一般取 1 或 2 % dims: 行向量各子系统维度例如 [2 2] d length(dims); assert(length(dims) sys, sys 超出子系统数量); rho_t reshape(rho, [dims dims]); % 展开成多指标张量 perm 1:2*d; perm(sys) d sys; % 把行指标中的第 sys 维与列指标的第 sys 维交换 perm(d sys) sys; rho_pt reshape(permute(rho_t, perm), size(rho)); end这个实现利用了 MATLAB 按列优先的 reshape 约定rho按|00, |01, |10, |11顺序展开成张量后第 1 组dims是行指标第 2 组dims是列指标。permute把行侧第sys维和列侧第sys维交换再 reshape 回矩阵就得到了部分转置后的密度矩阵。对 2×2 量子比特来说sys2等价于在计算基下把 B 子系统的行块位置做镜像。用这个函数判断纠缠的脚本很短rho [0.4 0 0 0.3; 0 0.1 0 0; 0 0 0.1 0; 0.3 0 0 0.4]; rho_pt partial_transpose(rho, 2, [2 2]); ev eig(rho_pt); fprintf(最小本征值: %.6f\n, min(real(ev)));eig对非厄米矩阵也可能返回复特征值所以取real部分。密度矩阵本身是厄米的部分转置后不一定厄米但对两体系统只要转置的子系统固定特征值要么全实要么成共轭复对出现。实际脚本里可以不加real但输出和绘图时保留会避免很多警告。2.2 负度与对数负度实值纠缠度量选型部分转置只能给布尔判断不方便比较“哪个态更纠缠”。于是工具箱通常提供负度指标[ N(\rho) \frac{|\rho^{T_B}|_1 - 1}{2} ]其中 (|\cdot|_1) 是迹范数。计算上等价于把部分转置矩阵的所有负本征值取绝对值求和。工具箱里往往会同时给出negativity和log_negativity后者是前者的对数版本对高维系统更稳定。选型时可以按下面这张表理解差异。指标作用对象数值范围主要用途PPT 判据任意两体态0 或 1判定是否 NPT 纠缠Negativity两体态0 到 (d-1)/2纠缠强弱排序Logarithmic Negativity两体态0 到 log(d)与纠缠上限/蒸馏率近似相关Concurrence两量子比特态0 到 1实验参数优化直观归一化Formation Entropy混合态0 到 log(d)纠缠制备成本注意负度和并发度对同一个态给出的排序不一定一样。比如两个不同的混合态可能负度大的那个并发度反而小。原因在于负度只感知部分转置后的负特征值而并发度来自 spin-flip 矩阵的奇异值两者对量子关联的侧重不同。所以我的建议是汇报实验数据时至少同时给negativity和concurrence审稿人才不会追问。2.3 纯态与混合态工具箱里另一条防线如果待研究的态是纯态负度和部分转置就不是最优解。此时直接对约化密度矩阵算 von Neumann 熵就够了[ S(\rho_A) -\operatorname{tr}(\rho_A \log \rho_A) ]工具箱里对应的函数一般叫entropy_vn或entropy。它内部会调用eig而不是logm因为logm在矩阵有近零本征值时误差很大。纯态纠缠熵对两体系统已经足够不需要再上负度。混合态才需要组合使用多个判据。我在选择工具箱时有一个底线函数必须接受dims参数。如果某个negativity函数写死只支持两个量子比特我会拒绝使用。量子信息实验里经常出现 qubit-qutrit、qutrit-qutrit甚至三体部分转置一个不暴露dims的纠缠工具箱等于把扩展性堵死。提示如果工具箱只提供negativity(rho)而不带dims先检查它是否默认dims[2 2]。两比特系统没问题换到 3 维子系统就必然出错。3. 解压 zip、进 MATLAB 路径、自检工具箱落地三步从压缩包到可调用路径问题比算法问题更常卡住人。量子纠缠工具箱通常是纯.m文件不像官方 Toolbox 那样注册进 MATLAB 的ver体系所以核心就是让函数目录出现在 MATLAB 搜索路径里。3.1 解压与路径配置unzip 与 addpath(genpath(...))常见做法是把压缩包解压到用户路径下再用genpath递归加路径。命令如下zipFile fullfile(downloads, A-MATLAB-toolbox-for-quantum-entanglement.zip); targetDir fullfile(userpath, qentoolbox); unzip(zipFile, targetDir); addpath(genpath(targetDir)); savepath;unzip会保留压缩包内的子目录结构genpath把目标目录下所有子目录都加入path。savepath把当前路径写进pathdef否则下次启动 MATLAB 需要重新addpath。要注意userpath在你的机器上可能是~/Documents/MATLAB最好先disp(userpath)确认一下。这类手动安装的 zip 工具箱与 Robotics Toolbox 的安装方式一致下载解压后加入路径不写注册表不依赖安装向导。也因此它的升级就是重新解压替换整个目录不需要卸载旧版本。3.2 自检确认工具箱核心函数真的在内存里加完路径后不要急着算纠缠先运行一段全量自检funcs {partial_transpose, negativity, concurrence, entropy_vn}; for k 1:numel(funcs) fprintf(%-20s: %s\n, funcs{k}, which(funcs{k})); endwhich返回函数所在路径。如果输出带built-in说明函数名和 MATLAB 内置函数冲突此时要留意你的调用是否真的丢中工具箱。若某个函数返回not found多半是 zip 里文件名拼写不同比如negativity写成negativity2。这时直接查看解压目录里的文件名最有效。dir(fullfile(targetDir, **, *.m))该命令会列出所有.m文件配合which结果对照能快速确认 compressed toolbox 的函数集合和实际名称。3.3 解压报错invalid zip archive 与不完整下载最典型的失败信息是Error using unzip Unable to open file ... invalid zip archive: could not find eocdEOCD 指 zip 格式的 End Of Central Directory 记录位于压缩包末尾。找不到它基本可以判定 zip 文件被截断。这不是工具箱本身的问题而是下载不完整或磁盘写入出错。处理方法有三个现象处理验证unzip 报 EOCD 缺失重新下载并检查浏览器任务列表是否 100% 完成unzip(zipFile, targetDir)不再报错系统压缩软件能解压MATLAB 不能改用 7-Zip 或 Windows 自带“全部解压缩”后再 addpathwhich能找到函数解压后函数名和 README 不一致查看 zip 内目录结构确认不是嵌套子目录dir递归列出.m我见过最多的情况是下载中断后浏览器仍给了.zip后缀文件大小只有几十 KB。此时在 MATLAB 里用dir(zipFile)一看大小就知道。注意不要在未确认unzip成功前就执行savepath。路径里挂了个不存在的目录后续每次启动会反复提示非常影响实验脚本的迭代节奏。4. 用工具箱回归两个经典态Bell 态纠缠熵与 Werner 态负度安装完成后最先算的一定是教科书上有解析解的态。这样做有两个好处验证工具箱数值实现以及给自己建立参数手感。下面用一对量子比特和一个 Werner 态把参数设置讲透。4.1 纯态纠缠熵Bell 态的 log 2对最大纠缠态 (|\Phi^\rangle (|00\rangle|11\rangle)/\sqrt{2})约化密度矩阵是单位矩阵的一半纠缠熵为零点五比特的对数也就是 log 2。psi [1/sqrt(2); 0; 0; 1/sqrt(2)]; rho psi * psi; rhoA partial_trace(rho, 2, [2 2]); ev eig(rhoA); ev ev(ev 1e-12); SvN -ev * log(ev); fprintf(S(rhoA) %.10f\n, SvN);计算重点在于ev ev(ev 1e-12)这行。eig对近零本征值会返回 1e-17 量级的负值直接取对数会得到 NaN。截断阈值不要取eps因为eps约2e-16而密度矩阵数值误差在1e-15上下取1e-12更稳。如果工具箱只提供logm形式的熵函数建议绕过去不用。logm对接近奇异矩阵的误差随维度上升很快高纯态场景下不如本征值对数稳定。4.2 Werner 态的负度扫描看 p 从 0 到 1 的变化Werner 态在量子比特系统中可以写成[ \rho_W(p) p|\psi_-\rangle\langle\psi_-| \frac{1-p}{4}I ]其中 (|\psi_-\rangle) 是反三重态。它的经典结论是 (p 1/3) 时部分转置矩阵才会出现负本征值。用工具箱做扫描p linspace(0, 1, 200); neg zeros(size(p)); for k 1:numel(p) rhoW (1 - p(k)) / 4 * eye(4); singlet [0; 1/sqrt(2); -1/sqrt(2); 0]; rhoW rhoW p(k) * (singlet * singlet); rhoPt partial_transpose(rhoW, 2, [2 2]); ev eig(rhoPt); neg(k) -sum(min(real(ev), 0)); end figure; plot(p, neg, LineWidth, 1.5); xline(1/3, --, p1/3); xlabel(p); ylabel(Negativity);min(real(ev), 0)把所有正本征值压成零负值保留-sum得到的就是负度。这里没有对real(ev)做近似因为 Werner 态部分转置是实对称矩阵特征值实部就是特征值。xline 需要 MATLAB R2018b 之后版本老版本换成line([1/3 1/3], ylim, LineStyle, --)。4.3 三个必须理解的参数dims、sys、容差参数含义常见错误dims列出各子系统维度如[2 2]顺序写反转置对象从 B 变成 Asys指定转置或求迹的子系统编号sys2与sys1结果矩阵不同tol判定负特征值是否有效用 0 而不是1e-10噪声被当真实纠缠特别是dims顺序。[3 2]表示第一个子系统是 qutrit第二个是 qubit。如果写成[2 3]矩阵结构不变但部分转置的实施对象从第一子系统变成第二子系统。对某些态来说关于 A 的部分转置可能有负本征值关于 B 的可能没有这取决于系统定义不是 bug。4.4 把纠缠度量接到 Optimization Toolbox 上当纠缠度量函数返回的是标量就能直接作为优化目标。比如在实验参数里找最大纠缠的驱动时间fun (tau) -entanglement_metric(evolve_state(tau), [2 2]); tau_opt fminunc(fun, 0.5);这里entanglement_metric可以是负度、并发度或对数负度。注意 Optimization Toolbox 的默认算法会求数值梯度所以度量函数必须对参数连续。并发度在两个 Bell 态边界处有尖角容易让fminunc停在奇点附近此时换成负度更稳妥。提示负度对可分离态是平滑过零的而并发度的导数在零处不连续。做参数优化时优先选负度做资源定量时再补并发度。5. 批量纠缠检测给 toolbox 加一层循环和断言实验上经常要一次性验证几百个随机产生的量子态这时交互式逐条敲命令不可行。好的做法是把工具箱函数包进批处理脚本同时在前置检查里加断言避免某个密度矩阵因构造错误拖垮整个循环。n 500; dims [2 2]; neg zeros(n, 1); for j 1:n g randn(4, 1) 1i*randn(4, 1); g g / norm(g); rho g * g; assert(ishermitian(rho), 第 %d 个密度矩阵不是厄米矩阵, j); assert(all(eig(rho) -1e-12), 第 %d 个密度矩阵存在负本征值, j); rhoPt partial_transpose(rho, 2, dims); ev eig(rhoPt); neg(j) -sum(min(real(ev), 0)); end histogram(neg, 40); xlabel(Negativity); ylabel(态数目);生成 Haar 随机纯态时用复高斯向量归一化即可不要直接rand因为实向量会漏掉一半相位空间。为了让结果可复现循环前可以加rng(2024)。当系统维度变大比如 qutrit-qutrit 的 9×9 密度矩阵部分转置后的高维矩阵会很快变大。此时一个实用技巧是把稀疏结构保留到转置阶段rhoS sparse(rho); rhoPt partial_transpose(rhoS, 2, [3 3]); ev eigs(rhoPt, 3, smallestreal, Tolerance, 1e-10);但工具箱内部如果写成reshape(full(rho), ...)稀疏优化就没有意义反而多一次full转换。所以大维度前先读一下partial_transpose的前五行确认它没有无脑full。调试这类脚本时最后加一条与解析结果对照的断言assert(abs(neg_werner(0.8) - 0.4) 1e-10, ... Werner 态 p0.8 的负度应为 0.4);用解析解当锚点比肉眼比较多条曲线快得多。以后换工具箱版本、换 MATLAB 版本都靠这条断言兜底。本文还有配套的精品资源点击获取
返回列表