介绍
此页面是Astropy的"宇宙计算"页面的日语翻译,但是我在某些地方添加了一些安排。
我们将向您展示如何使用Astropy模块执行宇宙学计算。
安装
由于它已在PyPI上注册,因此
1 | pip install astropy |
如果已安装Anaconda,请使用
或
安装
1 | conda install -c astropy sphinx-astropy |
您可以使用
进行安装(对于Anaconda,可能已经安装了)。
第一次天体宇宙学
哈勃常数
通过执行以下操作,可以找到从WMAP9yr估计的redshift z = 0处的哈勃常数。
1 2 3 | >>> from astropy.cosmology import WMAP9 >>> WMAP9.H(0) <Quantity 69.32 km / (Mpc s)> |
正确的长度
在
z = 3时1毫秒angular的适当长度以kpc单位计算。
1 2 | >>> WMAP9.kpc_proper_per_arcmin(3) <Quantity 472.97709236 kpc / arcmin> |
移动距离
通过传递诸如
列表的序列,您可以立即找到移动距离。以下内容可找到直到z = 0、1,...,9的共移动距离。
1 2 3 4 | >>> WMAP9.comoving_distance(range(10)) <Quantity [ 0. , 3363.0706321 , 5291.73040581, 6503.90188771, 7344.44470431, 7968.80246409, 8455.45279875, 8848.30522052, 9173.9669946 , 9449.58596714] Mpc> |
Flat Lambda CDM模型和中微子物种的有效数量
您可以找到平面Λ-CDM模型中的中微子物种的有效数量。在此,指定哈勃常数H0,物质的密度参数Om0和CMB温度Tcmb0。
1 2 3 4 | >>> from astropy.cosmology import FlatLambdaCDM >>> cosmo = FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=2.725) >>> cosmo.Neff 3.04 |
另外,如果此时打印cosmo变量,则
1 2 | >>> print cosmo FlatLambdaCDM(H0=70 km / (Mpc s), Om0=0.3, Tcmb0=2.725 K, Neff=3.04, m_nu=[0. 0. 0.] eV, Ob0=None) |
您可以看到它是一个名为
的对象。
.unit方法
1 2 3 4 | >>> from astropy.cosmology import WMAP9 >>> H0 = WMAP9.H(0) >>> H0.value, H0.unit (69.32, Unit("km / (Mpc s)")) |
使用
,可以以WMAP 9yr及其单位显示哈勃常数的值。
让我们使用astropy.cosmology
导入astropy.units为u
1 2 3 | >>> from astropy.cosmology import FlatLambdaCDM >>> import astropy.units as u >>> cosmo = FlatLambdaCDM(H0=70 * u.km / u.s / u.Mpc, Tcmb0=2.725 * u.K, Om0=0.3) |
astropy.cosmology文档建议如上所述指定单位,例如
光度距离
发光距离可以如下计算。以下是到z = 4的距离。
1 2 | >>> cosmo.luminosity_distance(4) <Quantity 35842.353288 Mpc> |
宇宙时代
您可以找到宇宙的年龄,如下所示。以下是在z = 0处找到宇宙年龄的示例。
1 2 | >>> cosmo.age(0) <Quantity 13.46170148 Gyr> |
也可以通过传递类似于列表的序列并使用.value方法来获得列表形式的宇宙年龄,如下所示。
1 2 3 | >>> cosmo.age(range(10)).value array([13.46170148, 5.74698037, 3.22268178, 2.10909267, 1.51293349, 1.15196553, 0.91440079, 0.74841291, 0.62710773, 0.53530494]) |
FLRW
级
FLRW类描述了均匀的各向同性宇宙学(Friedmann-Lemaitre-Robertson-Walker宇宙学)。例如,可以计算FlatLambdaCDM,LambdaCDM,wCDM等。
根据WMAP 7yr观测值
计算宇宙学参数
astropy.cosmology具有各种宇宙学参数。以下是从WMAP 7yr结果计算z = 0时的临界密度的方法。
1 2 3 | >>> from astropy.cosmology import WMAP7 >>> WMAP7.critical_density(0) <Quantity 9.30966846e-30 g / cm3> |
下面,计算材料密度参数和暗能量密度参数。
1 2 | >>> WMAP7.Om([0, 1, 2]) array([0.272 , 0.74898523, 0.90905237]) |
1 2 | >>> WMAP7.Ode([0, 1, 2]) array([0.72791572, 0.25055061, 0.0901026 ]) |
WMAP 7yr考虑了光子和中微子,因此将它们加在一起不会得到1。
重子密度计
如下所示,也可以将重子密度参数
1 2 3 | >>> from astropy.cosmology import FlatLambdaCDM >>> FlatLambdaCDM(H0=70, Om0=0.3, Ob0=0.05) FlatLambdaCDM(H0=70 km / (Mpc s), Om0=0.3, Tcmb0=0 K, Neff=3.04, m_nu=None, Ob0=0.05) |
在这种情况下,我们只能从此类获得z = 0处的暗物质密度参数。如果要查看每个红移的变化,则需要使用暗物质密度参数
1 2 3 4 5 6 7 8 | >>> from astropy.cosmology import FlatLambdaCDM >>> cosmo = FlatLambdaCDM(H0=70, Om0=0.3) >>> cosmo.Odm(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/anaconda3/lib/python3.7/site-packages/astropy/cosmology/core.py", line 574, in Odm raise ValueError("Baryonic density not set for this cosmology, " ValueError: Baryonic density not set for this cosmology, unclear meaning of dark matter density |
名称变量
宇宙学实例具有一个名称变量,您可以在其中编写宇宙学模型。
1 2 3 4 | >>> from astropy.cosmology import FlatwCDM >>> cosmo = FlatwCDM(name='SNLS3+WMAP7', H0=71.58, Om0=0.262, w0=-1.016) >>> cosmo FlatwCDM(name="SNLS3+WMAP7", H0=71.6 km / (Mpc s), Om0=0.262, w0=-1.02, Tcmb0=0 K, Neff=3.04, m_nu=None, Ob0=None) |
支持暗能量模型
上方name变量部分中介绍的脚本是暗能量模型计算的示例。还支持其他不同的暗能量模型。有关详细信息,请参见指定暗能量模型。
宇宙学参数更改
宇宙学参数是不可变的(变量)。例如,假设您只想更改WMAP 9yr结果中z = 0处的材料密度参数
1 2 | >>> from astropy.cosmology import WMAP9 >>> newcosmo = WMAP9.clone(name='WMAP9 modified', Om0=0.3141) |
让我们以
的形式创建一个newcosmo实例,并检查原始WMAP9和newcosmo中的Hubble参数,材料密度参数和暗能量密度参数。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> WMAP9.H0 <Quantity 69.32 km / (Mpc s)> >>> newcosmo.H0 <Quantity 69.32 km / (Mpc s)> >>> WMAP9.Om0 0.2865 >>> newcosmo.Om0 0.3141 >>> WMAP9.Ode0 0.7134130719051658 >>> newcosmo.Ode0 0.6858130719051657 |
z_at_value
通过使用宇宙模型的.age方法并将年龄作为
1 2 3 | >>> from astropy.cosmology import Planck13, z_at_value >>> z_at_value(Planck13.age, 2*u.Gyr) 3.198120965652982 |
尝试显示Planck13.age。
1 2 | >>> Planck13.age <bound method FLRW.age of FlatLambdaCDM(name="Planck13", H0=67.8 km / (Mpc s), Om0=0.307, Tcmb0=2.725 K, Neff=3.05, m_nu=[0. 0. 0.06] eV, Ob0=0.0483)> |
宇宙模型已纳入
内置在
astropy.cosmology中的宇宙模型可以在
<表格>
tr>
header>
<身体>
tr>
tr>
tr>
tr>
tr>
tbody>
table>
模型的详细信息可以在
1 2 3 | >>> from astropy.cosmology import WMAP7 >>> WMAP7.__doc__ 'WMAP7 instance of FlatLambdaCDM cosmology\n\n(from Komatsu et al. 2011, ApJS, 192, 18, doi: 10.1088/0067-0049/192/2/18. Table 1 (WMAP + BAO + H0 ML).)' |
暗能量模型
参见
链接
光子和中微子
宇宙学类可以计算光子的能量密度和中微子的能量密度。默认假设为无质量。
这些计算可以通过将CMB温度
z = 0,有效中微子数量
以下是通过WMAP 7yr获得的在z = 0时的光子密度参数
1 2 3 4 5 | >>> from astropy.cosmology import WMAP7 >>> WMAP7.Ogamma0 4.985868989189756e-05 >>> WMAP7.Onu0 3.442275090310745e-05 |
通过将序列传递给
1 2 3 4 5 6 7 | >>> WMAP7.Ogamma(range(10)) array([4.98586899e-05, 2.74583989e-04, 4.99898824e-04, 7.02950869e-04, 8.95950291e-04, 1.08437305e-03, 1.27046001e-03, 1.45521852e-03, 1.63914762e-03, 1.82251551e-03]) >>> z = [0, 1, 2] >>> WMAP7.Onu(z) array([3.44227509e-05, 1.89574501e-04, 3.45133270e-04]) |
如果要从宇宙学模型中排除光子和中微子,可以使用
1 2 3 4 5 6 7 | >>> from astropy.cosmology import FlatLambdaCDM >>> import astropy.units as u >>> cos = FlatLambdaCDM(70.4*u.km/u.s/u.Mpc, 0.272, Tcmb0=0.0*u.K) >>> cos.Ogamma0 0.0 >>> cos.Onu0 0.0 |
如果要构建仅忽略中微子的模型,请使用
1 2 3 4 5 6 | >>> cos = FlatLambdaCDM(70.4, 0.272, Tcmb0=2.725, Neff=0) >>> z = [0, 1, 2] >>> cos.Ogamma(z) array([4.98586899e-05, 2.74632798e-04, 5.00069284e-04]) >>> cos.Onu(z) array([0., 0., 0.]) |
假设
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> from astropy.cosmology import FlatLambdaCDM >>> import astropy.units as u >>> H0 = 70.4 * u.km / u.s / u.Mpc >>> m_nu = 0 * u.eV >>> cos = FlatLambdaCDM(H0, 0.272, Tcmb0=2.725, m_nu=m_nu) >>> cos.has_massive_nu False >>> cos.m_nu <Quantity [0., 0., 0.] eV> >>> m_nu = [0.0, 0.05, 0.1] * u.eV >>> cos = FlatLambdaCDM(H0, 0.272, Tcmb0=2.725, m_nu=m_nu) >>> cos.has_massive_nu True >>> cos.m_nu <Quantity [0. , 0.05, 0.1 ] eV> >>> z = [0, 1, 15] >>> cos.Onu(z) array([0.00327 , 0.00896814, 0.01257904]) >>> cos.Onu(1) * cos.critical_density(1) <Quantity 2.44437837e-31 g / cm3> |
并非全部,但本文到此结束。