スペクトル法
理論:関数を波の重ね合わせで表す
概要
スペクトル法は精度がとても高いと聞きますが、差分法とどこが違うんですか?
差分法は、ある点の微分を両隣など近くの数点の値から求める。スペクトル法は、領域全体の値を波(三角関数)の重ね合わせとして表し、各波を正確に微分してから足し戻す。近くの点だけを使う差分法は、細かい波ほど速さや形を誤って表すが、スペクトル法は表せる範囲の波ならどれも正確に扱える。そのため解が滑らかなら、点数を増やすと誤差が急速に小さくなる。ただし、全体の点を使うので形状が複雑だと使いにくく、不連続があると振動が出る。
フーリエ級数による微分
係数は高速フーリエ変換(FFT)で求めるので、N 点で N log N 程度の計算量で済む。周期的でない問題では、チェビシェフ多項式を使い、両端に点を集めて配置する。
修正波数
差分法で微分すると、波数 k の波は k′ の波として扱われる。kh が大きい(1波長あたりの点数が少ない)ほど k′ が小さくなり、波が遅く進む。スペクトル法では k′ = k。
乱流のDNSを支えた方法
1972年、オルザグとパターソンは、周期境界の箱の中の乱流をスペクトル法で直接計算した。1987年には、キム、モイン、モーザーが平行平板間の乱流をフーリエ級数とチェビシェフ多項式を組み合わせて計算し、その結果は今も乱流モデルの検証に広く使われている。スペクトル法の精度が、限られた格子点で乱流の細かい渦まで正確に表すことを可能にした。FFTの発明(1965年)がこれを実用的にした。
計算例
例1:exp(sin x) の微分の最大誤差(周期 2π)
| 点数 | スペクトル法 | 2次中心差分 | 4次中心差分 |
|---|---|---|---|
| 8 | 4.3×10⁻³ | 3.4×10⁻¹ | 1.4×10⁻¹ |
| 16 | 1.8×10⁻⁷ | 9.4×10⁻² | 1.6×10⁻² |
| 32 | 3.8×10⁻¹⁵ | 2.6×10⁻² | 1.1×10⁻³ |
| 64 | 9.4×10⁻¹⁵ | 6.5×10⁻³ | 7.6×10⁻⁵ |
差分法は点数を2倍にすると誤差が1/4(2次)、1/16(4次)になるが、スペクトル法は32点で丸め誤差の水準に達し、それ以上は下がらない。
例2:波の速さを正しく表すのに必要な1波長あたりの点数
| 方法 | 誤差1%以内 | 誤差0.1%以内 |
|---|---|---|
| 2次中心差分 | 25.6 | 81.1 |
| 4次中心差分 | 8.3 | 15.0 |
| 6次中心差分 | 5.7 | 8.6 |
| スペクトル法 | 2点より多ければ誤差0 | 同左 |
3次元では点数が3乗で効く。誤差1%の2次差分(25.6点)と、エイリアシング対策込みで1波長3点程度のスペクトル法では、同じ波を表すのに必要な格子点数が約620倍違う。
例3:周期的でない関数(チェビシェフ法)
| 点数 | チェビシェフ法 | 等間隔の2次差分 |
|---|---|---|
| 17 | 6.5×10⁻¹ | 7.9×10⁻¹ |
| 33 | 5.4×10⁻² | 3.5×10⁻¹ |
| 65 | 1.9×10⁻⁴ | 9.3×10⁻² |
1/(1 + 25x²) の微分を区間 [−1, 1] で比べた。急に変化する関数では、点が少ないうちはスペクトル法でも誤差が大きいが、十分な点数を超えると急速に小さくなる。
点数が少ないうちは、チェビシェフ法も差分法もあまり変わらないんですね。
そうだ。スペクトル法の速い収束は、関数の一番細かい変化を表せるだけの点数があって初めて現れる。この関数は x = 0 付近の幅0.2ほどの山が細かい構造で、17点ではそれを表しきれていない。点数を4倍の65点にすると、差分法は誤差が約1/9だが、チェビシェフ法は約1/3,500になった。乱流のDNSでも同じで、最小の渦を表せる格子でないとスペクトル法の利点は出ない。逆に、衝撃波のような本当の不連続はどれだけ点を増やしても表しきれず、ギブス現象という振動が残る。
使いどころと注意点
- 形状が単純(周期箱・平板間・円管など)で解が滑らかな問題に使う。
- 非線形項は物理空間で積を計算し、3/2則などでエイリアシング誤差を除く。
- 周期的でない方向にはチェビシェフ多項式を使う。
- チェビシェフ点は両端で非常に細かくなるので、陽解法の時間刻みに注意する。
- 複雑な形状にはスペクトル要素法や高次の有限要素法を検討する。
「エネルギーが増え続けたDNS」
周期箱の乱流をスペクトル法で計算したところ、粘性で減っていくはずの運動エネルギーが、ある時刻から増え始めて発散した。原因は非線形項のエイリアシングで、速度の積を物理空間で計算した際に、表せない細かい波が粗い波に化けてエネルギーを持ち込んでいた。3/2則(計算時だけ点数を1.5倍にする)を入れると、エネルギーは単調に減るようになった。スペクトル法は精度が高い分、こうした誤差を数値粘性で隠すことがないので、目立って現れる。
よくある間違い
間違いと対策
| 間違い | 起きること | 対策 |
|---|---|---|
| エイリアシングを除かない | エネルギーが増えて発散 | 3/2則 |
| 不連続のある流れに使う | ギブス振動 | 有限体積法など |
| 非周期方向にフーリエ | 境界で大きな誤差 | チェビシェフ |
| 最小スケールを解像しない | 精度の利点が出ない | 格子を見直す |
| チェビシェフで大きな時間刻み | 陽解法が不安定 | 陰解法を併用 |
関連する内容も知りたいです。
なった
詳しく
報告