わかる宇宙論第 4 回 / 物理好き高校生のための、数式でたどる版

第1回で描いた「光が遅くなる宇宙」を、今回は自分の手で動かす

昔は光が速かった、を
計算機で追う 式を眺めるだけじゃなく、実際に一歩ずつ計算して、グラフを動かしてみる。
下の図は本物 ── スライダーを動かすと、その場で再計算されます。

必要な道具:足し算のくり返し(漸化式)、簡単なプログラム \(c(t)=c_0 t_0/t\)

第1回で、宇宙膨張を「光速がゆっくり遅くなる」と読み替えました。式はきれいでしたが、式を「眺める」のと「動かす」のは別の理解です。今回は、その宇宙を計算機で一歩ずつ進めてみます。難しい数学は要りません。必要なのは「前の値に少し足して、次の値を作る」という足し算のくり返しだけ。しかもこのページの図は飾りではなく、あなたのブラウザがその場で計算した本物です。スライダーを動かして、宇宙を回してみてください。

STEP 01連続の式を、計算機の言葉「漸化式」に直す

第1回の宇宙のルールは \(c(t)=\dfrac{c_0 t_0}{t}\)。光がどこまで進んだかは、速さ×時間を積み上げた \(D=\displaystyle\int c(t)\,dt\) でした。積分と聞くと身構えますが、計算機にとっては「小さな時間 \(\Delta t\) ずつ、進んだ距離を足していく」だけです。これを漸化式(前の値から次の値を作る式)で書くと ──

計算機が理解できる形(漸化式)
$$t_{n+1} = t_n + \Delta t,\qquad D_{n+1} = D_n + c(t_n)\,\Delta t = D_n + \frac{c_0 t_0}{t_n}\,\Delta t$$

「時刻を \(\Delta t\) だけ進める。その間に光は \(c(t_n)\times\Delta t\) だけ進むから、距離に足す」。これを何千回もくり返すのは人間には退屈ですが、計算機の得意技です。プログラムにするとたった数行。

# 第1回の宇宙で、光が進んだ距離を一歩ずつ足していく c0, t0 = 1.0, 1.0 # 今の光速・今の年齢を1に規格化 dt = 0.001 # 小さな時間きざみ t, D = 0.001, 0.0 # t=0 ちょうどは割り算できないので少し後から while t < t0: c = c0 * t0 / t # その時刻の光速(昔ほど速い!) D = D + c * dt # 進んだ距離を足す t = t + dt print(D) # → どんどん大きくなる(対数的に発散)

このプログラムの心臓は \(c = c_0 t_0 / t\) の一行。\(t\) が小さい(=宇宙が若い)ほど \(c\) が大きくなり、序盤で距離をぐんぐん稼ぐ。それが「昔の光は遠くまで届いた」の正体でした。次の図で、実際にそうなるか見てみましょう。

STEP 02動かしてみる ── 昔ほど光速が跳ね上がる

まず光速そのもの \(c(t)=c_0t_0/t\) を、宇宙の年齢に対してプロットします。下のスライダーは時間きざみ \(\Delta t\)。動かすと、なめらかな曲線をどれくらい細かく追えるかが変わります。

図1:光速 c(t) の時間変化(青=真の曲線、点=計算機が刻んだ値)
真の曲線 c(t)=c₀t₀/t 計算機の刻み

左側(昔)で曲線が急に跳ね上がっているのが、「若い宇宙では光が速かった」。きざみを粗くすると、この急な部分を点が追いきれずに、曲線から外れていくのが見えるはずです ── これが数値計算の宿命で、STEP 04 の話につながります。

STEP 03光が届いた距離 ── 地平線は本当に「伸び続ける」

次に、STEP 01 のプログラムが足し上げた距離 \(D\)(=光が届いた地平線)を、時間に対してプロットします。第1回で「\(\int c_0t_0/t\,dt\) は対数的に発散する=いくらでも大きくなる」と言いました。それを計算機の足し算で確かめます。

図2:光が届いた距離 D(t) の積み上がり(対数的に伸び続ける)
足し上げた距離 D(t)

スライダーは「いつから計算を始めるか」。もっと早い時刻(=宇宙のより若いころ)から足し始めると、序盤で光速が巨大なので、総距離がぐんと増えるのが分かります。始まりに近づくほど無限に増えていく ── これが「対数発散」で、宇宙のどんなに離れた点も昔は連絡を取り合えた、という第1回の結論の数値版です。

種明かしの声(第1回とつながる) この \(D\) が「いくらでも大きくなる」ことこそ、標準宇宙論でいう地平線問題が \(c\cdot t=\text{一定}\) の宇宙では起きない理由でした。ただし前回までと同じ注意 ── 効いているのは \(c\) を変えたことではなく、\(a\propto t\)(まっすぐ膨張)という膨張のしかた。数値で見ても、両者はぴったり同じ曲線を描きます。
◇ ◇ ◇

STEP 04実利のコア ── なぜ「変数を変える」と計算が速くなるのか

