---
title: "把波函数变成一串小矩阵"
description: "一个格点一个格点地重复 Schmidt 分解，每个振幅都变成一串小矩阵的乘积。限制矩阵大小后，存储量随链长线性增长，而不是指数增长。"
canonical_url: "https://sandboxphysics.com/zh/stories/tensor-networks/matrix-product-states/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/tensor-networks/matrix-product-states/"
last_modified: "2026-10-29"
---

[张量网络 · 边学边做实验](https://sandboxphysics.com/zh/stories/tensor-networks/)

L2 · 第 3 章

# 把波函数变成一串小矩阵

先用一次奇异值分解把第一个自旋拆出来，左边的因子留作一个小矩阵，剩下的往后传。每个自旋重复一遍。最后每个振幅都是“每个自旋一个矩阵”的乘积，用哪个矩阵由该自旋朝上还是朝下决定。矩阵的大小就是每处切口的 Schmidt 项数，所以纠缠少的链只需要小矩阵。

Sandbox Physics · 2026-10-29

这一章

[查看八章课程](https://sandboxphysics.com/zh/stories/tensor-networks/)

开始前

读过第二章：把振幅折成矩阵、奇异值分解和 Schmidt 权重；会做矩阵乘法。

## 一次拆下一个自旋

先把振幅排成两行的矩阵：行由第一个自旋标记，列由其余自旋标记。做一次奇异值分解，把左因子（一个 2 乘 2 矩阵）留作第一个自旋的张量。把奇异值乘进右因子，再把它重排一下，让第二个自旋也并到行里。

再分解一次，新的左因子留作第二个自旋的张量，其余继续往后传。拆完最后一个自旋，每个振幅都读作：行向量乘一串矩阵再乘列向量，每个自旋一个矩阵，按它朝上还是朝下挑选。Schollwöck 综述第 4.1.3 节就是这样一步步搭出这种分解的。

$$
\psi_{s_1s_2\cdots s_L}=A^{[1]s_1}A^{[2]s_2}\cdots A^{[L]s_L},\qquad A^{[j]s_j}\in\mathbb C^{\chi_{j-1}\times\chi_j},\quad \chi_0=\chi_L=1
$$

## 为什么这些矩阵保持正交归一

每个留下来的左因子都来自奇异值分解，所以它的各列彼此正交归一。对该自旋的两个取值求和，张量的共轭转置乘它自己就是单位矩阵。Schollwöck 把这样的张量叫作左正交化的。

这一点很实用。把切口左边的张量都左正交化，这个切口上的各列就成了左段的一组正交归一基。这时切口处的奇异值正是整个态的 Schmidt 系数。于是任何一处的纠缠熵和截断误差都能就地读出，不必碰链的其余部分。

$$
\sum_{s_j}\big(A^{[j]s_j}\big)^{\dagger}A^{[j]s_j}=\mathbb 1_{\chi_j}
$$

完整例题

## 数一数：12 个自旋要存多少个数

不截断时，一处切口的 Schmidt 项数不会超过较短一侧的构型数。12 个自旋的链，各条连接最大可以依次是 2、4、8、16、32、64，再对称地降回来。数一数元素，一般量子态的精确矩阵乘积态要存 10920 个数，是原振幅表的两倍多。光换格式省不了什么，省下来的全靠截断连接。

现在把每条连接都限制在 4，这是压缩实验的默认值。连接大小变成 1、2、4，接着 8 条连接都是 4，最后 4、2、1。每个张量含两个矩阵（自旋上、下各一个），大小是“左连接乘右连接”。加起来是 296 个数，原来要 4096 个。实验对临界链报告的存储数就是 296。

$$
N=\sum_{j=1}^{12}2\,\chi_{j-1}\chi_j=2\,(1\cdot2+2\cdot4+8\cdot4\cdot4+4\cdot2+2\cdot1)=296
$$

## Vidal 的写法把权重摆在明处

Vidal 在 2004 年换了一种写法：在每两个格点张量之间，单独存下这处切口的 Schmidt 系数向量。这样，一条自旋链的态所需的参数个数，只随“链长乘最大连接大小的平方”增长，而不是指数增长。

这种写法让截断一目了然：每处切口的系数都摆在外面，要把一条连接截小，就丢掉它最小的几个系数。第六章用这种写法做时间演化。

$$
\psi_{s_1\cdots s_L}=\Gamma^{[1]s_1}\Lambda^{[1]}\Gamma^{[2]s_2}\Lambda^{[2]}\cdots\Lambda^{[L-1]}\Gamma^{[L]s_L},\qquad \Lambda^{[j]}=\mathrm{diag}\big(s^{[j]}_1,\dots,s^{[j]}_{\chi_j}\big)
$$

带着问题动手

## 先预测，再改变，最后解释

1. 在压缩实验里，先别动滑块，预测临界链在键维数为 8 时要存多少个数。
2. 把滑块拉到 16，再一直拉到 64。
3. 键维数 16 时实验存 2680 个数，误差已到舍入误差的量级；到 64 时存的数反而比完整振幅表还多。用每处切口 Schmidt 权重的大小解释这两件事。

[剪断自旋链的键，看误差怎样变化](https://sandboxphysics.com/zh/labs/entanglement-compression/)

这些实验模拟开放边界的自旋 1/2 链，能量以耦合常数为单位，时间以约化普朗克常数除以耦合常数为单位。每个实验在模型说明里写明模型和适用范围，并可导出读数背后的数据。

## 试着自己解释

### 1. 12 个自旋的精确矩阵乘积态，最大的连接需要多大？在哪一处切口？

展开答案与解释

在正中间。两边各有 6 个自旋、64 种构型，这条连接最多需要 64 项。

$$
\chi_{\max}=2^{L/2}=64
$$

### 2. 12 个自旋、每条连接至多 8 项，要存多少个数？

展开答案与解释

连接大小依次是 1、2、4、8，中间 6 条都是 8，再到 8、4、2、1。把相邻连接大小之积乘 2 再求和，得 936。

$$
N=2\,(2+8+32+6\cdot64+32+8+2)=936
$$

### 3. 上限固定为 4 时，在长链中间每多一个自旋，要多存多少个数？

展开答案与解释

多一个张量，含两个 4 乘 4 矩阵，即 32 个数。存储量随链长成正比增长。

## 可以放在旁边读的来源

1. [U. Schollwöck, The density-matrix renormalization group in the age of matrix product states, Annals of Physics 326, 96 (2011)](https://arxiv.org/abs/1008.3477)

   这一领域的标准综述。第 3 节用面积律解释 DMRG 为什么在一维好用；第 4.1 节用一次次奇异值分解搭出矩阵乘积态，并在式 (58) 给出截断误差的上界；第 6 节把基态搜索写成变分扫描；第 7 节讲时间演化和它的极限。

2. [G. Vidal, Efficient simulation of one-dimensional quantum many-body systems, Physical Review Letters 93, 040502 (2004)](https://arxiv.org/abs/quant-ph/0310089)

   提出时间演化块消减（TEBD）：把哈密顿量拆成两格点门，逐个作用，每作用一次只保留最大的 Schmidt 系数。

[上一章 一次矩阵分解，量出纠缠](https://sandboxphysics.com/zh/stories/tensor-networks/schmidt-decomposition/) [下一章 剪断弱通道要付出多少误差](https://sandboxphysics.com/zh/stories/tensor-networks/truncation-and-local-errors/)
