パーセクの定義とハッブル定数・ハッブル年齢

パーセクの定義に $1$ 秒角の $\tan$ (あるいは $\tan$ の逆数である $\cot$)がいらなくなって,$\displaystyle 1 \mbox{pc} = \frac{\mbox{au}}{\tan 1^{\prime\prime}} = \mbox{au}\ \cot 1^{\prime\prime}$ ではなく,新定義 (IAU 2015 Resolution B2) では
$$1 \mbox{pc} \equiv \frac{\mbox{au}}{1^{\prime\prime}} = \frac{648000}{\pi} \mbox{au}$$

となったという話。

Wikipedia 日本語版におけるパーセクの定義

(いずれ修正されると思うので,あくまで本日閲覧時点での) Wikipedia 日本語版におけるパーセクの定義は

$$1 \ \mbox{pc} = \cot (\pi/648000) \ \mbox{au}$$

とある。かいつまんで説明すると,

Parsec

1秒角をラジアンで表した角度 $\theta$ は

\begin{eqnarray}
\theta &=&1^{\prime\prime} = \frac{\pi}{180\times 60 \times 60} \ \mbox{rad}= \frac{\pi}{648000} \ \mbox{rad}\\
\frac{\mbox{au}}{\mbox{pc}} &=& \tan\theta \\
\therefore\ \ 1\,\mbox{pc} &\equiv& \frac{\mbox{au}}{\tan\theta} \\
&=& \frac{\mbox{au}}{\tan\frac{\pi}{648000}} \\
&=& \mbox{au}\,\times\, \cot\left(\frac{\pi}{648000} \right)
\end{eqnarray}

$1 \ \mbox{pc}$ とは図の $PS$ の長さであり,直角三角形 $PST$ から $\displaystyle \tan 1^{\prime\prime} = \frac{ST}{PS}$ として定義している。

しかし,図をみていると,$1 \ \mbox{pc}$ って地球までの距離 $PT$ じゃあない?とか,そもそも天体 $P$ は十分遠方にあるのだから $PS$ と $PT$ は等しいとしていいよね?とか,いろいろ考えが出てくるだろう。

そこで…

Wikipedia 英語版におけるパーセクの定義

Wikipedia 英語版におけるパーセクの項では,採択された IAU 2015 Resolution B2 に従い,厳密に

$$1 \mbox{pc} \equiv \frac{\mbox{au}}{\theta} = \frac{648000}{\pi} \mbox{au}$$

としている。つまりは $|\theta| \ll 1$ のとき $\tan\theta \simeq \theta$ なので,いっそのこと,$\tan\theta$ の項を $\theta$ としてしまえ,ということ。

1 パーセク (pc) とは,1 au の弧の長さを見込む中心角が1秒角となるときの半径の長さである」という具合に解釈できる。

図でいうと,$PS = PT$ であり,$ST$ は円弧の長さということになる。

本稿執筆時点のWikipedia 英語版におけるパーセクの項では17桁の数値で 1 パーセクの値を表している:

$$1~\mbox{pc} = \frac{96\, 939\, 420\, 213\, 600\, 000}{\pi}~\mbox{m}
= 30\, 856\, 775\, 814\, 913\, 673~\mbox{m}$$

Maxima でパーセクを計算する

Wikipedia 日本語版におけるパーセクの定義

(いずれ修正されると思うので,あくまで本日閲覧時点での) Wikipedia 日本語版におけるパーセクの旧定義は以下の通り。

1秒角をラジアンで表した角度 $\theta$ は

\begin{eqnarray}
\theta &=& 1^{\prime\prime} = \frac{\pi}{180\times 60 \times 60}\ \mbox{rad} = \frac{\pi}{648000}\ \mbox{rad} \\
\frac{\mbox{au}}{\mbox{pc}} &=& \tan\theta \\
\therefore\ \ 1\,\mbox{pc} &\equiv& \frac{\mbox{au}}{\tan\theta}= \mbox{au}\times\cot\frac{\pi}{648000}
\end{eqnarray}

