---
title: "复算膨胀与增长网格"
description: "用固定版本的 Python 重跑 364 个模型的稳定性与增长网格，对照独立极限检验，并准备 hi_class 复算。"
canonical_url: "https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/recompute-a-background-growth-grid/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/dark-energy-or-modified-gravity/recompute-a-background-growth-grid/"
last_modified: "2026-11-12"
---

[暗能量在变，还是引力在变](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/)

# 复算膨胀与增长网格

Sandbox Physics · 2026-11-12

这份指南重跑 Lab 背后的计算：在两段膨胀历史上，取 364 组编织与普朗克质量变化的组合，逐一检验稳定性；稳定的再演化下去，得到距离、$f\sigma_8$ 和 $E_G$。所需的一切都在[课程数据包](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/materials/ac81-consistency-grid.zip)里。冻结下来的数字出自一个独立的 Python 求解器，是离线参考计算，不是 hi\_class 的输出。数据包里也有同一批模型的 hi\_class 输入文件，键名对照过 hi\_class 源码，但本课程没有运行过。

物理推导在[四个函数描述修改引力，以及它什么时候稳定](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/modified-gravity-in-four-functions-and-stability/)。这里的活是按部就班的：装上确切的版本，先跑独立检验，再复现网格，读懂单位，并知道会碰到哪些失败。

## 数据包里有什么

解压后有三个文件夹。reference 里是三个脚本：模型本身、独立检验脚本、冻结网格的脚本。templates 里是三个 hi\_class 输入文件。reference-data 里是七个 JSON 文件：网格、Lab 的六个预设、合成记录、一致性检验、已记录的失败情形、独立检验结果，以及记有版本、设置和 SHA-256 哈希的运行清单。

合成记录在文件里明确标为合成。它由选定的模型加固定随机种子生成。数据包里没有任何观测数据。

## 搭一样的环境

冻结文件用的是 Python 3.9.6、NumPy 2.0.2 和 SciPy 1.13.1，模型只依赖这些和标准库。建一个干净的虚拟环境，免得机器上别的东西被导入进来。

```
python3 -m venv ac81-env
. ac81-env/bin/activate
python -m pip install numpy==2.0.2 scipy==1.13.1
unzip ac81-consistency-grid.zip -d ac81
cd ac81
```

每个脚本都用隔离模式运行，它会忽略环境变量和用户目录下的包。脚本自己会把所在文件夹显式加进导入路径。

## 先跑独立检验

相信网格之前，先确认求解器能复现那些不是它自己算出来的结果。

```
python -I reference/check_ac81_limits.py checks
```

在参考机器上，十三项检验都打印 PASS，脚本以状态零退出。挑几行带相对误差的：

```
PASS einstein-de-sitter-distance-z1
PASS lcdm-heath-integral-a1.0 1.629434869254709e-05
PASS linder-2005-growth-index-sugra-like 0.0017487692157125423
PASS only-run-stability-cM-0.1
PASS phantom-no-go-w0-0.752-wa-0.86
```

只有物质的几项和解析解比较。Heath 检验拿增长去比一个只对宇宙学常数成立的积分，$1.6\times10^{-5}$ 的误差来自在 $z=30$ 处把增长模式当作纯物质时代来起步。Linder 几项和已发表的增长指数拟合比较，容差是其标称精度的 1.5 倍。稳定性几项复现两条已发表的结论：只有普朗克质量变化时需要 $c_M\ge0$，单靠暗能量不能穿越负一。只要有一行打印 FAIL，就停下来：安装或脚本和参考版本不一样。

## 重新冻结网格

```
python -I reference/freeze_ac81_grid.py rerun
shasum -a 256 rerun/*.json
```

在参考机器上大约要 20 秒。把哈希和清单里 files 一项对比。在参考机器上第二次运行，六个文件逐字节一致；所有数字都按十位有效数字写出。换了平台或库版本，就改为比较数值。Lab 自己的浏览器求解器可以当参照：它用的是另一种积分方法，却复现了每一个稳定性判定，在稳定区域内 $f\sigma_8$ 的差别小于 $3\times10^{-5}$。

