[ PROMPT_NODE_26224 ]
cosmology
[ SKILL_DOCUMENTATION ]
# 宇宙学计算 (astropy.cosmology)
`astropy.cosmology` 子包提供了基于各种宇宙学模型进行宇宙学计算的工具。
## 使用内置宇宙学模型
基于 WMAP 和 Planck 观测的预加载宇宙学模型:
python
from astropy.cosmology import Planck18, Planck15, Planck13
from astropy.cosmology import WMAP9, WMAP7, WMAP5
from astropy import units as u
# 使用 Planck 2018 宇宙学模型
cosmo = Planck18
# 计算 z=4 处的距离
d = cosmo.luminosity_distance(4)
print(f"z=4 处的光度距离: {d}")
# 宇宙在 z=0 时的年龄
age = cosmo.age(0)
print(f"当前宇宙年龄: {age.to(u.Gyr)}")
## 创建自定义宇宙学模型
### FlatLambdaCDM (最常用)
具有宇宙学常数的平坦宇宙:
python
from astropy.cosmology import FlatLambdaCDM
# 定义宇宙学模型
cosmo = FlatLambdaCDM(
H0=70 * u.km / u.s / u.Mpc, # z=0 时的哈勃常数
Om0=0.3, # z=0 时的物质密度参数
Tcmb0=2.725 * u.K # CMB 温度 (可选)
)
### LambdaCDM (非平坦)
具有宇宙学常数的非平坦宇宙:
python
from astropy.cosmology import LambdaCDM
cosmo = LambdaCDM(
H0=70 * u.km / u.s / u.Mpc,
Om0=0.3,
Ode0=0.7 # 暗能量密度参数
)
### wCDM 和 w0wzCDM
具有状态方程参数的暗能量:
python
from astropy.cosmology import FlatwCDM, w0wzCDM
# 常数 w
cosmo_w = FlatwCDM(H0=70 * u.km/u.s/u.Mpc, Om0=0.3, w0=-0.9)
# 演化的 w(z) = w0 + wz * z
cosmo_wz = w0wzCDM(H0=70 * u.km/u.s/u.Mpc, Om0=0.3, Ode0=0.7,
w0=-1.0, wz=0.1)
## 距离计算
### 共动距离
视线共动距离:
python
d_c = cosmo.comoving_distance(z)
### 光度距离
用于根据观测通量计算光度的距离:
python
d_L = cosmo.luminosity_distance(z)
# 根据视星等计算绝对星等
M = m - 5*np.log10(d_L.to(u.pc).value) + 5
### 角直径距离
用于根据角大小计算物理尺寸的距离:
python
d_A = cosmo.angular_diameter_distance(z)
# 根据角大小计算物理尺寸
theta = 10 * u.arcsec # 角大小
physical_size = d_A * theta.to(u.radian).value
### 横向共动距离
横向共动距离(在平坦宇宙中等于共动距离):
python
d_M = cosmo.comoving_transverse_distance(z)
### 距离模数
python
dm = cosmo.distmod(z)