继续阅读
暗能量在变,还是引力在变 · 阅读路径
这份指南重跑 Lab 背后的计算:在两段膨胀历史上,取 364 组编织与普朗克质量变化的组合,逐一检验稳定性;稳定的再演化下去,得到距离、 和 。所需的一切都在课程数据包里。冻结下来的数字出自一个独立的 Python 求解器,是离线参考计算,不是 hi_class 的输出。数据包里也有同一批模型的 hi_class 输入文件,键名对照过 hi_class 源码,但本课程没有运行过。
物理推导在四个函数描述修改引力,以及它什么时候稳定。这里的活是按部就班的:装上确切的版本,先跑独立检验,再复现网格,读懂单位,并知道会碰到哪些失败。
解压后有三个文件夹。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 检验拿增长去比一个只对宇宙学常数成立的积分, 的误差来自在 处把增长模式当作纯物质时代来起步。Linder 几项和已发表的增长指数拟合比较,容差是其标称精度的 1.5 倍。稳定性几项复现两条已发表的结论:只有普朗克质量变化时需要 ,单靠暗能量不能穿越负一。只要有一行打印 FAIL,就停下来:安装或脚本和参考版本不一样。
python -I reference/freeze_ac81_grid.py rerun
shasum -a 256 rerun/*.json在参考机器上大约要 20 秒。把哈希和清单里 files 一项对比。在参考机器上第二次运行,六个文件逐字节一致;所有数字都按十位有效数字写出。换了平台或库版本,就改为比较数值。Lab 自己的浏览器求解器可以当参照:它用的是另一种积分方法,却复现了每一个稳定性判定,在稳定区域内 的差别小于 。
每个点列出背景、两个系数、稳定性判定和找到的最负的 。稳定的点还带有六个红移上的数据行。下面是宇宙学常数背景、、 在 的那一行:
{"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}单位要看清。共动距离以 为单位,乘以 才是百万秒差距。Hubble 比是 。 和 都是相对牛顿常数的比值,普朗克质量是 。 是相对量:所有模型从同样的早期幅度出发,归一化到爱因斯坦引力加宇宙学常数今天为 。可以在模型之间比较 ,但除非重新标定幅度,不要拿它去和巡天的绝对值比。
每一行都带着同一背景下爱因斯坦引力的增长。成对比较就是检验本身:距离不变, 对 ,增长多出 6.3%。
整张网格里,宇宙学常数背景的 182 个点中有 140 个稳定,算上纯爱因斯坦引力那一个;DESI 式穿越背景上有 118 个。穿越背景上若没有编织,只有 的普朗克质量变化能活下来。可见在这种参数化里,两个系数各自都能把穿越救回来。
hi_class 是这组基底下的参考玻尔兹曼程序。Zumalacárregui 等 2017,hi_class 模板是为 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五个数依次是 、、、 和初始普朗克质量。标量场密度设成负一,程序就用平直条件反推暗能量密度。穿越背景的模板把膨胀模型换成 、 形式。
背景输出文件里会有标题为 G_eff_smg 和 slip_eff_smg 的两列。按该提交的 hi_class 源码,前者是 的耦合,后者是比值 。Lab 用的量这样换算:
是滑移那一列。对今天的默认模型,这个换算把 Lab 的 、 变成 、。本课程没有运行 hi_class,第一次运行时,请把这两个数当作要检验的预言。
hi_class 是另一种计算,它有三处选择会让数字变动。
模板 ac81-crossing-no-braiding-expected-failure.ini 在穿越背景上把编织和普朗克质量变化都设为零。hi_class 应当停下,给出以下面这段开头、后面填着具体数字的信息。这个结果是从源码推断的,没有实际运行观察到。
Gradient instability for scalar field perturbations with minimum c_s^2=Python 求解器同样判定这个模型不稳定, 附近 。还有两种失败要认得。在 Lab 里,若 高于约 , 时暗能量超过 1%,物质时代的起步条件就不对了;Lab 会给出提示,网格也避开了这个区域。在网格里,不稳定的点没有数据行,这是故意的:失稳时 可能发散,那里给出的数字只会误导。
不要为了让模型跑通而放宽 hi_class 的安全余量。靠跳过失稳检验才跑通的结果,算出来的不是有效的宇宙学。DESI 分析把不稳定区域从后验里切掉,也是这个道理。Ishak 等 2024,§4.2.1
暗能量在变,还是引力在变 · 阅读路径