Hubble (1929) のデータから Maxima でハッブル定数を推定する

Hubble (1929) のデータ

Hubble (1929)Table 1 のデータから Hubble 定数を推定する。

Hubble (1929) のオリジナルのグラフは以下の通り。

以下のような内容の hubble.dat を用意する。

1列目    2列目    2列目
name     r(Mpc)   v(km/s)

となっている。

"S.Mag."   0.032  +170
"L.Mag."   0.034  +290
"6822"     0.214  -130
"598"      0.263   -70
"221"      0.275  -185
"224"      0.275  -220
"5457"     0.45   +200
"4736"     0.5    +290
"5194"     0.5    +270
"4449"     0.63   +200
"4214"     0.8    +300
"3031"     0.9     -30
"3627"     0.9    +650
"4826"     0.9    +150
"5236"     0.9    +500
"1068"     1.0    +920
"5055"     1.1    +450
"7331"     1.1    +500
"4258"     1.4    +500
"4151"     1.7    +960
"4382"     2.0    +500
"4472"     2.0    +850
"4486"     2.0    +800
"4649"     2.0   +1090

銀河までの距離と後退速度のグラフ

In [1]:
/* hubble.dat を読み込み... */
tmp: read_nested_list("hubble.dat")$
/* 2列目 r と 3列目 v のリストをつくる。*/
rv: makelist([a[2],a[3]], a, tmp)$

draw2d(
  font = "Arial", font_size = 16,
  title = "Hubble (1929) Table 1.",
  xrange = [-0.4, 2.4], yrange = [-400, 1400], 
  xaxis = true, yaxis = true, 
  xtics = 1, ytics = 500, grid = true,
  xlabel = "r (Mpc)", ylabel = "v (km/s)",

  point_type = 7, point_size = 0.6, color = "purple",
  points(rv)
 )$

最小二乗法によるフィット

$v = H_0 r$ を仮定して最小二乗法により $H_0$ を推定する。

In [2]:
/* 最初に1度だけ追加パッケージを load しておく。*/
load(lsquares)$
In [3]:
f(x):= H0 * x$
/* リスト rv を行列に変換してから */
lsquares_estimates(apply('matrix, rv), [x, y], y=f(x), [H0]);
Out[3]:
\[\tag{${\it \%o}_{6}$}\left[ H_{0}=\frac{2502739000}{5903559} \right] \]
In [4]:
/* 最小二乗法で得られた値を H0 に代入 */
H0: float(rhs(%[1]));
Out[4]:
\[\tag{${\it \%o}_{7}$}423.9373232316303\]

フィットした直線もグラフに描く

In [5]:
draw2d(
  font = "Arial", font_size = 16,
  title = "Hubble (1929) Table 1.",
  xrange = [-0.4, 2.4], yrange = [-400, 1400], 
  xaxis = true, yaxis = true, 
  xtics = 1, ytics = 500, grid = true,
  xlabel = "r (Mpc)", ylabel = "v (km/s)",

  point_type = 7, point_size = 0.6, color = "purple",
  points(rv), 

  key = printf(false, "H_0 = ~5,1f", H0),
  line_width = 2, color = "forest_green",
  explicit(f(x), x, 0, 2.4)
 )$

ハッブル年齢($H_0$ の逆数)を求める

$\Omega_{\Lambda} = 0$ の場合は,宇宙年齢の上限が $\displaystyle \frac{1}{H_0}$ となる。また,$\Omega_{\rm m} = 1, \Omega_{\Lambda} = 0$ の場合の宇宙年齢は $\displaystyle \frac{2}{3}\frac{1}{H_0}$ となる。

In [6]:
/* Mpc を km で */
Mpc: 3.0856775814127E19$

/* 1/H0 は秒なので「億年」に換算 */
Hinv: 1/H0 * Mpc$
okunen: 60*60*24*365.25*1.E8$

printf(true, "~3,1f 億年", Hinv/okunen)$
23.1 億年

演習

Hubble (1929) のデータから得られたハッブル定数の値,およびその逆数から得られる宇宙年齢の上限の値は,現在我々が知っている地球年齢(約46億年)よりも短いだけでなく,当時(20世紀前半)の知見でも地球より宇宙の年齢が短くなりそうな危うい状況であった。

その原因は,距離の推定の誤差であった。

現在,我々は以下のリンクからそれぞれの銀河の距離(距離はハッブルの法則以外の手段で求められていると仮定しよう)と赤方偏移を確認できる。これらの値を用いてハッブル定数の推定を行い,ハッブル年齢がいくらになるか調べよ。

一部,以下のリンクでは距離のデータがない天体もあるだろう。その場合は「ngc 4214 distance」などとネット検索してみよ。