Wikipedia 英語版におけるパーセクの定義

Wikipedia 英語版におけるパーセクの項では,採択された IAU 2015 Resolution B2 に従った新定義では厳密に

$$1 \mbox{pc} \equiv \frac{\mbox{au}}{\theta} = \frac{648000}{\pi} \mbox{au}$$

としている。

Wikipedia 英語版におけるパーセクの項では17桁の数値で 1 パーセクの値を表している:

$$1~\mbox{pc} = \frac{96\, 939\, 420\, 213\, 600\, 000}{\pi}~\mbox{m}
= 30\, 856\, 775\, 814\, 913\, 673~\mbox{m}$$

が,Maxima の float() では 16 桁までなので,以下では bfloat() を使って 20 桁(fpprec: 20$)の精度で計算し,printf()bigfloat の書式指定 ~17,0h で 17 桁まで表示させている。

In [1]:
fpprec: 20$
fpprintprec: 0$

/* 天文単位は定義値 m */
au: 149597870700$
pc1: bfloat(648000*au/%pi)$

/* bfloat の書式指定は h */
printf(true, "1 pc = ~17,0h m~%", pc1)$
1 pc = 30856775814913673. m

旧定義 $\tan\theta$ のまま計算すると,12桁目から誤差が出てきます。

In [2]:
pc2: bfloat(au/tan(%pi/648000))$
printf(true, "新定義 1 pc = ~17,0h m~%", pc1)$
printf(true, "旧定義 1 pc = ~17,0h m~%", pc2)$

printf(true, "  差      =  ~17,0h m~%", (pc1-pc2))$
新定義 1 pc = 30856775814913673. m
旧定義 1 pc = 30856775814671916. m
  差      =            241757. m

ハッブル定数・ハッブル年齢

ハッブル定数は歴史的経緯もあり,単位が $\mbox{km/s/Mpc}$ となっている。

$$H_0 = 100 h \,\frac{\mbox{km}}{\mbox{s} \cdot \mbox{Mpc}}
= 100 h \, \frac{\mbox{km}}{\mbox{Mpc}} \cdot \mbox{s}^{-1}$$

つまり,$1 \,\mbox{Mpc}$ を $\mbox{m}$ で表した値を Mpc とすると…

In [3]:
/* H0 の精度は,せいぜいこのくらい */
/* なのでパーセクの新定義・旧定義の差など無関係です */
fpprintprec: 4$
/* h を初期化(念のため)*/
kill(h)$

au: 149597870700 * m$
/* Mpc だから 1E6 pc で,km だから 1E3 m。*/
Mpc: 648000/float(%pi) * au * 1E6$
km: 1E3 * m$

H0: 100 * h * km/(s * Mpc);
Out[3]:
\[\tag{${\it \%o}_{15}$}\frac{3.241 \times 10^{-18}\,h}{s}\]

この値の逆数が秒で表したハッブル年齢となる。「億年」単位に変換すると…

In [4]:
/* 1億年を秒で表す */
okunen: 60*60*24*365.25*1E8 * s$

print(1/H0/okunen, "億年")$
\(\frac{97.78}{h}\) 億年
In [5]:
/* Planck 2018 の値を使うと... */
h: 0.674$

print("H0 = ", 100*h, "のときハッブル年齢は", 1/ev(H0)/okunen, "億年")$
H0 = \(67.4\) のときハッブル年齢は \(145.1\) 億年
In [6]:
/* Hubble (1929) の値を使うと... */
h: 4.239$

print("H0 = ", 100*h, "のときハッブル年齢は", 1/ev(H0)/okunen, "億年")$
H0 = \(423.9\) のときハッブル年齢は \(23.07\) 億年

Python でパーセクを計算する

モジュールの import

17 桁目まで計算するのに,SymPy を使います。

In [1]:
from sympy.abc import *
from sympy import *

Wikipedia 英語版におけるパーセクの定義

新定義(IAU 2015 Resolution B2)によるパーセクの値は

