スペクトル法によるPDE解法
微分を波数空間の掛け算に置き換え、少ない格子点で誤差が急減するスペクトル法の原理と、擬スペクトル法のエイリアシング対策までを押さえます。
- 解を大域的な基底(周期境界ならフーリエ、非周期ならチェビシェフ)で展開すると、微分が係数への単純な掛け算に化け、微分演算を厳密かつ高速に行えます。
- 十分に滑らかな解ではスペクトル収束(指数的収束)が効き、有限差分の代数的収束より圧倒的に少ない格子点で高精度を達成できます。
- 非線形項は物理空間での積として計算する擬スペクトル法が実用的ですが、積がエイリアシングで折り返し汚染を生むため、2/3則などのデアリアシングが必須です。
なぜ微分を「掛け算」に置き換えられるのか
有限差分法や有限要素法が解を局所的な多項式でつなぐ「局所近似」なのに対し、スペクトル法は解を領域全体にわたる大域的な基底関数の和で表現します。周期境界条件の問題であれば、解 u(x) を複素指数関数(フーリエ基底)の重ね合わせで書きます。
横にスクロール
フーリエ級数展開(周期 L、波数 k)
u(x) = Σ_k û_k * exp( i k x )
û_k : 波数 k のフーリエ係数(複素数)
k : 2π/L の整数倍(離散波数)
ここで x について微分すると、各項は exp(i k x) の形なので、微分は指数関数を保ったまま前に係数 i k を落とすだけになります。
微分のフーリエ空間での作用
d/dx exp(i k x) = (i k) * exp(i k x)
→ u'(x) のフーリエ係数は (i k) * û_k
→ u''(x) のフーリエ係数は (i k)^2 * û_k = -k^2 * û_k
つまり物理空間では微分(差分近似)だった操作が、波数空間では係数ベクトルへの対角な掛け算に化けます。これがスペクトル法の核心で、微分演算子がフーリエ基底に対して対角化されるという事実に尽きます。実際の計算はFFTで係数 {û_k} を得て、波数 i k を掛け、逆FFTで物理空間へ戻すという流れになり、微分1回あたり O(N log N) で済みます。差分のような打ち切り誤差は原理的に入らず、離散化された波数の範囲内では微分が厳密です。
等間隔格子上の離散フーリエ変換(DFT)は、まさにフーリエ基底 exp(i k x) への射影そのものです。FFTはDFTを O(N log N) で計算するアルゴリズムであり、スペクトル法にとってFFTは「基底展開の係数を高速に取り出す道具」です。FFTアルゴリズムの中身よりも、微分・積分といった演算子が波数空間で対角/単純な形になるという構造がPDE解法上の本質になります。分散環境での実装コストは並列FFTアルゴリズムで扱う転置通信が支配します。
スペクトル収束 ── 少ない点で高精度が出る理由
スペクトル法が有限差分・有限要素と決定的に違うのは収束の速さです。解が滑らか(無限回微分可能で周期的)なとき、フーリエ係数 û_k は k が大きくなるにつれて指数的に速く0へ減衰します。したがって有限個の波数で打ち切ったときの誤差も指数的に小さくなり、これをスペクトル収束(指数収束)と呼びます。
| 手法 | 収束の型 | 誤差の目安(格子点数N) |
|---|---|---|
| 有限差分(2次精度) | 代数的収束 | O(N^-2) |
| 有限要素(p次要素) | 代数的収束 | O(N^-p) |
| スペクトル法(滑らかな解) | 指数的収束 | 誤差がexp(-cN)級で減少 |
例えば差分法で誤差を4分の1にするには格子点をおよそ倍にする必要がありますが、スペクトル法では数点足すだけで誤差が桁で落ちることがあります。この「解像度あたりの情報密度の高さ」が、同じ精度をはるかに少ないメモリと演算で達成できる理由です。乱流の直接数値シミュレーション(DNS)でスペクトル法が長く標準であり続けてきたのも、限られた格子点で最大限の有効波数域を確保できるからにほかなりません。
指数収束は解の滑らかさに強く依存します。解に不連続や角(微分の不連続)があると、そのフーリエ係数は代数的にしか減衰せず、収束はO(N^-1)程度まで劣化します。さらに不連続点の近傍では、点を増やしても振動が消えないギブス現象が現れます。衝撃波を含む圧縮性流れなど非滑らかな解に素朴なフーリエ・スペクトル法を適用すると精度が出ないのは、この滑らかさの前提が破れるためです。
非周期問題とチェビシェフ基底
フーリエ基底が使えるのは周期境界条件のときだけです。壁のある流路や有限区間の問題では、両端で周期性が成り立たないため、フーリエ級数をそのまま当てると端点でギブス現象が起きます。そこで非周期の有界区間ではチェビシェフ多項式を基底に用います。
チェビシェフ多項式 T_n(x) は区間 [-1, 1] 上で定義され、変数変換 x = cos(θ) を通すと余弦級数、すなわちフーリエ級数に帰着します。この関係のおかげで、チェビシェフ係数の計算も余弦変換(FFTの一種)で O(N log N) にできます。さらに重要なのは格子点の取り方で、等間隔ではなく端点近くに密集するチェビシェフ・ガウス・ロバット点(両端で密、中央で粗)を使います。
等間隔点で高次多項式補間を行うと、区間の端で激しい振動が発生します(ルンゲ現象)。チェビシェフ点のように端点で密度を上げる分布はこの振動を抑え、多項式補間を安定化させます。結果としてチェビシェフ・スペクトル法は、非周期・境界付きの問題でもフーリエ法と同等のスペクトル収束を維持できます。境界条件は選点法(コロケーション)で端点の値へ直接課すのが標準的な扱いです。
チェビシェフ基底では微分はフーリエほど単純な対角行列にはならず、係数間の漸化式(または微分行列との積)で表されますが、波数空間的な扱いで微分を高精度化できる点は共通です。周期方向はフーリエ、壁に垂直な方向はチェビシェフ、というように基底を軸ごとに使い分ける構成が、チャネル乱流などの実務で広く使われています。
擬スペクトル法とエイリアシング(2/3則)
線形項は波数空間で対角な掛け算で済みますが、実務のPDEには非線形項(例えば移流項 u・∂u/∂x)が付きものです。非線形項を波数空間で直接畳み込みとして計算すると O(N^2) になり、スペクトル法の速度優位が消えてしまいます。そこで擬スペクトル法(pseudospectral method)を使います。考え方は単純で、掛け算だけを物理空間で行うというものです。
擬スペクトル法での非線形項 u * v の計算
1. û_k, v̂_k を逆FFTで物理空間の u(x), v(x) に戻す
2. 物理空間で点ごとに積 w(x) = u(x) * v(x) を計算(O(N))
3. w(x) をFFTで波数空間 ŵ_k に戻す
畳み込みを O(N^2) で解く代わりに、
FFT2回+逆FFT1回(各 O(N log N))で済む
ただしこの手続きには落とし穴があります。物理空間での積は波数空間では畳み込みに相当し、2つの波数 p と q の積は波数 p+q の成分を生みます。p+q が離散格子で表現できる最大波数を超えると、その高波数成分は折り返して低波数の偽の成分として混入します。これがエイリアシングで、放置すると解に非物理的なエネルギーが蓄積し、時間発展が不安定化することがあります。
表現できる最大波数を N/2 とすると、波数 N/2 に近い2つのモードの積は N を超える波数を生み、それがマイナス側へ折り返して低波数モードを汚染します。この偽エネルギーは本来散逸すべき高波数に乗るはずのものが低波数に化けたものなので、エネルギーが不自然に溜まり、乱流計算などでは発散の引き金になります。単なる精度低下ではなく安定性の問題である点が重要です。
対策の定番が2/3則(two-thirds rule)です。2次の非線形項(積が2つの関数の掛け算)であれば、保持する波数を全体の下側3分の2に切り詰め、上側3分の1をゼロで埋めておけば、積で生じる折り返し成分が有効波数域に入り込まなくなります。
2/3則によるデアリアシング(2次非線形の場合)
総モード数 N のうち
|k| が N/3 まで → 保持
|k| が N/3 を超える帯域 → 0 でパディング(切り捨て)
→ 積 p+q による折り返しが有効域を汚染しなくなる
→ 実効的な解像度は 2/3 に減るが、解は汚染から守られる
代償として実効的な解像度が3分の2に落ちるため、必要な有効波数を確保するには格子点をその分多めに取る必要があります。それでも、エイリアシング除去なしに安定な長時間積分は困難なため、DNSなどでは2/3則、あるいは位相をずらして2回計算し平均するフェーズシフト法が実務の標準対策になっています。
実務での位置づけ
スペクトル法は「滑らかな解・単純形状・高精度要求」という条件が揃う場面で圧倒的に強く、乱流DNS、地球流体、気象・気候モデルの一部などで使われ続けています。一方で複雑形状や不連続解には向かず、そこでは有限差分法と有限要素法や、両者の中間として要素内をスペクトル的に高次化するスペクトル要素法が選ばれます。並列化の観点では、時間発展の各ステップで複数回の多次元FFTを要するため、実行時間は領域分割法(並列PDE計算)で扱う分割戦略とFFT転置の通信コストに強く支配されます。
「なぜスペクトル法は速いのか」への答えは、微分がフーリエ基底に対して対角化され波数の掛け算になること、そして係数計算をFFTで O(N log N) にできることの2点です。「擬スペクトル法で必ず要る対策は」と問われたら、非線形項の物理空間での積が生むエイリアシングを2/3則などで除去することを挙げれば十分です。指数収束が解の滑らかさに依存し、不連続があればギブス現象で崩れるという限界もあわせて説明できると盤石です。
演算精度そのものも見落とせません。スペクトル法は微分誤差が極めて小さいぶん、丸め誤差やFFTの累積誤差が相対的に無視できなくなる領域まで踏み込むため、実装では数値安定性と浮動小数点誤差(HPC文脈)の考慮が精度の頭打ちを左右します。
まとめ
- スペクトル法は解を大域的な基底で展開し、微分を波数空間での対角な掛け算に置き換える手法で、微分を厳密かつ O(N log N) で計算できる。
- 解が滑らかならスペクトル収束(指数収束)が働き、有限差分・有限要素の代数的収束よりはるかに少ない格子点で高精度を達成できるが、不連続があればギブス現象で崩れる。
- 周期境界にはフーリエ基底、非周期・有界区間には端点で密なチェビシェフ基底を使い、軸ごとに基底を使い分ける構成が実務で一般的である。
- 非線形項は物理空間で積を取る擬スペクトル法が実用的だが、積が生むエイリアシングを2/3則などで除去しないと偽エネルギーが溜まり不安定化するため、デアリアシングは必須である。
HPC・科学技術計算の記事ガイド
スペクトル法によるPDE解法を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
HPC
比較で見る軸
難易度: advanced / カテゴリ: HPC・科学技術計算 / タグ数: 6
導入後に効く点
十分に滑らかな解ではスペクトル収束(指数的収束)が効き、有限差分の代数的収束より圧倒的に少ない格子点で高精度を達成できます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- HPC・科学技術計算
- タグ数
- 6
判断チェックリスト
- 自社の用途が「HPC / スペクトル法」に近いか確認する。
- 強みである「解を大域的な基底(周期境界ならフーリエ、非周期ならチェビシェフ)で展開すると、微分が係数への単純な掛け算に化け、微分演算を厳密かつ高速に行えます。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。