導出については,以下のページ:
必要なモジュールの import
In [1]:
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']
In [2]:
# グラフを描くためではなくデフォルト設定のため
import matplotlib.pyplot as plt
config = {
'axes.labelsize': 'x-large',
'mathtext.fontset': 'cm'
}
plt.rcParams.update(config)
からの の立ち上がりを揃えたグラフの例
異なる
すなわち の場合
となりそうだが,
となるためには,以下のように縦横等倍で縮尺を変えてやればよい。
In [3]:
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))
すなわち の場合
同様に
In [4]:
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)
すなわち の場合
In [5]:
Eq(Limit('a1(u, Omega)', Omega, 1),
limit(a1(u, Omega), Omega, 1))
Out[5]:
In [6]:
Eq(Limit('t1(u, Omega)', Omega, 1),
limit(t1(u, Omega), Omega, 1))
Out[6]:
In [7]:
def a3(u):
return u**2/4
def t3(u):
return u**3/12
In [8]:
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'});
で と を揃えたグラフの例
異なる
すなわち の場合
これから
として,
In [9]:
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)))
すなわち の場合
これから
として,
In [10]:
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)))
すなわち の場合
In [11]:
def T3(x):
return 2/3 * x*sqrt(x)
In [12]:
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");
の場合の追加
宇宙定数がある場合のスケール因子の時間変化についても追加しておく。
より
In [13]:
def T4(x, Omega):
return 2/(3*sqrt(1-Omega)) * asinh(sqrt((1-Omega)/Omega) * x*sqrt(x))
また,
In [14]:
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
からの の立ち上がりを揃えたグラフの例
In [15]:
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'});
で と を揃えたグラフの例
In [16]:
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");