天気予報の数学(数値予報の基礎)
微分方程式を細かい時間刻みで解き進める「数値シミュレーション」としての天気予報
- 1
- 天気予報は過去の似た天気を検索する「統計的な当てずっぽう」ではなく、大気の運動方程式(微分方程式)を物理法則に基づいて未来へ計算し続ける「数値シミュレーション」である
- 2
- コンピュータは連続的な時間・空間を微小な時間刻み と格子に分割し、オイラー法などの「離散化」手法で一歩ずつ未来の状態を計算する(数値予報, NWP)
- 3
- このページでは1次元の温度分布が隣接点と熱を交換して滑らかになっていく「拡散方程式」の時間発展を通して、離散化シミュレーションの考え方を体感する(実際の気象モデルはこれよりはるかに複雑な3次元・多変数の方程式系である)
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
天気予報は過去の似た天気を検索する「統計的な当てずっぽう」ではなく、大気の運動方程式(微分方程式)を物理法則に基づいて未来へ計算し続ける「数値シミュレーション」である
身につく武器・思考力
コンピュータは連続的な時間・空間を微小な時間刻み $\Delta t$ と格子に分割し、オイラー法などの「離散化」手法で一歩ずつ未来の状態を計算する(数値予報, NWP)
実社会・ITでの活躍現場
- •1次元拡散モデルによる数値予報の時間積分シミュレーション(トイモデル)
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
1本の線上に並んだ「温度」の配列(1箇所だけ高温のスパイクがある初期状態)を用意し、「1ステップ進める」ボタンを押すたびに、各点の温度を「自分と両隣の平均」に近づける拡散の更新式が1回適用される。何ステップも押し続けると、鋭かった温度スパイクが徐々に周囲へ滲み出し、なだらかな山型に変化していく様子を観察できる。
各地点の値は、両隣との差(ラプラシアン)に比例した量だけ補正されます。を毎ステップ全地点に適用することで、鋭いスパイクが徐々に周囲へ滲み出していきます。
↑ 「1ステップ進める」を繰り返し押すと、中央の高温スパイクが左右になだらかに広がっていく様子が見えます。これは実際の数値天気予報(NWP)が行っている「微分方程式を時間刻みで解き進める」計算の、大幅に単純化した1次元版です。実際の予報モデルは気圧・風・水蒸気などを含む3次元の非線形方程式系を解いています。
数値天気予報がコンピュータの中で行っていることに最も近いのはどれか?
Layer 2 — 定義・受験・証明
定義
1次元空間上の温度分布を (位置 、時刻 における温度)とすると、熱(や大気中の物理量)が周囲へ広がっていく現象は次の拡散方程式(熱方程式)で記述される。
ここで は拡散係数である。この偏微分方程式を解析的に解く代わりに、コンピュータでは空間を格子点 に、時間を 刻みに離散化し、微分を差分で近似する「オイラー法」を用いて数値的に解く。
公式・数理モデル
証明・導出
有限差分近似(テイラー展開)による離散化の導出:
時間微分は、微小時間 後の値とのテイラー展開から前進差分で近似できる。
空間の2階微分(曲率に相当)は、両隣の点とのテイラー展開を組み合わせた中心差分で近似できる。
両式を足し合わせると1次の項が相殺し、
これらを元の拡散方程式 に代入し、 について解くと、
が得られる。この式は「自分の値を、両隣との差(ラプラシアン)に比例した量だけ補正する」という更新規則になっており、これを繰り返し適用することで、鋭い温度スパイクは物理的に正しく(拡散方程式の解として)滑らかに広がっていく。
注意点として、この前進差分法(陽解法オイラー法)は が一定の上限(1次元の場合 )を超えると数値的に発散してしまう(数値安定性の条件, CFL条件)。実際の気象モデルではこの制約を回避するため、より高度な時間積分スキームが使われている。
押さえておきたいポイント
- 天気予報は「過去の類似パターン検索」ではなく、流体力学・熱力学の支配方程式(ナビエ–ストークス方程式、熱力学方程式、水蒸気の保存則など)を数値的に解き進めるシミュレーションである
- 現実の大気は連続体なので、コンピュータで扱うために空間を格子(メッシュ)に、時間を微小なステップに区切る「離散化」が不可欠
- 離散化には時間刻み・格子間隔の取り方によって誤差や数値的不安定性が生じうるため、気象庁やECMWF等の現業モデルは非常に精緻な数値スキームと超高解像度の格子・膨大な観測データの同化(初期値の補正)を用いている
- 本トピックの1次元拡散モデルは「隣接点との平均化で滑らかになる」という直感を掴むための大幅な単純化であり、実際の数値予報は気圧・風速・湿度など多数の変数が相互作用する3次元の連立方程式系である
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
1次元拡散モデルによる数値予報の時間積分シミュレーション(トイモデル)
配列で表現した1次元の温度分布に対し、拡散方程式を陽解法オイラー法で離散化した更新式を繰り返し適用し、初期の鋭いスパイクが時間とともに滑らかに広がっていく様子をシミュレートする。実際の数値予報モデル(例: 気象庁のGSM、ECMWFのIFS)はこの考え方を3次元・多変数・非線形の方程式系に拡張し、スーパーコンピュータで計算している。
1// 1次元拡散方程式の陽解法オイラー法による時間積分(トイ数値予報モデル)2function stepDiffusion(u: number[], r: number): number[] {3 const n = u.length;4 const next = new Array(n).fill(0);56 for (let i = 0; i < n; i++) {7 const left = u[(i - 1 + n) % n]; // 境界は周期的とする(簡略化)8 const right = u[(i + 1) % n];9 const center = u[i];1011 // u_i^(t+1) = u_i^t + r * (右隣 - 2*自分 + 左隣)12 next[i] = center + r * (right - 2 * center + left);13 }1415 return next;16}1718// 初期状態: 1箇所だけ高温のスパイク(局所的な低気圧・熱源を模擬)19const gridSize = 20;20let temperature = new Array(gridSize).fill(10);21temperature[10] = 100; // 中央にスパイク2223// 数値安定性条件 r <= 0.5 を満たす拡散係数を設定24const r = 0.3;2526// 30ステップ(=30時刻分)シミュレーションを進める27for (let step = 0; step < 30; step++) {28 temperature = stepDiffusion(temperature, r);29}3031console.log("30ステップ後の温度分布:", temperature.map((v) => v.toFixed(1)));32// スパイクが崩れ、なだらかな山型分布へ収束していく
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元