導出については,以下のページ:
必要なモジュールの import
from sympy import *
# 1文字変数の Symbol の宣言が省略できる
from sympy.abc import *
# 円周率
from sympy import pi
# SymPy Plotting Backends (SPB)
from spb import *
# グラフを SVG で Notebook にインライン表示
%config InlineBackend.figure_formats = ['svg']
# グラフを描くためではなくデフォルト設定のため
import matplotlib.pyplot as plt
config = {
'axes.labelsize': 'x-large',
'mathtext.fontset': 'cm'
}
plt.rcParams.update(config)
$t = 0$ からの $a(t)$ の立ち上がりを揃えたグラフの例
異なる $\Omega_{\rm m}$ の場合のスケール因子の時間変化のグラフを,$t=0$ でのスケール因子 $a(t)$ の傾きを揃えて描く場合。同じようにビッグバンで始まった宇宙の膨張が,$\Omega_{\rm m}$ の値によってその後の膨張の仕方に違いがあらわれ,ある場合には途中で膨張が止まって収縮に転じたり,ある場合には永久に膨張が続いたりするんだなぁ… ということを理解するのに適切なグラフ。
$\Omega_{\Lambda} = 0, \Omega_{\rm m} > 1$ すなわち $k > 0$ の場合
$\Omega_{\rm m} \rightarrow \Omega$ として
\begin{eqnarray}
a_1(u, \Omega) = \frac{a}{a_0}
&=& \frac{\Omega}{2 (\Omega -1)}
\left(1 -\cos\left(\sqrt{\Omega-1} u\right)\right)\\
t_1(u, \Omega) = H_0 t &=& \frac{\Omega}{2 (\Omega -1) }
\left(u -\frac{\sin\left(\sqrt{\Omega-1} u\right)}{\sqrt{\Omega-1}}\right)
\end{eqnarray}
となりそうだが,$|u| \ll 1$ での振るまいが後述の $\Omega_{\rm m} = 1$ の場合のように($\Omega$ の値によらずに)
\begin{eqnarray}
a_1 &\simeq& \frac{u^2}{4} \\
t_1 &\simeq& \frac{u^3}{12}
\end{eqnarray}
となるためには,以下のように縦横等倍で縮尺を変えてやればよい。
\begin{eqnarray}
a_1(u, \Omega) \equiv \frac{a}{a_0} \times \Omega^{-1}
&=& \frac{1}{2 (\Omega -1)}
\left(1 -\cos\left(\sqrt{\Omega-1} u\right)\right)\\
t_1(u, \Omega) \equiv H_0 t \times \Omega^{-1}&=& \frac{1}{2 (\Omega -1) }
\left(u -\frac{\sin\left(\sqrt{\Omega-1} u\right)}{\sqrt{\Omega-1}}\right)
\end{eqnarray}
var('Omega')
def a1(u, Omega):
return 1/(2*(Omega-1))*(1-cos(sqrt(Omega-1)*u))
def t1(u, Omega):
return 1/(2*(Omega-1))*(u-sin(sqrt(Omega-1)*u)/sqrt(Omega-1))
$\Omega_{\Lambda} = 0, \Omega_{\rm m} < 1$ すなわち $k < 0$ の場合
同様に
\begin{eqnarray}
a_2(u, \Omega) \equiv \frac{a}{a_0}\times \Omega^{-1}
&=& \frac{1}{2 (1-\Omega)}
\left(\cosh\left(\sqrt{1-\Omega} u\right) -1\right)
\\
t_2(u, \Omega) \equiv H_0 t \times \Omega^{-1}&=& \frac{1}{2 (1 -\Omega) }
\left(\frac{\sinh\left(\sqrt{1-\Omega} u\right)}{\sqrt{1-\Omega}}- u\right)
\end{eqnarray}
def a2(u, Omega):
return 1/(2*(1-Omega))*(cosh(sqrt(1-Omega)*u)-1)
def t2(u, Omega):
return 1/(2*(1-Omega))*(sinh(sqrt(1-Omega)*u)/sqrt(1-Omega)-u)
$\Omega_{\Lambda} = 0, \Omega_{\rm m} = 1$ すなわち $k = 0$ の場合
\begin{eqnarray}
a_3(u) \equiv \lim_{\Omega\rightarrow 1} a_1(u, \Omega) &=& \frac{u^2}{4} \\
t_3(u) \equiv \lim_{\Omega\rightarrow 1} t_1(u, \Omega) &=& \frac{u^3}{12}
\end{eqnarray}
Eq(Limit('a1(u, Omega)', Omega, 1),
limit(a1(u, Omega), Omega, 1))
Eq(Limit('t1(u, Omega)', Omega, 1),
limit(t1(u, Omega), Omega, 1))
def a3(u):
return u**2/4
def t3(u):
return u**3/12
Omega1 = 1.1
Omega2 = 0.9
# 0 <= u <= u1 まで
u1 = 2*pi/sqrt(Omega1 -1)
trange = t1(u1, Omega1)*1.02
p = plot_parametric(
(t2(u, Omega2), a2(u, Omega2), (u, 0, u1), {'color':'blue'}),
(t3(u ), a3(u ), (u, 0, u1), {'color':'black'}),
(t1(u, Omega1), a1(u, Omega1), (u, 0, u1), {'color':'red'}),
xlim = (0, trange), ylim = (0, 42),
use_cm = False, legend = False, show=False)
ax = p.ax
# 座標軸の目盛を非表示に
ax.axes.xaxis.set_ticks([0]);
ax.axes.yaxis.set_ticks([0]);
# 数式フォント設定
ax.set_title(r"$\Omega_{\Lambda}=0$ の場合のスケール因子の時間発展")
ax.set_xlabel(r"$t$")
ax.set_ylabel(r"$a(t)$")
# 曲線の近くにラベルと数式フォント設定
ax.text(60, 38, r"$\Omega_{\rm{m}} < 1\ \ (k < 0)$",
{'color':'blue', 'size':'x-large'})
ax.text(60, 18, r"$\Omega_{\rm{m}} = 1\ \ (k = 0)$",
{'color':'black', 'size':'x-large'})
ax.text(60, 10.5, r"$\Omega_{\rm{m}} > 1\ \ (k > 0)$",
{'color':'red', 'size':'x-large'});
$t = t_0$ で $a(t_0)$ と $H_0 = \frac{\dot{a}}{a}|_{t_0}$ を揃えたグラフの例
異なる $\Omega_{\rm m}$ の場合のスケール因子の時間変化のグラフを,現在時刻 $t=t_0$ でのスケール因子 $a(t)$ の傾きを揃えて描く場合。現在時刻でのスケール因子の傾きを表すハッブル定数 $H_0$ の値が同じでも,時間を遡るとやがて $a(t)$ がゼロになる時刻すなわち宇宙年齢が異なるのだなぁ… ということを理解するのに便利なグラフ。
$\Omega_{\Lambda} = 0, \Omega_{\rm m} > 1$ すなわち $k > 0$ の場合
\begin{eqnarray}
\frac{a}{a_0} \equiv x
&=& \frac{\Omega_{\rm m}}{2 (\Omega_{\rm m} -1)}
\left(1 -\cos\left(\sqrt{k} \eta\right)\right)
\\
H_0 t &=& \frac{\Omega_{\rm m}}{2 (\Omega_{\rm m} -1)^{\frac{3}{2}} }
\left(\sqrt{k} \eta -\sin\left(\sqrt{k} \eta\right)\right)
\end{eqnarray}
これから
\begin{eqnarray}
\cos\sqrt{k} \eta &=& 1 – \frac{2 (\Omega_{\rm m} -1)}{\Omega_{\rm m}}x\\
\sqrt{k} \eta &=& \cos^{-1} \left(1 – \frac{2 (\Omega_{\rm m} -1)}{\Omega_{\rm m}}x \right)
\end{eqnarray}
$\Omega_{\rm m} \rightarrow \Omega$ として
\begin{eqnarray}
\therefore\ \ T_1(x, \Omega) &\equiv& H_0 t = \frac{\Omega}{2 (\Omega -1)^{\frac{3}{2}} }
\left(\sqrt{k} \eta -\sin \sqrt{k} \eta \right) \\
&=& \frac{\Omega}{2 (\Omega -1)^{\frac{3}{2}} }
\left(\cos^{-1} \left(1 – \frac{2 (\Omega -1)}{\Omega} x \right)
– \sqrt{1 – \left(1 – \frac{2 (\Omega -1)}{\Omega} x \right)^2} \right)
\end{eqnarray}
として,$H_0 t$ を $x$ で表す。
def T1(x, Omega):
return (Omega/(2*(Omega-1)*sqrt(Omega-1)) *
(acos(1 - 2*(Omega-1)/Omega * x)
- sqrt(1-(1-2*(Omega-1)/Omega * x)**2)))
$\Omega_{\Lambda} = 0, \Omega_{\rm m} < 1$ すなわち $k < 0$ の場合
\begin{eqnarray}
\frac{a}{a_0} \equiv x
&=&\frac{\Omega_{\rm m}}{2 (1-\Omega_{\rm m} )}
\left(\cosh \sqrt{k} \eta -1\right)a
\end{eqnarray}
これから
\begin{eqnarray}
\cosh\sqrt{k} \eta &=& 1 + \frac{2 (1-\Omega_{\rm m})}{\Omega_{\rm m}}x \\
\sqrt{k} \eta &=& \cosh^{-1} \left(1 + \frac{2 (1-\Omega_{\rm m})}{\Omega_{\rm m}}x\right)
\end{eqnarray}
$\Omega_{\rm m} \rightarrow \Omega$ として
\begin{eqnarray}
\therefore\ \
T_2(x, \Omega) &\equiv& H_0 t = \frac{\Omega}{2 (1-\Omega)^{\frac{3}{2}} }
\left(\sinh \sqrt{k} \eta – \sqrt{k} \eta \right) \\
&=& \frac{\Omega}{2 (1-\Omega)^{\frac{3}{2}} }
\left(
\sqrt{\left(1 + \frac{2 (1-\Omega)}{\Omega}x \right)^2 – 1} –
\cosh^{-1} \left(1 + \frac{2 (1-\Omega)}{\Omega}x\right) \right)
\end{eqnarray}
として,$H_0 t$ を $x$ で表す。
def T2(x, Omega):
return (Omega/(2*(1-Omega)*sqrt(1-Omega)) *
(sqrt((1+2*(1-Omega)/Omega * x)**2 -1)
-acosh(1 + 2*(1-Omega)/Omega * x)))
$\Omega_{\Lambda} = 0, \Omega_{\rm m} = 1$ すなわち $k = 0$ の場合
\begin{eqnarray}
\frac{a}{a_0} = x &=& \left(\frac{3}{2}H_0 t \right)^{\frac{2}{3}}
\end{eqnarray}$$\therefore\ \ T_3(x) \equiv H_0 t = \frac{2}{3} x^{\frac{3}{2}}$$
def T3(x):
return 2/3 * x*sqrt(x)
Omega1 = 2
Omega2 = 0.1
p=plot_parametric(
(T2(x, Omega2)-T2(1, Omega2), x, (x, 0, 3),
r"$\Omega_{\rm m} < 1\ \ (k < 0)$", {'color':'blue'}),
(T3(x )-T3(1 ), x, (x, 0, 3),
r"$\Omega_{\rm m} = 1\ \ (k = 0)$", {'color':'black'}),
(T1(x, Omega1)-T1(1, Omega1), x, (x, 0, 3),
r"$\Omega_{\rm m} > 1\ \ (k > 0)$", {'color':'red'}),
xlim = (-1, 1.6), ylim = (0, 3),
use_cm = False, legend = True, show=False)
ax = p.ax
# グリッドを dotted で
ax.grid(which="major", linestyle = 'dotted')
# 数式フォント設定
ax.set_title(r"$\Omega_{\Lambda}=0$ の場合のスケール因子の時間発展")
ax.set_xlabel(r"$H_0 (t -t_0)$")
ax.set_ylabel(r"$a(t)/a_0$")
ax.legend(prop={"size":"large"})
# 現在 t=t0
ax.axhline(1, color='black', dashes=(3, 3), linewidth=0.6)
ax.axvline(0, color='black', dashes=(3, 3), linewidth=0.6)
# 副目盛も表示
ax.minorticks_on()
# 副目盛には grid をつけない
ax.grid(False, which="minor");
$k = 0, \ \Omega_{\Lambda} > 0$ の場合の追加
宇宙定数がある場合のスケール因子の時間変化についても追加しておく。
\begin{eqnarray}
\frac{a}{a_0} = x &=&
\left\{\sqrt{\frac{\Omega_{\rm m}}{1-\Omega_{\rm m}}}
\sinh\left(\frac{3\sqrt{1-\Omega_{\rm m}}}{2} H_0 t\right)\right\}^{\frac{2}{3}} \end{eqnarray}
より $\Omega_{\rm m} \rightarrow \Omega$ として
$$T_4(x, \Omega) \equiv H_0 t = \frac{2}{3\sqrt{1-\Omega}}
\sinh^{-1} \left( \sqrt{\frac{1-\Omega}{\Omega}} x^{\frac{3}{2}}\right)$$
def T4(x, Omega):
return 2/(3*sqrt(1-Omega)) * asinh(sqrt((1-Omega)/Omega) * x*sqrt(x))
また,$t = 0$ からの $a(t)$ の立ち上がりを揃えたグラフにするには,以下のように定義すればよいであろう。
def a4(u, Omega):
return (sqrt(1/(1-Omega))*sinh(3*sqrt(1-Omega)*u**3/12/2))**(2/3)
def t4(u, Omega):
return u**3/12
$t = 0$ からの $a(t)$ の立ち上がりを揃えたグラフの例
Omega1 = 1.1
Omega2 = 0.7
# 0 <= u <= u1 まで
u1 = 2*pi/sqrt(Omega1 -1)
trange = t1(u1, Omega1)*1.1
p = plot_parametric(
(t4(u, 0.999), a4(u, 0.999), (u, 0, u1), {'color':'purple'}),
(t2(u, Omega2), a2(u, Omega2), (u, 0, u1), {'color':'blue'}),
(t3(u ), a3(u ), (u, 0, u1), {'color':'black'}),
(t1(u, Omega1), a1(u, Omega1), (u, 0, u1), {'color':'red'}),
xlim = (0, trange), ylim = (0, 120),
use_cm = False, legend = False, show=False)
ax = p.ax
# 座標軸の目盛を非表示に
ax.axes.xaxis.set_ticks([0]);
ax.axes.yaxis.set_ticks([0]);
# 数式フォント設定
ax.set_title(r"スケール因子の時間発展")
ax.set_xlabel(r"$t$")
ax.set_ylabel(r"$a(t)$")
# 曲線の近くにラベルと数式フォント設定
ax.text(80, 75, r"$k=0, \Omega_{\Lambda} >0$",
{'color':'purple', 'size':'large'})
ax.text(80, 62, r"$k<0, \Omega_{\Lambda} =0$",
{'color':'blue', 'size':'large'})
ax.text(80, 30, r"$k=0, \Omega_{\Lambda} =0$",
{'color':'black', 'size':'large'})
ax.text(80, 9, r"$k>0, \Omega_{\Lambda} =0$",
{'color':'red', 'size':'large'});
$t = t_0$ で $a(t_0)$ と $H_0 = \frac{\dot{a}}{a}|_{t_0}$ を揃えたグラフの例
Omega1 = 2
Omega2 = 0.3
p=plot_parametric(
(T4(x, Omega2)-T4(1, Omega2), x, (x, 0, 4),
r"$\Omega_{\rm m} =%.1f, \ \Omega_{\Lambda} =%.1f$" % (Omega2, 1-Omega2),
{'color':'purple'}),
(T2(x, Omega2)-T2(1, Omega2), x, (x, 0, 3),
r"$\Omega_{\rm m} =%.1f, \ \Omega_{\Lambda} =%.1f$" % (Omega2, 0),
{'color':'blue'}),
(T3(x )-T3(1 ), x, (x, 0, 3),
r"$\Omega_{\rm m} =%.1f, \ \Omega_{\Lambda} =%.1f$" % (1, 0),
{'color':'black'}),
(T1(x, Omega1)-T1(1, Omega1), x, (x, 0, 2),
r"$\Omega_{\rm m} =%.1f, \ \Omega_{\Lambda} =%.1f$" % (Omega1, 0),
{'color':'red'}),
xlim = (-1, 1.6), ylim = (0, 4),
use_cm = False, legend = True, show=False)
ax = p.ax
# グリッドを dotted で
ax.grid(which="major", linestyle = 'dotted')
# 現在 t=t0
ax.axhline(1, color='black', dashes=(3, 3), linewidth=0.6)
ax.axvline(0, color='black', dashes=(3, 3), linewidth=0.6)
# 数式フォント設定
ax.set_title("スケール因子の時間発展")
ax.set_xlabel(r"$H_0 (t - t_0)$")
ax.set_ylabel(r"$a(t)/a_0$")
ax.legend(prop={"size": "large"})
# 副目盛も表示
ax.minorticks_on()
# 副目盛には grid をつけない
ax.grid(False, which="minor");