|TNKS1407 解説
← 解説一覧へ

なぜシミュレーションは壊れるのか ── 格子の上の、速度制限

2026.06.16

鎖のシミュレーションは、時間きざみを大きくすると、ある所で急に発散して暴れ出す。あれはバグじゃない。離散の世界には「1ステップに1マス」という速度制限があって、本物の波がそれを超えると、計算が追いつけなくなる。CFL条件=格子の上の因果律を、壊れる瞬間から掴む。

▶ 鎖が発散する瞬間を全画面で開く

前回、ばね玉の鎖 で「F=maF=ma から波が生まれる」のを見た。あの鎖、じつは計算機の中で動いている ── 各玉の運動方程式を、小さな 時間きざみ Δt\Delta t で一歩ずつ進めることで。普段は、波がきれいに左右へ走る。

ところが、遊び場の「時間きざみ Δt\Delta t」のつまみを上げていくと、ある所で急に、波が ギザギザに爆発して暴れ出す

最初に言っておくね。あれは、バグじゃない。 むしろ逆で、壊れ方そのものが、計算と物理をつなぐ、とてもきれいな本質を見せてくれている。今日はその「壊れる瞬間」を、入口にしよう。

① まず、壊してみる

下が、その鎖だ。最初から Δt\Delta t を限界の外(1.1)にして弾いてあるから、もう発散している ── 真ん中が静かな波じゃなく、トゲトゲに固まっているはずだ。つまみ「時間きざみ Δt\Delta t」を下げていくと、ある値(だいたい 1)を境に、すっと安定な波に戻る。逆に上げると、また壊れる。

不思議だよね。同じ運動方程式を解いているのに、Δt\Delta t を少し大きくしただけで、世界が崩壊する。なぜ「刻みの大きさ」ごときが、波の生死を分けるんだろう。

② 壊れ方を、よく見る ── 一番細かい波から死ぬ

ヒントは、壊れ方の形 にある。発散するとき、まっさきに暴れ出すのは、いつも 最高次のギザギザモード ── 隣どうしが逆向きに振れる、いちばん波長の短い揺れだ。なめらかな大きい波ではなく、つねに“一番細かい波”から先に爆発する。

前回、分散 の所で見たよね。鎖では、短い波ほど速く振動する(角振動数 ω\omega が大きい)。つまり、いちばん細かいギザギザは、鎖の中で いちばん速い波 なんだ。

「一番速い波から壊れる」── ここに、答えがほとんど出ている。

③ 1ステップに1マス ── 格子に組み込まれた速度制限

シミュレーションは、世界を二重に刻んでいる。時間Δt\Delta t ずつ、空間 を玉の間隔 aa ずつ。

ここで、ひとつ気づいてほしい。各ステップで、ある玉の情報は 隣の玉にしか伝わらない。運動方程式 my¨n=k(yn+12yn+yn1)m\ddot{y}_n = k(y_{n+1}-2y_n+y_{n-1}) が、両隣としか繋がっていないからだ。だから1ステップ(Δt\Delta t)のあいだに、報せが進めるのは、せいぜい1マス(aa)。

つまり、格子が情報を運べる速さには、上限がある

v格子=aΔt(1マス÷1ステップ)v_\text{格子} = \frac{a}{\Delta t}\qquad(\text{1マス} \div \text{1ステップ})

これは、格子に最初から組み込まれた 速度制限 だ。いっぽう、本物の波が進む速さは、前回出したとおり c=ak/mc = a\sqrt{k/m}

さあ、もし 本物の波のほうが、格子の速度制限より速かったら どうなる?

c>aΔtc > \frac{a}{\Delta t}

このとき、波は「格子が報せを送るより速く」進んでしまう。計算は、次に必要な値がもう隣を飛び越えた所にあって、捕まえられない。辻褄が合わなくなり ── 一番速い波(ギザギザ)から順に、破綻して発散する。②で見たことと、ぴたり一致するね。

Δt<a/c\Delta t < a/c ── CFL条件と、魔法の数字「1」

だから、安定でいるための条件は、ひとつだけ。波が、1ステップで1マス以上は進まないこと

cΔt  <  aΔt  <  acc\,\Delta t \;<\; a \qquad\Longleftrightarrow\qquad \Delta t \;<\; \frac{a}{c}

鎖では c=ak/mc = a\sqrt{k/m} だったから、aa が消えて

Δt  <  ac  =  mk\Delta t \;<\; \frac{a}{c} \;=\; \sqrt{\frac{m}{k}}

k=m=1k=m=1 なら、Δt<1\Delta t < 1。── そう、遊び場で見た、あの限界「1」の正体がこれだ。魔法の数字でも何でもなくて、「波がちょうど1マス進むのにかかる時間」。それより粗く時間を刻めば、波を追い越して壊れる。それだけのことだったんだ。

この指針には、ちゃんと名前がある。CFL条件(Courant–Friedrichs–Lewy、1928年)。比 C=cΔt/aC = c\,\Delta t / aクーラン数 といって、C<1C < 1 が安定の目安だ。波動方程式を計算機で解く人が、最初に必ず出会う壁だよ。

