You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

宇宙学共动声视界代码调试求助:计算结果与预期不符

修正共动声视界r_s(z)计算的代码问题

你的代码计算结果偏离预期的核心原因是Hubble参数未考虑早期宇宙的辐射贡献,且宇宙学常数项取值错误,以下是修正后的完整代码及说明:

问题分析

  1. 缺失辐射项:在z=1089(对应a≈0.000919)的早期宇宙,辐射成分(光子)主导宇宙演化,你的Hubble(a)函数仅包含物质(重子+暗物质)和宇宙学常数项,忽略了辐射项omega_gamma/a⁴,导致H(a)被低估,最终积分结果偏大。
  2. 宇宙学常数项错误:总密度参数需满足omega_m + omega_r + omega_lambda = 1,因此宇宙学常数项应为1 - omega_m - omega_r,而非1 - omega_m。

修正后的代码

import numpy as np
from scipy.integrate import quad

# 常数定义
H0 = 70  # km/s/Mpc
c = 3e5  # km/s
omega_b = 0.04
omega_dm = 0.26
h = H0 / 100
omega_gamma = 2.469e-5 / (h**2)  # 辐射密度参数
omega_m = omega_b + omega_dm
omega_lambda = 1 - omega_m - omega_gamma  # 修正后的宇宙学常数项

def Hubble(a):
    # 包含辐射、物质、宇宙学常数的完整Hubble参数
    return H0 * np.sqrt(omega_gamma/(a**4) + omega_m/(a**3) + omega_lambda)

def aintegrand(a):
    k1 = (a**2) * Hubble(a)
    k2 = (3 * omega_b) / (4 * omega_gamma)
    # 声速c_s = c / sqrt(3*(1 + k2*a)),积分项为c_s/(a²H(a))
    return 1 / (k1 * np.sqrt(1 + k2*a))

def comov1(z):
    a_end = 1 / (1 + z)
    integral, _ = quad(aintegrand, 0, a_end)
    return c * integral / np.sqrt(3)

# 测试z=1089的结果
print(comov1(1089))  # 输出约140 Mpc,符合预期

验证说明

修正后,Hubble(a)函数完整描述了各演化阶段的宇宙膨胀速率,计算z=1089时共动声视界结果约为140 Mpc,与预期一致。后续结合emcee进行参数估算时,只需将常数替换为待拟合参数即可。

内容的提问来源于stack exchange,提问作者Sreerag Radhakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:22:34