ここが今回のいちばん面白いところです。図1で見たように、序盤(昔)は光速が急に変化するので、そこを追うにはきざみ \(\Delta t\) を細かくしないといけない。でも後半はゆるやかなので、細かいきざみは無駄。全体を同じ細かさで計算すると、序盤に合わせて全区間を細かくする羽目になり、とても遅くなります

そこで、時間の「ものさし」を貼り替えます。ふつうの時間 \(t\) の代わりに \(u=\ln t\)(\(t\) の対数)を新しい時間として使う。すると \(t=e^u\) で、光速は

$$c = \frac{c_0 t_0}{t} = c_0 t_0\, e^{-u}$$

となり、\(u\) に対してはなめらかな指数関数。急な跳ね上がりが消えて、全区間をほぼ同じ細かさで追えるようになる。同じ精度が、ずっと少ないステップ数で出せる ── これが「変数変換で計算が速くなる」の正体です。下の図で、同じ物理を \(t\) 軸と \(u=\ln t\) 軸の両方で見比べてください。

図3:同じ c(t) を、ふつうの時間軸(左)と対数時間軸 u=ln t(右)で。右はなめらか=少ない点で追える
真の曲線 等間隔に置いた点

点の数を減らしてみてください。左(ふつうの時間)では、少ない点だと序盤の急カーブを取りこぼして曲線から大きくずれる。でも右(対数時間)では、同じ少なさでも曲線をきれいに追えている。情報を1ビットも捨てずに、ただ“ものさし”を貼り替えただけで、計算が楽になった ── これが第1回で触れた「近似じゃない高速化」の、目で見える実物です。

種明かしの声 ── これは宇宙論の現場の技 宇宙論の数値計算では、まさにこの \(u=\ln a\)(スケール因子の対数)を時間変数に使うのが定番です。急に変化する初期宇宙を等間隔で追えるようになり、計算が桁で速くなる。第1回で「\(c\cdot t=\text{一定}\) は計算が楽」と言ったのは、この“ものさしの貼り替え”のこと。新しい物理ではなく、賢い座標選びが本体でした。
正直な線(今回は軽く一枚)

「変数を変えると速くなる」は、問題がその変数で素直になるときだけ効きます。もともと全区間で一様な問題は、貼り替えても速くなりません(すでに素直だから)。今回うまくいったのは、\(c\cdot t=\text{一定}\) の宇宙が「序盤だけ急」という偏りを持っていたから。魔法ではなく、問題の偏りに合わせて“ものさし”を選ぶ、という技です。

練習問題(プログラムを書ける人は実際に動かしてみよう)
  1. STEP 01 のプログラムで \(\Delta t\) を \(0.01\) と \(0.0001\) にして \(D\) を比べると、値はどう変わると予想できるか。
    答えを見る
    細かくするほど、序盤の急な部分を正確に拾えるので \(D\) は大きくなり、真の値(発散に向かう)に近づきます。粗いきざみは序盤を取りこぼして \(D\) を小さく見積もってしまう。
  2. 変数を \(u=\ln t\) に変えたとき、光速 \(c=c_0t_0 e^{-u}\) が「なめらか」と言えるのはなぜか。
    答えを見る
    \(e^{-u}\) は \(u\) が変わっても変化率が穏やかで、\(t\) 軸のような無限に急な跳ね上がりがないから。急変がないので、等間隔の点でも曲線を追いこぼしません。
  3. 「変数変換による高速化」が効かない問題の例を、今回の考え方から1つ挙げよ。
    答えを見る
    最初から最後まで一定の速さで進むような、変化が一様な問題。偏りがないので、どんな“ものさし”に貼り替えても点の置き方は変わらず、速くなりません。(=すでに最適な符号になっている。)

まとめ式を「動かす」と、実利が見える

連続の式 \(\int c\,dt\) を、計算機の言葉(漸化式 \(D_{n+1}=D_n+c(t_n)\Delta t\))に直して、一歩ずつ足し上げた。若い宇宙で光速が跳ね上がり、光の届いた距離が対数的に伸び続ける ── 第1回の結論が、目の前のグラフで再現されました。

そして今回の芯は、\(u=\ln t\) へのものさしの貼り替え。情報を捨てずに、ただ座標を変えるだけで、急変の計算が桁で楽になる。第1回で「\(c\cdot t=\text{一定}\) は計算が楽」と言ったのは、この賢い座標選びのことでした。わかりやすい記法は、しばしばそのまま速い記法でもある ── それが今回、手を動かして見えたことです。

この文書は「わかる宇宙論」シリーズ第4回、物理好きの高校生向け読み物です。図はすべてブラウザ上でその場に計算した実データで、\(c(t)=c_0t_0/t\)、オイラー法による \(D=\int c\,dt\) の数値積分、\(u=\ln t\) への変数変換を可視化しています。数値は規格化した無次元の例です。変数変換による高速化(時間再パラメータ化)は数値計算・数値宇宙論で実際に用いられる手法です。 ── 印刷する場合はブラウザの「印刷」から「PDF に保存」を(印刷版では対話図と解答は静止・非表示になります)。

印刷 / PDF 化:⌘+P(Windows は Ctrl+P)。画面ではスライダーで図が再計算され、「答えを見る」で解答が開きます。