正直な但し書き。 限界がきっかり「C=1C=1」になるかどうかは、使う時間積分の方法によって少し変わる(係数が前後する)。でも、Δt\Delta ta/ca/c に比例するという骨格 ── 細かい格子(aa 小)や速い波(cc 大)ほど、刻みを細かくしないと壊れる ── は、どの方法でも変わらない。そこが本質だよ。

⑤ 本当は、格子の上の「因果律」だ

ここまでを、もう一段だけ深く見ておきたい。CFL条件の正体は、じつは 因果律(原因と結果の順序)だと思う。

物理では、時刻 tt・場所 xx の値は、過去にさかのぼった 波が届く範囲(依存領域)の中の情報だけで決まる。その外で何が起きていても、まだ届いていないのだから、関係ない。

計算機の側にも、同じものがある。ある格子点の新しい値は、過去のステップで 隣から隣へ伝わってきた格子点 の情報だけから計算される。これが「数値の依存領域」── ③で見た、1ステップ1マスで広がる三角形だ。

下の図で、その三角形を見てみよう。読み方はこう:縦軸が時間(上へいくほど “いま”)、横軸が空間。点々は格子点(いつ・どこ)を表す。いま知りたいのは、てっぺんの黒い点 ──「この場所の、この瞬間の値」だ。それを計算するには、1つ前のステップの両隣の値が要る。その両隣は、さらに前のステップのそれぞれの両隣が要る。…とさかのぼっていくと、過去へ向かって、1ステップにつき横へ1マスずつ広がる三角形になる。この三角形の中の格子点が、「いまの値を決めるのに、計算が実際にたどれる過去」=数値の依存領域だ。図の緑の三角形が、それにあたる。

求めたい点(いま) 過去 空間 → 計算が届く過去 (1ステップ1マス) 遅い波=中(安定) 速い波=はみ出す(発散)
縦=時間、横=空間。緑の三角形=計算が知っている過去(1ステップ1マスで広がる)。物理の波が遅ければ(橙)その中に収まり安定。速すぎると(赤・破線)三角形からはみ出す ── 必要な情報が計算の手の届かない所にあって、解きようがない=発散。

CFL条件とは、「物理の依存領域が、数値の依存領域の中に収まっていること」 だ。本物の波が、計算が知っている三角形の中から来るなら、必要な情報はぜんぶ手元にある ── 安定。波が速すぎて三角形をはみ出すと、計算は「まだ知らない所」の情報を必要としてしまう ── 原因より先に結果を求めるようなもので、破綻する。

これ、相対論の 光円錐 とそっくりだと思わない? 私はここが、この回でいちばん好きなところだ。

相対論では、光速 cc がすべての速さの上限で、「いま・ここ」の出来事に影響を与えられるのは、過去の 光円錐の内側 から来たものだけだ。円錐の外の出来事は、まだ光すら届いていないのだから、原因になりようがない。世界は「光円錐」という、因果の漏斗を持っている。

格子も、まったく同じ構造を持っている。組み込みの “光速” a/Δta/\Delta t(1ステップ1マス)があって、いま求めたい格子点に影響できるのは、さっきの 緑の三角形=“数値の光円錐” の内側 にある過去だけ。三角形の外の情報は、計算にとって「まだ届いていない」。だから、本物の波がその外側から来る速さ(c>a/Δtc > a/\Delta t)だと、計算は “光円錐の外にある原因” を必要としてしまって、解けない ── 発散とは、格子の因果律を破ろうとしたときの罰、とも言える。

面白いのは、これが単なる比喩じゃないこと。相対論の光円錐も、格子の数値円錐も、どちらも「情報には最大速度があり、知れるのは円錐の内側だけ」という、同じ一文の別バージョンなんだ。離散化するとは、世界に小さな光速と、小さな因果律を、一つ持ち込むこと ── 私には、そう見える。

(ここは正直、これだけで一本の記事が書けるくらい深い。依存領域・特性曲線・有限な情報速度…と、連続の波動方程式の “特性線” の話までまっすぐつながっていく。いつか単独で掘ってみたいテーマだ。)

遠くの灯台:陰解法。 「では、いつも Δt\Delta t を小さくするしかないの?」というと、抜け道がある。陰解法 は、1ステップで格子 全体を連立方程式として一度に解く。すると、報せが瞬時に全域へ届く=数値の依存領域が無限に広がり、物理の円錐を必ず含む。だから Δt\Delta t をいくら大きくしても発散しない(無条件安定)。その代わり、毎ステップ大きな連立を解く手間がかかる。“速度制限を上げるには、毎回もっと働く”── 世の中はうまくできているね。

まとめ

壊れる瞬間は、ただの失敗じゃなかった。離散と連続の境目を、いちばん正直に見せてくれる窓だったんだ。計算機で世界を真似るとき、私たちは「グリッドの上の、小さな物理」を作っている ── そこにも、ちゃんと速度制限と因果律がある。それを知ると、シミュレーションの発散が、少しだけ愛おしく見えてこないかな。