## 读一个网格点

每个点列出背景、两个系数、稳定性判定和找到的最负的 $Dc_s^2$。稳定的点还带有六个红移上的数据行。下面是宇宙学常数背景、$c_B=1.0$、$c_M=0.5$ 在 $z=0.5$ 的那一行：

```
{"z": 0.5, "comoving_distance": 0.4394663128, "comoving_distance_ratio_to_lcdm": 1.0,
 "hubble_ratio": 1.317668395, "mu": 1.173166224, "sigma": 1.109639004, "m2": 1.088071388,
 "growth_rate": 0.7929344984, "sigma8": 0.633617168, "f_sigma8": 0.5024169113,
 "f_sigma8_gr_same_background": 0.4724286158, "e_g": 0.4338165283,
 "e_g_gr_same_background": 0.4094327473}
```

单位要看清。共动距离以 $c/H_0$ 为单位，乘以 $2997.92458/h$ 才是百万秒差距。Hubble 比是 $H/H_0$。$\mu$ 和 $\Sigma$ 都是相对牛顿常数的比值，普朗克质量是 $M_*^2/M_{\mathrm{Pl}}^2$。$\sigma_8$ 是相对量：所有模型从同样的早期幅度出发，归一化到爱因斯坦引力加宇宙学常数今天为 $0.81$。可以在模型之间比较 $f\sigma_8$，但除非重新标定幅度，不要拿它去和巡天的绝对值比。

每一行都带着同一背景下爱因斯坦引力的增长。成对比较就是检验本身：距离不变，$0.5024$ 对 $0.4724$，增长多出 6.3%。

整张网格里，宇宙学常数背景的 182 个点中有 140 个稳定，算上纯爱因斯坦引力那一个；DESI 式穿越背景上有 118 个。穿越背景上若没有编织，只有 $c_M\ge1$ 的普朗克质量变化能活下来。可见在这种参数化里，两个系数各自都能把穿越救回来。

## 用 hi\_class 复算

