---
title: "Расстояния и горизонты"
topic: distances-horizons
order: 3
description: "Сопутствующее расстояние и расстояние поперечного движения; фотометрическое и угловое расстояния, соотношение Этерингтона, максимум углового расстояния; горизонт частиц, горизонт событий и хаббловская сфера в ΛCDM; пространственно-временная диаграмма; какая часть видимой Вселенной ещё достижима"
---
В расширяющейся Вселенной нет единственного «расстояния до галактики»:
светимость, угловой размер и время прохождения света связаны с
расстоянием по-разному, и для далёких объектов разница достигает
порядков величины. Кроме того, у ΛCDM есть горизонты: часть Вселенной
мы не видим никогда, а с частью, которую видим, уже не сможем
обменяться сигналом. Эти горизонты определяют, что в принципе
наблюдаемо и достижимо из нашей точки, — исходные данные для тем о
далёком будущем.
## Сопутствующее расстояние
Свет распространяется по радиальной изотропной геодезической метрики
ФЛРУ ($c = 1$): $\dd t = a\,\dd\chi$, где $\chi$ — сопутствующая
радиальная координата в форме
$\dd s^2 = \dd t^2 - a^2[\dd\chi^2 + S_\kappa^2(\chi)\dd\Omega^2]$
(тема «Метрика Фридмана–Леметра–Робертсона–Уокера»).
::: {#def-comoving-distance}
**Сопутствующее расстояние** до источника с красным смещением $z$ —
$$
\chi(z) = \int_{t_e}^{t_0}\frac{\dd t}{a} = \int_0^z\frac{\dd z'}{H(z')} ,
$$
равное собственному расстоянию до него *сегодня* (при $a_0 = 1$).
**Расстояние поперечного движения** $d_M = S_\kappa(\chi)$:
$\sin(\chi\sqrt{\kappa})/\sqrt{\kappa}$, $\chi$ или $\operatorname{sh}(\chi\sqrt{|\kappa|})/\sqrt{|\kappa|}$
при $\kappa > 0$, $= 0$, $< 0$.
:::
Второе равенство следует из $\dd z = -\dd a/a^2$ и $\dd t = \dd a/(aH)$.
Посчитаем его для опорной космологии `Planck18` (плоская, $d_M = \chi$),
используя функцию $E(z) = H/H_0$ из astropy (она учитывает массивные
нейтрино), и сравним с готовой функцией astropy:
```{python}
import math
import astropy.constants as const
import astropy.units as u
import matplotlib.pyplot as plt
import numpy as np
import sympy as sp
from astropy.cosmology import Planck18
from scipy.integrate import cumulative_trapezoid, quad
from scipy.optimize import brentq, minimize_scalar
D_H = (const.c / Planck18.H0).to(u.Gpc).value # хаббловское расстояние c/H₀, Гпк
GLY_PER_GPC = (1 * u.Gpc).to(u.lyr).value / 1e9 # млрд св. лет в Гпк
def E(a):
"""H(a)/H₀ модели Planck18."""
return Planck18.efunc(1 / a - 1)
def chi(a1, a2=1.0):
"""Сопутствующее расстояние, пройденное светом от a1 до a2, Гпк."""
return D_H * quad(lambda a: 1 / (a**2 * E(a)), a1, a2, epsrel=1e-10, limit=200)[0]
for z in (0.1, 1, 3, 1100):
own, ref = chi(1 / (1 + z)), Planck18.comoving_distance(z).to(u.Gpc).value
print(f"z = {z:6}: χ = {own:7.4f} Гпк (astropy: {ref:7.4f})")
```
## Фотометрическое и угловое расстояния
Измеряют не $\chi$, а поток и угловой размер.
::: {#def-dl-da}
**Фотометрическое расстояние** $d_L$ определяется так, чтобы поток
от источника светимости $L$ был $F = L/(4\pi d_L^2)$. **Угловое
расстояние** $d_A$ — так, чтобы объект поперечного размера $\ell$ имел
угловой размер $\theta = \ell/d_A$.
:::
Свет, испущенный в момент $t_e$, сегодня распределён по сфере площади
$4\pi d_M^2$. Каждый фотон потерял энергию в $(1+z)$ раз, а темп их
прихода замедлен в $(1+z)$ раз (космологическое замедление времени).
Поэтому $F = L/[4\pi d_M^2(1+z)^2]$:
$$
d_L = (1 + z)\,d_M .
$$
Угловой размер: концы объекта в момент испускания находились на
собственном расстоянии $\ell = a(t_e)\,d_M\,\theta$, так что
$$
d_A = \frac{d_M}{1 + z}, \qquad d_L = (1 + z)^2 d_A .
$$
Последнее — **соотношение Этерингтона** (1933); оно верно в любой
метрической теории, где фотоны распространяются по изотропным геодезическим и
сохраняется их число [У]{.status}, и его проверяют по сверхновым и
БАО как тест на поглощение света или «экзотику» [У]{.status}.
```{python}
zz = np.array([0.5, 1.0, 1.6, 3.0, 10.0])
d_L = Planck18.luminosity_distance(zz).to(u.Gpc).value
d_A = Planck18.angular_diameter_distance(zz).to(u.Gpc).value
print("Этерингтон, max |d_L/((1+z)² d_A) − 1| =", f"{np.max(np.abs(d_L / ((1 + zz)**2 * d_A) - 1)):.1e}")
for z, dl, da in zip(zz, d_L, d_A):
print(f"z = {z:4}: d_L = {dl:6.2f} Гпк, χ = {dl / (1 + z):5.2f}, d_A = {da:5.3f} Гпк")
res = minimize_scalar(lambda z: -Planck18.angular_diameter_distance(z).value,
bounds=(0.5, 4), method="bounded")
z_dA_max, dA_max = res.x, -res.fun / 1e3
print(f"максимум d_A: z = {z_dA_max:.2f}, d_A = {dA_max:.2f} Гпк")
```
Угловое расстояние **не монотонно**: оно максимально при
$z \approx 1{,}6$, а дальше убывает — объект фиксированного размера
на $z = 5$ виден под *бо́льшим* углом, чем на $z = 1{,}6$. Причина: свет
от далёкого объекта испущен, когда Вселенная была меньше и объект
занимал бо́льшую долю «неба» вокруг нас [У]{.status}. Фотометрическое
расстояние, напротив, растёт быстрее $\chi$: далёкие источники тусклее,
чем в евклидовом пространстве.
## Горизонты
::: {#def-horizons}
**Горизонт частиц** в момент $t$ — сопутствующее расстояние, которое
свет успел пройти с начала расширения:
$\chi_p(t) = \int_0^t \dd t'/a = \eta(t)$ (конформное время). Это граница
наблюдаемой Вселенной: более далёкие частицы ещё не могли быть
причинно связаны с нами.
**Горизонт событий** — сопутствующее расстояние, которое свет ещё
успеет пройти от момента $t$ до бесконечного будущего:
$\chi_e(t) = \int_t^\infty \dd t'/a$. События за ним не повлияют на нас
никогда; сигнал, посланный нами сейчас, не дойдёт до объектов за ним.
Горизонт событий существует, только если интеграл сходится —
например, при ускоренном расширении.
**Хаббловская сфера** — расстояние $c/H$, на котором скорость удаления
$v = H D$ ($D = a\chi$ — собственное расстояние) равна скорости света.
Это не горизонт: свет от объектов за ней до нас доходит.
:::
```{python}
chi_p0 = chi(0.0) # горизонт частиц сегодня
chi_e0 = D_H * quad(lambda a: 1 / (a**2 * E(a)), 1, np.inf, limit=200)[0]
z_e = brentq(lambda z: chi(1 / (1 + z)) - chi_e0, 0.5, 5)
z_H = brentq(lambda z: chi(1 / (1 + z)) - D_H, 0.5, 5)
for name, val in [("горизонт частиц χ_p", chi_p0), ("горизонт событий χ_e", chi_e0),
("хаббловский радиус c/H₀", D_H), ("η_∞ = χ_p + χ_e", chi_p0 + chi_e0)]:
print(f"{name:25s}: {val:6.2f} Гпк = {val * GLY_PER_GPC:5.1f} млрд св. лет")
print(f"красное смещение горизонта событий сегодня: z_e = {z_e:.2f}")
print(f"скорость удаления равна c при z = {z_H:.2f}")
print(f"доля сопутствующего объёма видимой Вселенной внутри горизонта событий: "
f"{(chi_e0 / chi_p0)**3:.3f}")
```
Числа требуют аккуратного прочтения.
- Наблюдаемая Вселенная имеет сегодня радиус 14,2 Гпк = 46 млрд св. лет,
хотя её возраст 13,8 млрд лет: это сегодняшнее собственное расстояние до
частиц, свет от которых (точнее, от их окрестности в момент
$t \approx 0$) доходит до нас сейчас [У]{.status}. Реликтовое излучение
($z = 1100$) пришло с расстояния 13,9 Гпк — почти с горизонта.
- Горизонт событий сегодня — 5,1 Гпк, $z_e = 1{,}85$. Галактики с
$z > 1{,}85$ мы видим (их старый свет до нас доходит), но свет, который
они испускают сейчас, не дойдёт до нас никогда, и наш сигнал не дойдёт
до них [У]{.status} — в рамках ΛCDM; если тёмная энергия не постоянна,
горизонт событий иной или его нет [Г]{.status} (тема «Меняется ли
тёмная энергия?»).
- Объекты с $1{,}48 < z < 1{,}85$ удаляются быстрее света и тем не менее
ещё достижимы: скорость удаления $HD$ — не скорость в локально
инерциальной системе, и ограничения СТО на неё не распространяются
(Дэвис и Лайнуивер, 2004).
- Достижимо для нас (в принципе, сигналом со скоростью света) только
4,6 % сопутствующего объёма видимой Вселенной, и эта доля
уменьшается.
- Конформное время сходится: $\eta_\infty = \chi_p + \chi_e = 19{,}2$ Гпк
(63 млрд св. лет). Это предельный сопутствующий радиус области, которую
мы когда-либо увидим, даже ждать бесконечно [У]{.status} (в рамках
ΛCDM).
## Пространственно-временная диаграмма
Построим историю горизонтов численно: $t(a) = \int_0^a \dd a/(aH)$,
$\eta(a) = \int_0^a \dd a/(a^2H)$.
```{python}
#| label: fig-horizons
#| fig-cap: "Горизонты в ΛCDM (Planck 2018). Слева — собственные расстояния D = aχ как функция космического времени; справа — сопутствующие расстояния как функция конформного времени η, где свет идёт под 45°. Чёрная — наш прошлый световой конус, оранжевая — горизонт событий, синяя — горизонт частиц, зелёная штриховая — хаббловская сфера c/H. Серые — мировые линии галактик с z = 1 и z = 3. Вертикальная линия — сегодня."
H0_inv = (1 / Planck18.H0).to(u.Gyr).value # 1/H₀ в млрд лет
a_grid = np.logspace(-6, 2.5, 6000)
H_grid = E(a_grid) / H0_inv # H(a), 1/млрд лет
# начальные значения — из эпохи излучения (H ∝ a⁻²): t = 1/(2H), η = 1/(aH)
t_grid = cumulative_trapezoid(1 / (a_grid * H_grid), a_grid, initial=0) + 1 / (2 * H_grid[0])
eta_grid = cumulative_trapezoid(1 / (a_grid**2 * H_grid), a_grid, initial=0) \
+ 1 / (a_grid[0] * H_grid[0])
GLY = GLY_PER_GPC
eta_inf = (chi_p0 + chi_e0) * GLY # в млрд св. лет (c = 1)
t0_num, eta0 = np.interp(1.0, a_grid, t_grid), np.interp(1.0, a_grid, eta_grid)
past = a_grid <= 1
cone = eta0 - eta_grid # сопутствующее расстояние светового конуса
event = eta_inf - eta_grid
hubble = 1 / (a_grid * H_grid) # c/(aH) — сопутствующий радиус хаббловской сферы
chi_gal = {z: chi(1 / (1 + z)) * GLY for z in (1, 3)}
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 4.4))
ax1.plot(t_grid[past], a_grid[past] * cone[past], "k", label="прошлый световой конус")
ax1.plot(t_grid, a_grid * event, color="tab:orange", label="горизонт событий")
ax1.plot(t_grid, a_grid * eta_grid, color="tab:blue", label="горизонт частиц")
ax1.plot(t_grid, a_grid * hubble, "--", color="tab:green", label="хаббловская сфера")
for z, cg in chi_gal.items():
ax1.plot(t_grid, a_grid * cg, color="0.6", lw=0.8)
ax1.text(29, np.interp(29, t_grid, a_grid) * cg, f"z = {z}", fontsize=8, color="0.4",
va="bottom", ha="right")
ax1.set(xlabel="t, млрд лет", ylabel="собственное расстояние D, млрд св. лет",
xlim=(0, 30), ylim=(0, 80))
ax2.plot(cone[past], eta_grid[past], "k")
ax2.plot(event, eta_grid, color="tab:orange")
ax2.plot(eta_grid, eta_grid, color="tab:blue")
ax2.plot(hubble, eta_grid, "--", color="tab:green")
for z, cg in chi_gal.items():
ax2.axvline(cg, color="0.6", lw=0.8)
ax2.text(cg + 0.8, 3, f"z = {z}", fontsize=8, color="0.4", rotation=90)
ax2.axhline(eta_inf, color="0.3", lw=0.6, ls=":")
ax2.text(1, eta_inf + 0.8, r"$\eta_\infty$", fontsize=9)
ax2.set(xlabel="сопутствующее расстояние χ, млрд св. лет", ylabel="конформное время η, млрд лет",
xlim=(0, 70), ylim=(0, 70))
ax1.axvline(t0_num, color="0.3", lw=0.6)
ax2.axhline(eta0, color="0.3", lw=0.6)
ax1.legend(loc="upper left", fontsize=8)
for ax in (ax1, ax2):
ax.grid(alpha=0.2)
fig.tight_layout()
print(f"сегодня: t₀ = {t0_num:.2f} млрд лет, η₀ = {eta0:.1f} млрд лет (= χ_p в св. годах)")
```
На правой панели световые лучи — прямые под 45°, и видно главное:
горизонт событий (оранжевая) сближается с нашей мировой линией, а
конформное время ограничено $\eta_\infty$. На левой видно, что
хаббловская сфера и горизонт событий в будущем сливаются при
$c/H_\Lambda = c/(H_0\sqrt{\Omega_\Lambda})$, и галактики одна за другой
уходят за горизонт событий (тема «Будущее ускоряющейся Вселенной»).
Прошлый световой конус в собственных расстояниях имеет каплевидную
форму: свет от самых далёких источников сначала *удалялся* от нас,
потому что был испущен за хаббловской сферой.
## Физика и наблюдательный статус
- Соотношения $d_L = (1+z)\chi$, $d_A = \chi/(1+z)$ — следствие
метрики ФЛРУ и сохранения числа фотонов [У]{.status}; на них основаны
все измерения $H(z)$ по сверхновым (фотометрические расстояния) и
БАО (угловые расстояния и $H(z)$).
- Значения горизонтов зависят от модели. Горизонт частиц определяется
прошлым и мало чувствителен к тёмной энергии; горизонт событий
определяется *будущим* расширением и существует, только если оно
остаётся ускоренным. В ΛCDM ($w = -1$ навсегда) он есть
[У]{.status}; экстраполяция на десятки миллиардов лет вперёд — гипотеза
о постоянстве $\Lambda$ [Г]{.status}.
- Утверждения о том, что находится за горизонтом частиц (например,
однородна ли Вселенная там), наблюдениями не проверяемы
[С]{.status}; их делают только как следствия теорий (инфляции).
## Итоги
- $\chi(z) = \int_0^z \dd z/H$; $d_L = (1+z)d_M$, $d_A = d_M/(1+z)$,
$d_L = (1+z)^2d_A$ (Этерингтон).
- $d_A$ максимально при $z \approx 1{,}6$ ($1{,}79$ Гпк для Planck18).
- Сегодня (Planck18): горизонт частиц 14,2 Гпк (46 млрд св. лет),
горизонт событий 5,1 Гпк (16,6 млрд св. лет, $z_e = 1{,}85$),
хаббловский радиус 4,43 Гпк (14,5 млрд св. лет, $z = 1{,}48$).
- Достижимо 4,6 % сопутствующего объёма видимой Вселенной; когда-либо
наблюдаемое ограничено $\eta_\infty = 19{,}2$ Гпк.
## Упражнения
1. Для модели Эйнштейна–де Ситтера (только пыль, $\kappa = 0$) найдите
$d_A(z)$ и красное смещение его максимума.
2. Найдите собственный радиус горизонта частиц $D_p = a(t)\chi_p(t)$ в
плоской вселенной с $w = \text{const} > -1/3$. Чему он равен в эпоху
излучения и в эпоху вещества в единицах $ct$?
3. Под каким углом видна галактика поперечником 10 кпк на $z = 1$,
$1{,}6$ и $5$ (Planck18)?
4. Покажите, что в де ситтеровской вселенной ($a \propto e^{Ht}$)
собственный радиус горизонта событий постоянен и равен $c/H$. Во
сколько раз сегодняшний собственный радиус горизонта событий в ΛCDM
больше хаббловского?
5. Мы отправляем сегодня радиосигнал к галактике с $z = 1$. Через
сколько миллиардов лет он придёт? Каким будет масштабный фактор в этот
момент?
::: {.callout-tip collapse="true"}
## Ответы
1. $\chi = \frac{2c}{H_0}\left[1 - (1+z)^{-1/2}\right]$,
$d_A = \chi/(1+z)$; максимум при $z = 5/4$, $d_A^{\max} = \frac{8}{27}\frac{c}{H_0}$.
2. $D_p = \frac{3(1+w)}{1+3w}\,ct$: $2ct$ для излучения, $3ct$ для
вещества.
3. 1,21″, 1,15″ и 1,56″: на $z = 5$ галактика видна под бо́льшим углом,
чем на $z = 1{,}6$.
4. $\chi_e = \int_t^\infty e^{-Ht'}\dd t' = e^{-Ht}/H$, $a\chi_e = 1/H$.
В ΛCDM сегодня $\chi_e/(c/H_0) = 1{,}15$; асимптотически отношение
стремится к 1, а сам радиус — к $c/(H_0\sqrt{\Omega_\Lambda}) = 5{,}3$ Гпк.
5. Сигнал пройдёт сопутствующее расстояние $\chi(z{=}1) = 3{,}4$ Гпк и
придёт через 18,9 млрд лет, при $a = 3{,}2$; при $z = 1{,}85$ и дальше —
не придёт никогда.
:::
## Литература
- Hogg D. W. Distance measures in cosmology. arXiv:astro-ph/9905116
(1999).
- Etherington I. M. H. On the definition of distance in general
relativity. *Phil. Mag.* **15**, 761 (1933); перепечатано: *Gen. Relativ.
Gravit.* **39**, 1055 (2007).
- Rindler W. Visual horizons in world models. *Mon. Not. R. Astron. Soc.*
**116**, 662 (1956); перепечатано: *Gen. Relativ. Gravit.* **34**, 133
(2002).
- Davis T. M., Lineweaver C. H. Expanding confusion: common
misconceptions of cosmological horizons and the superluminal expansion
of the Universe. *Publ. Astron. Soc. Aust.* **21**, 97 (2004),
arXiv:astro-ph/0310808.
- Горбунов Д. С., Рубаков В. А. *Введение в теорию ранней Вселенной:
Теория горячего Большого взрыва.* — М.: ЛКИ, 2008. Гл. 3.
- Planck Collaboration. Planck 2018 results. VI. Cosmological parameters.
*Astron. Astrophys.* **641**, A6 (2020), arXiv:1807.06209.
```{python}
#| echo: false
#| output: false
# Проверка формул и ответов (не показывается на странице)
for z in (0.1, 1, 3, 1100):
assert math.isclose(chi(1 / (1 + z)), Planck18.comoving_distance(z).to(u.Gpc).value, rel_tol=1e-5)
assert np.max(np.abs(d_L / ((1 + zz)**2 * d_A) - 1)) < 1e-12
assert round(z_dA_max, 1) == 1.6 and round(dA_max, 2) == 1.79
assert round(chi_p0, 1) == 14.2 and round(chi_p0 * GLY) == 46
assert round(chi_e0, 1) == 5.1 and round(chi_e0 * GLY, 1) == 16.6
assert round(D_H, 2) == 4.43 and round(D_H * GLY, 1) == 14.5
assert round(z_e, 2) == 1.85 and round(z_H, 2) == 1.48
assert round((chi_e0 / chi_p0)**3, 3) == 0.046
assert round(chi_p0 + chi_e0, 1) == 19.2 and round((chi_p0 + chi_e0) * GLY) == 63
assert round(chi(1 / 1101), 1) == 13.9
assert abs(t0_num - Planck18.age(0).to(u.Gyr).value) < 0.01 and abs(eta0 - chi_p0 * GLY) < 0.05
# 1: Эйнштейн–де Ситтер
zs = sp.Symbol("z", positive=True)
chi_eds = sp.integrate((1 + sp.Symbol("x"))**sp.Rational(-3, 2), (sp.Symbol("x"), 0, zs))
assert sp.simplify(chi_eds - 2 * (1 - 1 / sp.sqrt(1 + zs))) == 0
dA_eds = chi_eds / (1 + zs)
z_star = sp.solve(sp.diff(dA_eds, zs), zs)
assert z_star == [sp.Rational(5, 4)] and sp.simplify(dA_eds.subs(zs, z_star[0]) - sp.Rational(8, 27)) == 0
# 2
w, t_ = sp.symbols("w t", positive=True)
n = 2 / (3 * (1 + w))
Dp = t_**n * sp.integrate(sp.Symbol("s")**(-n), (sp.Symbol("s"), 0, t_), conds="none")
ratio = sp.simplify(Dp / t_)
assert sp.simplify(ratio - 3 * (1 + w) / (1 + 3 * w)) == 0
assert ratio.subs(w, sp.Rational(1, 3)) == 2 and ratio.subs(w, 0) == 3
# 3
ang = [(10 * u.kpc / Planck18.angular_diameter_distance(z) * u.rad).to(u.arcsec).value for z in (1, 1.6, 5)]
assert [round(x, 2) for x in ang] == [1.21, 1.15, 1.56]
# 4
assert round(chi_e0 / D_H, 2) == 1.15 and round(D_H / math.sqrt(Planck18.Ode0), 1) == 5.3
# 5: сигнал, отправленный сегодня, проходит χ(a) = ∫₁^a da/(a²H)
chi1 = chi(0.5)
a_arr = brentq(lambda a: D_H * quad(lambda x: 1 / (x**2 * E(x)), 1, a)[0] - chi1, 1, 100)
t_arr = H0_inv * quad(lambda x: 1 / (x * E(x)), 1, a_arr)[0]
assert round(chi1, 1) == 3.4 and round(t_arr, 1) == 18.9 and round(a_arr, 1) == 3.2
```