\begin{eqnarray}
\theta &=& 1^{\prime\prime} = \frac{\pi}{180\times 60 \times 60}\ \mbox{rad} = \frac{\pi}{648000}\ \mbox{rad} \\
1\ \mbox{pc} &\equiv& \frac{\mbox{au}}{\theta} = \frac{648000}{\pi}\ \mbox{au}
\end{eqnarray}

In [2]:
# 天文単位は定義値
au = 149597870700 # 単位は m

# 新定義のパーセク
pc1 = N(648000/pi*au, 17)
print('新定義 1 pc =', pc1, 'm')
新定義 1 pc = 30856775814913673. m

Wikipedia 日本語版におけるパーセクの定義

(いずれ修正されると思うので,あくまで本日閲覧時点での) Wikipedia 日本語版におけるパーセクの旧定義によるパーセクの値は以下の通り。

1秒角をラジアンで表した角度 $\theta$ は

\begin{eqnarray}
\theta &=& 1^{\prime\prime} = \frac{\pi}{180\times 60 \times 60}\ \mbox{rad} = \frac{\pi}{648000}\ \mbox{rad} \\
1\ \mbox{pc} &\equiv& \frac{\mbox{au}}{\tan\theta}= \mbox{au}\times\cot\frac{\pi}{648000}
\end{eqnarray}

以下でわかるように,$\tan\theta$ を使った旧定義では 12 桁目から違いが出てくることがわかる。

In [3]:
# 旧定義のパーセク
pc2 = N(au/tan(pi/648000), 17)

print('新定義 1 pc =', pc1, 'm')
print('旧定義 1 pc =', pc2, 'm')
# 表示の桁を合わせるのに一苦労
print('         差 = '+' '*11+str(N((pc1-pc2), n=6))+' m')
新定義 1 pc = 30856775814913673. m
旧定義 1 pc = 30856775814671916. m
         差 =            241757. m

ちなみに,%17d とか %17.f とかの書式指定で表示合わせをしようとすると,最後の桁の数値が変わってしまう。

In [4]:
print('新定義 1 pc = %17d m' % pc1)
新定義 1 pc = 30856775814913672 m
In [5]:
print('新定義 1 pc = %17.f m' % pc1)
新定義 1 pc = 30856775814913672 m

ハッブル定数・ハッブル年齢

ハッブル定数は歴史的経緯もあり,単位が $\mbox{km/s/Mpc}$ となっている。

$$H_0 = 100 \,h \,\frac{\mbox{km}}{\mbox{s} \cdot \mbox{Mpc}}
= 100 \,h \, \frac{\mbox{km}}{\mbox{Mpc}} \cdot \mbox{s}^{-1}$$

つまり,$1 \,\mbox{Mpc}$ を $\mbox{m}$ で表した値を Mpc とすると…

In [6]:
au = 149597870700 * m
# Mpc だから 1E6 pc で,km だから 1E3 m。
Mpc = 648000/float(pi) * au * 1E6
km = 1E3 * m

H0 = 100 * h * km/(s * Mpc)

# H0 の精度はせいぜい 4 桁
N(H0, 4)
Out[6]:
$\displaystyle \frac{3.241 \cdot 10^{-18} h}{s}$

この値の逆数が秒で表したハッブル年齢となる。「億年」単位に変換すると…

In [7]:
# 1億年を秒で表す 
okunen = 60*60*24*365.25*1E8 * s

print(N(1/H0/okunen, 4),'億年')
97.78/h 億年
In [8]:
# Planck 2018 の値 h = 0.674 を使うと... 
h1 = 0.674
print("H0 =", 100*h1, "のとき,ハッブル年齢は", 
      N(1/H0.subs(h, h1)/okunen, 4),'億年')
H0 = 67.4 のとき,ハッブル年齢は 145.1 億年
In [9]:
# Hubble (1929) の値 h = 4.239 を使うと... 
h2 = 4.239

print("H0 =", 100*h2, "のとき,ハッブル年齢は", 
      N(1/H0.subs(h, h2)/okunen, 4),'億年')
H0 = 423.9 のとき,ハッブル年齢は 23.07 億年