hi\_class 是这组基底下的参考玻尔兹曼程序。[Zumalacárregui 等 2017，hi\_class](https://arxiv.org/abs/1605.06102) 模板是为 hi\_class v3.4.0.1 写的，git 提交为 b425aef17d566429e8cf189ed47d81f5fa84594e，键名取自该版本的参数文件。编译 C 程序并运行一个模板：

```
git clone https://github.com/miguelzuma/hi_class_public.git hi_class
cd hi_class
git checkout b425aef17d566429e8cf189ed47d81f5fa84594e
make class
mkdir -p output
./class ../ac81/templates/ac81-lcdm-background-braided.ini
```

仓库的 README 也指向 hiclass-code 组织下的同一份代码，并提供 Python 接口。模板里的关键几行是：

```
Omega_Lambda = 0
Omega_fld = 0
Omega_smg = -1
gravity_model = propto_omega
parameters_smg = 0.1, 0.9, 0.6, 0., 1.
expansion_model = lcdm
skip_stability_tests_smg = no
method_qs_smg = fully_dynamic
```

五个数依次是 $c_K$、$c_B$、$c_M$、$c_T$ 和初始普朗克质量。标量场密度设成负一，程序就用平直条件反推暗能量密度。穿越背景的模板把膨胀模型换成 $w_0$、$w_a$ 形式。

背景输出文件里会有标题为 G\_eff\_smg 和 slip\_eff\_smg 的两列。按该提交的 hi\_class 源码，前者是 $\Phi$ 的耦合，后者是比值 $\Phi/\Psi$。Lab 用的量这样换算：

$$
\mu=\frac{G_{\mathrm{eff}}}{\eta},\qquad \Sigma=\frac{G_{\mathrm{eff}}+\mu}{2},
$$

$\eta$ 是滑移那一列。对今天的默认模型，这个换算把 Lab 的 $\mu=1.352$、$\Sigma=1.192$ 变成 $G_{\mathrm{eff}}=1.031$、$\eta=0.763$。本课程没有运行 hi\_class，第一次运行时，请把这两个数当作要检验的预言。

## 应该预料到的差别

hi\_class 是另一种计算，它有三处选择会让数字变动。

1. 它包含辐射和中微子，从辐射时代深处开始算。Python 求解器略去辐射，增长从 $z=30$ 开始。模板用的物理物质密度相同，所以两个背景只差一个很小的辐射项。由此带来的增长差别有多大，本课程没有测。
2. 它的全动力学扰动不假设准静态极限。$Dc_s^2$ 接近零时，声视界很大，准静态的 $\mu$ 靠不住。失败情形文件里列了几个只有普朗克质量变化的例子，今天的 $Dc_s^2$ 从 0.087 降到 0.0017。
3. 它从最早演化的时刻起就检验稳定性，Python 求解器只检验 $z=30$ 到今天。最负的 $Dc_s^2$ 落在零附近的点，不论在哪一端，判定都可能翻转。

## 报错与预期中的失败

模板 ac81-crossing-no-braiding-expected-failure.ini 在穿越背景上把编织和普朗克质量变化都设为零。hi\_class 应当停下，给出以下面这段开头、后面填着具体数字的信息。这个结果是从源码推断的，没有实际运行观察到。

```
Gradient instability for scalar field perturbations with minimum c_s^2=
```

Python 求解器同样判定这个模型不稳定，$z=0.94$ 附近 $Dc_s^2=-0.121$。还有两种失败要认得。在 Lab 里，若 $w_0+w_a$ 高于约 $-0.52$，$z=30$ 时暗能量超过 1%，物质时代的起步条件就不对了；Lab 会给出提示，网格也避开了这个区域。在网格里，不稳定的点没有数据行，这是故意的：失稳时 $\mu$ 可能发散，那里给出的数字只会误导。

不要为了让模型跑通而放宽 hi\_class 的安全余量。靠跳过失稳检验才跑通的结果，算出来的不是有效的宇宙学。DESI 分析把不稳定区域从后验里切掉，也是这个道理。[Ishak 等 2024，§4.2.1](https://arxiv.org/abs/2411.12026v3)

## 核对清单

1. Python、NumPy、SciPy 版本一致，脚本用隔离模式运行。
2. 十三项独立检验全部通过，再用别的东西。
3. 哈希与清单一致；换了平台时，数值在容差内一致。
4. 距离已从 $c/H_0$ 换算；$\sigma_8$ 当相对量看。
5. 每个模型都和它自己背景上的爱因斯坦引力比较，而不是和宇宙学常数模型比较。
6. hi\_class 在指定提交上运行，稳定性检验打开；$\mu$ 和 $\Sigma$ 由有效耦合和滑移换算出来。
7. 稳定边界附近的分歧，先当作方法差异，再考虑是不是物理。

## 来源

1. [Zumalacárregui 等 2017，hi\_class](https://arxiv.org/abs/1605.06102)
2. [Ishak 等 2024，§4.2.1](https://arxiv.org/abs/2411.12026v3)

把一个网格点和 Lab 里相同编织与变化率的模型对照。 [打开 Lab](https://sandboxphysics.com/zh/labs/dark-energy-modified-gravity/)

## 继续阅读

暗能量在变，还是引力在变 · 阅读路径

### 从距离、增长、透镜到稳定性

1. [文章 **同样的膨胀，能配上不同的引力吗**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/same-expansion-different-gravity/)
2. [文章 **距离怎样记下宇宙的膨胀**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/how-distances-record-expansion/)
3. [文章 **增长和透镜怎样感受引力**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/how-growth-and-lensing-feel-gravity/)
4. [文章 **四个函数描述修改引力，以及它什么时候稳定**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/modified-gravity-in-four-functions-and-stability/)
5. [当前页面 **复算膨胀与增长网格**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/recompute-a-background-growth-grid/)
6. [文章 **读 DESI 2024 修改引力论文**](https://sandboxphysics.com/zh/stories/dark-energy-or-modified-gravity/reading-desi-2024-modified-gravity/)
