関数の値を格子点でしか知らないとき、その微分をどう求めればよいでしょうか。差分法は隣の数点だけを使いますが、この記事で扱うスペクトル法は、すべての格子点の値を使って、波の形をした関数(sin や cos、または多項式)の和で関数全体を近似します。関数が滑らかなときは、点を少し増やすだけで誤差が急に小さくなります。読み終えると、その理由と、うまくいかない場合(不連続な関数、折り返し)の見分け方が分かり、差分法との使い分けを判断できます。
スペクトル法は、解を区間全体で定義された滑らかな関数(三角多項式・代数多項式)の和で近似します。Fourier 切断 P N u P_Nu P N u の誤差は捨てた Fourier 係数だけで決まり、u ∈ H s u \in H^s u ∈ H s なら O ( N − s ) O(N^{-s}) O ( N − s ) 、u u u が実軸のまわりの帯状領域で正則なら O ( e − b N / 2 ) O(e^{-bN/2}) O ( e − b N /2 ) です。差分法や有限要素法のように「次数 p p p の方法」という上限がありません。
等間隔の N N N 点で関数を標本化すると、波数 n n n と n + m N n + mN n + m N の指数関数は区別できません(折り返し )。離散 Fourier 係数は u ~ k = ∑ m u ^ ( k + m N ) \tilde u_k = \sum_{m}\hat u(k + mN) u ~ k = ∑ m u ^ ( k + m N ) です。三角補間 I N u I_Nu I N u の誤差は、切断の誤差に折り返しの分が加わったもので、次数は切断と同じです。
補間した三角多項式を微分して格子点で値をとる操作は行列 D D D (スペクトル微分行列 )で書けます。D D D は歪対称な巡回行列で、固有値は i k ik ik (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )です。2 階微分のスペクトル半径 (固有値の絶対値の最大)は K 2 ≈ N 2 / 4 K^2 \approx N^2/4 K 2 ≈ N 2 /4 なので、陽的な時間積分の刻み幅は Δ t = O ( N − 2 ) \Delta t = O(N^{-2}) Δ t = O ( N − 2 ) に制限されます。
Galerkin 法は残差を近似空間に直交させ、選点法は格子点で方程式を満たさせます。両者の解の差は、右辺と「係数 × 解」の折り返し誤差で抑えられます。2 次の非線形項の折り返しは、3 K + 1 3K + 1 3 K + 1 点以上の細かい格子で積を作れば消せます(3/2 則)。
周期的でない問題では Chebyshev–Gauss–Lobatto 点 x j = cos ( j π / N ) x_j = \cos(j\pi/N) x j = cos ( j π / N ) を使います。Bernstein 楕円 E ρ E_\rho E ρ (焦点が ± 1 \pm1 ± 1 で区間 [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] を内側に含む楕円。この内側で関数が正則(複素微分できる)なら誤差が指数的に減る)で正則な関数の補間誤差は O ( ρ − N ) O(\rho^{-N}) O ( ρ − N ) 、導関数の誤差は O ( N 2 ρ − N ) O(N^2\rho^{-N}) O ( N 2 ρ − N ) です。点が端に O ( N − 2 ) O(N^{-2}) O ( N − 2 ) の間隔で集まるため、微分行列のノルムは N 2 N^2 N 2 、2 階では N 4 N^4 N 4 の大きさになります。
不連続な関数では、切断の誤差は一様には 0 に収束せず、不連続点から離れた点でも O ( 1 / N ) O(1/N) O ( 1/ N ) にとどまります。スペクトル法は滑らかな解に向く方法です。
この記事で使う事前知識
Fourier 係数 : 周期関数を e i k x e^{ikx} e ik x の和で表したときの、各波の大きさを表す数。→ Fourier 係数
Parseval の等式 : 関数の大きさ(L 2 L^2 L 2 ノルム)の 2 乗が、Fourier 係数の絶対値の 2 乗の和に等しいという関係。→ フーリエ級数
正規直交基底 : 長さ 1 で互いに直交するベクトル(関数)の集まりで、すべての元がその(無限和を含む)和で書けるもの。→ 正規直交基底
多項式補間と Chebyshev 点 : 与えられた点を通る多項式を作る方法。等間隔の点では Runge 現象で不安定になり、端に密な Chebyshev 点が安定。→ 多項式補間
Galerkin 近似 : 方程式の残りを近似空間に直交させて近似解を決める方法。→ 有限要素法 I
スペクトル半径 : 行列の固有値の絶対値の最大。→ スペクトル半径
2 次の中心差分 で u ′ ( x ) u'(x) u ′ ( x ) を近似すると誤差は O ( h 2 ) O(h^2) O ( h 2 ) 、4 次なら O ( h 4 ) O(h^4) O ( h 4 ) です。次数を上げるには、より多くの格子点の値を使います。では、すべての格子点の値を使ったらどうなるでしょうか。周期関数の場合、N N N 個の格子点の値をすべて通る三角多項式を作り、それを微分することになります。これが Fourier 選点法(擬スペクトル法)です。
§4 の数値実験では、u ( x ) = e sin x u(x) = e^{\sin x} u ( x ) = e s i n x の導関数を N = 33 N = 33 N = 33 点で計算すると、2 次の差分の誤差が 2.4 × 10 − 2 2.4 \times 10^{-2} 2.4 × 1 0 − 2 、4 次の差分が 1.0 × 10 − 3 1.0 \times 10^{-3} 1.0 × 1 0 − 3 であるのに対し、スペクトル微分の誤差は 3.2 × 10 − 15 3.2 \times 10^{-15} 3.2 × 1 0 − 15 です。誤差が N N N の冪ではなく指数関数で減るからです。一方 ∣ sin x ∣ 3 |\sin x|^3 ∣ sin x ∣ 3 のように滑らかさが有限の関数では、3 つの方法の誤差はどれも N − 2 N^{-2} N − 2 に比例して減り、差は定数倍にとどまります。
この章の目的は、この振る舞いを定理として述べて証明することです。鍵は 2 つあります。1 つは、近似の誤差が Fourier 係数の減り方で決まること(フーリエ級数 の Parseval の等式)。もう 1 つは、格子点での標本化が高い波数を低い波数に重ねてしまうこと(折り返し)で、これは周期関数の台形則が指数的に収束する理由(補外と Romberg 積分 )と同じ現象です。
離散 Fourier 変換を O ( N log N ) O(N\log N) O ( N log N ) の演算量で計算する算法(FFT)は、この章では道具として使うだけにします。コードでは numpy.fft を呼びます。
T = R / 2 π Z \mathbb{T} = \mathbb{R}/2\pi\mathbb{Z} T = R /2 π Z 上の関数(周期 2 π 2\pi 2 π の関数)を扱います。記号は フーリエ級数 に合わせ、e k ( x ) = e i k x e_k(x) = e^{ikx} e k ( x ) = e ik x 、
u ^ ( k ) = 1 2 π ∫ − π π u ( x ) e − i k x d x , ⟨ u , v ⟩ = 1 2 π ∫ − π π u v ˉ d x , ∥ u ∥ = ⟨ u , u ⟩ 1 / 2 \hat u(k) = \frac{1}{2\pi}\int_{-\pi}^{\pi}u(x)e^{-ikx}\,dx,\qquad \langle u, v\rangle = \frac{1}{2\pi}\int_{-\pi}^{\pi}u\,\bar v\,dx,\qquad \|u\| = \langle u, u\rangle^{1/2} u ^ ( k ) = 2 π 1 ∫ − π π u ( x ) e − ik x d x , ⟨ u , v ⟩ = 2 π 1 ∫ − π π u v ˉ d x , ∥ u ∥ = ⟨ u , u ⟩ 1/2
とします(定義 2.1[フーリエ級数] )。{ e k } \{e_k\} { e k } は L 2 ( T ) L^2(\mathbb{T}) L 2 ( T ) の正規直交基底 で、∥ u ∥ 2 = ∑ k ∣ u ^ ( k ) ∣ 2 \|u\|^2 = \sum_k|\hat u(k)|^2 ∥ u ∥ 2 = ∑ k ∣ u ^ ( k ) ∣ 2 です(定理 5.1[フーリエ級数] )。∥ u ∥ ∞ \|u\|_\infty ∥ u ∥ ∞ は最大値ノルムです。
この章を通じて、格子点の数 N N N は奇数とし、N = 2 K + 1 N = 2K + 1 N = 2 K + 1 と書きます(偶数の場合の扱いは 注意 5.3 で述べます)。
定義 2.1 (周期 Sobolev 空間と Fourier 切断 ) ↗
s ≥ 0 s \ge 0 s ≥ 0 と u ∈ L 2 ( T ) u \in L^2(\mathbb{T}) u ∈ L 2 ( T ) について
∣ u ∣ H s 2 = ∑ k ≠ 0 ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 , ∥ u ∥ H s 2 = ∑ k ∈ Z ( 1 + k 2 ) s ∣ u ^ ( k ) ∣ 2 |u|_{H^s}^2 = \sum_{k \ne 0}|k|^{2s}|\hat u(k)|^2,\qquad \|u\|_{H^s}^2 = \sum_{k\in\mathbb{Z}}(1 + k^2)^s|\hat u(k)|^2 ∣ u ∣ H s 2 = k = 0 ∑ ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 , ∥ u ∥ H s 2 = k ∈ Z ∑ ( 1 + k 2 ) s ∣ u ^ ( k ) ∣ 2 とおき、∥ u ∥ H s < ∞ \|u\|_{H^s} \lt \infty ∥ u ∥ H s < ∞ である u u u の全体を H p e r s H^s_{\mathrm{per}} H per s と書く。S N = s p a n { e k : ∣ k ∣ ≤ K } S_N = \mathrm{span}\{e_k : |k| \le K\} S N = span { e k : ∣ k ∣ ≤ K } (次数 K K K 以下の三角多項式の空間。次元は N N N )への L 2 L^2 L 2 直交射影
P N u = ∑ ∣ k ∣ ≤ K u ^ ( k ) e k P_Nu = \sum_{|k| \le K}\hat u(k)\,e_k P N u = ∣ k ∣ ≤ K ∑ u ^ ( k ) e k を Fourier 切断 という。u ∈ H p e r 1 u \in H^1_{\mathrm{per}} u ∈ H per 1 について、Fourier 係数が i k u ^ ( k ) ik\hat u(k) ik u ^ ( k ) である L 2 L^2 L 2 の元を u ′ u' u ′ と書く。
H s H^s H s は「s s s 回微分できて、その導関数の大きさが有限」という滑らかさを、Fourier 係数の減り方で測るものです。∣ k ∣ 2 s |k|^{2s} ∣ k ∣ 2 s の重みは、s s s 回微分すると k k k 番目の係数が ∣ k ∣ s |k|^s ∣ k ∣ s 倍になることに対応し、s s s が整数でなくても同じ式で滑らかさの度合いを表せます。
u u u が C 1 C^1 C 1 級なら、部分積分で u ′ ^ ( k ) = i k u ^ ( k ) \widehat{u'}(k) = ik\hat u(k) u ′ ( k ) = ik u ^ ( k ) となるので、この u ′ u' u ′ はふつうの導関数です。整数 s s s では ∣ u ∣ H s = ∥ u ( s ) ∥ |u|_{H^s} = \|u^{(s)}\| ∣ u ∣ H s = ∥ u ( s ) ∥ です。全空間の Sobolev 空間(定義 3.1[Sobolev 空間] )で Fourier 変換の重み ⟨ ξ ⟩ 2 s \langle\xi\rangle^{2s} ⟨ ξ ⟩ 2 s を使ったのと同じ定義を、Fourier 係数について行ったものです。
以下では s > 1 / 2 s \gt 1/2 s > 1/2 について Z s = ∑ m = 1 ∞ m − 2 s Z_s = \sum_{m=1}^{\infty}m^{-2s} Z s = ∑ m = 1 ∞ m − 2 s と書きます。m ≥ 2 m \ge 2 m ≥ 2 で m − 2 s ≤ ∫ m − 1 m x − 2 s d x m^{-2s} \le \int_{m-1}^{m}x^{-2s}dx m − 2 s ≤ ∫ m − 1 m x − 2 s d x なので Z s ≤ 1 + ∫ 1 ∞ x − 2 s d x = 2 s / ( 2 s − 1 ) Z_s \le 1 + \int_1^\infty x^{-2s}dx = 2s/(2s-1) Z s ≤ 1 + ∫ 1 ∞ x − 2 s d x = 2 s / ( 2 s − 1 ) です。
補題 2.2 (Fourier 係数が絶対総和可能な関数 ) ✓
u ∈ L 2 ( T ) u \in L^2(\mathbb{T}) u ∈ L 2 ( T ) が ∑ k ∣ u ^ ( k ) ∣ < ∞ \sum_k|\hat u(k)| \lt \infty ∑ k ∣ u ^ ( k ) ∣ < ∞ を満たすなら、u u u はほとんどいたるところで連続関数 g ( x ) = ∑ k u ^ ( k ) e i k x g(x) = \sum_k\hat u(k)e^{ikx} g ( x ) = ∑ k u ^ ( k ) e ik x (一様収束)に等しい。s > 1 / 2 s \gt 1/2 s > 1/2 で u ∈ H p e r s u \in H^s_{\mathrm{per}} u ∈ H per s ならこの仮定が成り立ち、
∑ k ≠ 0 ∣ u ^ ( k ) ∣ ≤ ( 2 Z s ) 1 / 2 ∣ u ∣ H s \sum_{k \ne 0}|\hat u(k)| \le (2Z_s)^{1/2}\,|u|_{H^s} k = 0 ∑ ∣ u ^ ( k ) ∣ ≤ ( 2 Z s ) 1/2 ∣ u ∣ H s である。
証明(補題 2.2) ∣ u ^ ( k ) e i k x ∣ = ∣ u ^ ( k ) ∣ |\hat u(k)e^{ikx}| = |\hat u(k)| ∣ u ^ ( k ) e ik x ∣ = ∣ u ^ ( k ) ∣ で ∑ k ∣ u ^ ( k ) ∣ < ∞ \sum_k|\hat u(k)| \lt \infty ∑ k ∣ u ^ ( k ) ∣ < ∞ なので、級数は一様収束し(系 6.4[関数列と一様収束] )、和 g g g は連続です(定理 4.1[関数列と一様収束] )。一様収束する級数は項別に積分できるので(定理 5.2[関数列と一様収束] を実部と虚部に使う)、g ^ ( n ) = ∑ k u ^ ( k ) ⟨ e k , e n ⟩ = u ^ ( n ) \hat g(n) = \sum_k\hat u(k)\langle e_k, e_n\rangle = \hat u(n) g ^ ( n ) = ∑ k u ^ ( k ) ⟨ e k , e n ⟩ = u ^ ( n ) です。したがって u − g u - g u − g の Fourier 係数はすべて 0 で、Parseval の等式(定理 5.1[フーリエ級数] )から ∥ u − g ∥ = 0 \|u - g\| = 0 ∥ u − g ∥ = 0 、すなわちほとんどいたるところで u = g u = g u = g です。
後半は Cauchy–Schwarz の不等式(命題 2.2[Hilbert 空間の基礎] を ℓ 2 \ell^2 ℓ 2 に使う)から
∑ k ≠ 0 ∣ u ^ ( k ) ∣ = ∑ k ≠ 0 ∣ k ∣ − s ⋅ ∣ k ∣ s ∣ u ^ ( k ) ∣ ≤ ( ∑ k ≠ 0 ∣ k ∣ − 2 s ) 1 / 2 ( ∑ k ≠ 0 ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 ) 1 / 2 = ( 2 Z s ) 1 / 2 ∣ u ∣ H s \sum_{k\ne0}|\hat u(k)| = \sum_{k\ne0}|k|^{-s}\cdot|k|^{s}|\hat u(k)| \le \Bigl(\sum_{k\ne0}|k|^{-2s}\Bigr)^{1/2}\Bigl(\sum_{k\ne0}|k|^{2s}|\hat u(k)|^2\Bigr)^{1/2} = (2Z_s)^{1/2}|u|_{H^s} k = 0 ∑ ∣ u ^ ( k ) ∣ = k = 0 ∑ ∣ k ∣ − s ⋅ ∣ k ∣ s ∣ u ^ ( k ) ∣ ≤ ( k = 0 ∑ ∣ k ∣ − 2 s ) 1/2 ( k = 0 ∑ ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 ) 1/2 = ( 2 Z s ) 1/2 ∣ u ∣ H s です。
∎
以下、この補題の仮定を満たす u u u は連続な代表元 g g g と同一視します。全空間での対応する結果は 定理 4.1[Sobolev 空間] です。
定理 2.3 (Fourier 切断の誤差 ) ✓
0 ≤ r ≤ s 0 \le r \le s 0 ≤ r ≤ s 、u ∈ H p e r s u \in H^s_{\mathrm{per}} u ∈ H per s 、N = 2 K + 1 N = 2K + 1 N = 2 K + 1 とする。このとき
∣ u − P N u ∣ H r ≤ ( K + 1 ) r − s ∣ u ∣ H s ≤ ( N 2 ) r − s ∣ u ∣ H s , ∥ u − P N u ∥ H r ≤ 2 r / 2 ( K + 1 ) r − s ∣ u ∣ H s |u - P_Nu|_{H^r} \le (K+1)^{r-s}\,|u|_{H^s} \le \Bigl(\frac N2\Bigr)^{r-s}|u|_{H^s},\qquad \|u - P_Nu\|_{H^r} \le 2^{r/2}(K+1)^{r-s}\,|u|_{H^s} ∣ u − P N u ∣ H r ≤ ( K + 1 ) r − s ∣ u ∣ H s ≤ ( 2 N ) r − s ∣ u ∣ H s , ∥ u − P N u ∥ H r ≤ 2 r /2 ( K + 1 ) r − s ∣ u ∣ H s が成り立つ。r = 0 r = 0 r = 0 では左辺は ∥ u − P N u ∥ \|u - P_Nu\| ∥ u − P N u ∥ である。また P N u P_Nu P N u は、S N S_N S N の元のうち ∥ u − v ∥ H r \|u - v\|_{H^r} ∥ u − v ∥ H r を最小にするものである。
証明(定理 2.3) u − P N u u - P_Nu u − P N u の Fourier 係数は、∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K で 0、∣ k ∣ > K |k| \gt K ∣ k ∣ > K で u ^ ( k ) \hat u(k) u ^ ( k ) です。∣ k ∣ ≥ K + 1 |k| \ge K + 1 ∣ k ∣ ≥ K + 1 と r − s ≤ 0 r - s \le 0 r − s ≤ 0 から ∣ k ∣ 2 r = ∣ k ∣ 2 ( r − s ) ∣ k ∣ 2 s ≤ ( K + 1 ) 2 ( r − s ) ∣ k ∣ 2 s |k|^{2r} = |k|^{2(r-s)}|k|^{2s} \le (K+1)^{2(r-s)}|k|^{2s} ∣ k ∣ 2 r = ∣ k ∣ 2 ( r − s ) ∣ k ∣ 2 s ≤ ( K + 1 ) 2 ( r − s ) ∣ k ∣ 2 s なので
∣ u − P N u ∣ H r 2 = ∑ ∣ k ∣ > K ∣ k ∣ 2 r ∣ u ^ ( k ) ∣ 2 ≤ ( K + 1 ) 2 ( r − s ) ∑ ∣ k ∣ > K ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 ≤ ( K + 1 ) 2 ( r − s ) ∣ u ∣ H s 2 |u - P_Nu|_{H^r}^2 = \sum_{|k| \gt K}|k|^{2r}|\hat u(k)|^2 \le (K+1)^{2(r-s)}\sum_{|k| \gt K}|k|^{2s}|\hat u(k)|^2 \le (K+1)^{2(r-s)}|u|_{H^s}^2 ∣ u − P N u ∣ H r 2 = ∣ k ∣ > K ∑ ∣ k ∣ 2 r ∣ u ^ ( k ) ∣ 2 ≤ ( K + 1 ) 2 ( r − s ) ∣ k ∣ > K ∑ ∣ k ∣ 2 s ∣ u ^ ( k ) ∣ 2 ≤ ( K + 1 ) 2 ( r − s ) ∣ u ∣ H s 2 です。K + 1 > N / 2 K + 1 \gt N/2 K + 1 > N /2 から 2 番目の不等式が出ます。∣ k ∣ ≥ 1 |k| \ge 1 ∣ k ∣ ≥ 1 では 1 + k 2 ≤ 2 k 2 1 + k^2 \le 2k^2 1 + k 2 ≤ 2 k 2 なので ∥ u − P N u ∥ H r 2 ≤ 2 r ∣ u − P N u ∣ H r 2 \|u - P_Nu\|_{H^r}^2 \le 2^r|u - P_Nu|_{H^r}^2 ∥ u − P N u ∥ H r 2 ≤ 2 r ∣ u − P N u ∣ H r 2 です。r = 0 r = 0 r = 0 では u − P N u u - P_Nu u − P N u に k = 0 k = 0 k = 0 の成分がないので ∣ u − P N u ∣ H 0 = ∥ u − P N u ∥ |u - P_Nu|_{H^0} = \|u - P_Nu\| ∣ u − P N u ∣ H 0 = ∥ u − P N u ∥ です。
最後の主張を示します。v = ∑ ∣ k ∣ ≤ K b k e k ∈ S N v = \sum_{|k|\le K}b_ke_k \in S_N v = ∑ ∣ k ∣ ≤ K b k e k ∈ S N について
∥ u − v ∥ H r 2 = ∑ ∣ k ∣ ≤ K ( 1 + k 2 ) r ∣ u ^ ( k ) − b k ∣ 2 + ∑ ∣ k ∣ > K ( 1 + k 2 ) r ∣ u ^ ( k ) ∣ 2 \|u - v\|_{H^r}^2 = \sum_{|k|\le K}(1+k^2)^r|\hat u(k) - b_k|^2 + \sum_{|k| \gt K}(1+k^2)^r|\hat u(k)|^2 ∥ u − v ∥ H r 2 = ∣ k ∣ ≤ K ∑ ( 1 + k 2 ) r ∣ u ^ ( k ) − b k ∣ 2 + ∣ k ∣ > K ∑ ( 1 + k 2 ) r ∣ u ^ ( k ) ∣ 2 で、第 1 項は b k = u ^ ( k ) b_k = \hat u(k) b k = u ^ ( k ) のとき 0 になり、第 2 項は v v v によりません。
∎
この定理が「スペクトル精度」の中身です。u u u が滑らかであるほど(s s s が大きいほど)誤差の次数が上がり、方法の側に次数の上限がありません。u u u が C ∞ C^\infty C ∞ 級なら、誤差は N N N のどの冪よりも速く減ります。
切断 P N u P_Nu P N u を作るには Fourier 係数の積分が要ります。計算では、格子点での値だけから近似を作ります。
定義 3.1 (離散 Fourier 係数と三角補間 ) ↗
N = 2 K + 1 N = 2K+1 N = 2 K + 1 、格子点を x j = 2 π j / N x_j = 2\pi j/N x j = 2 π j / N (j = 0 , … , N − 1 j = 0, \ldots, N-1 j = 0 , … , N − 1 )とする。連続な周期関数 u u u について
u ~ k = 1 N ∑ j = 0 N − 1 u ( x j ) e − i k x j ( k ∈ Z ) , I N u = ∑ ∣ k ∣ ≤ K u ~ k e k \tilde u_k = \frac1N\sum_{j=0}^{N-1}u(x_j)e^{-ikx_j}\quad(k \in \mathbb{Z}),\qquad I_Nu = \sum_{|k|\le K}\tilde u_k\,e_k u ~ k = N 1 j = 0 ∑ N − 1 u ( x j ) e − ik x j ( k ∈ Z ) , I N u = ∣ k ∣ ≤ K ∑ u ~ k e k を離散 Fourier 係数 、三角補間 という。整数 n n n に対し、n ≡ n ∗ ( m o d N ) n \equiv n^{*} \pmod N n ≡ n ∗ ( mod N ) かつ ∣ n ∗ ∣ ≤ K |n^{*}| \le K ∣ n ∗ ∣ ≤ K を満たすただ 1 つの整数を n ∗ n^{*} n ∗ と書き、n ≠ n ∗ n \ne n^{*} n = n ∗ のとき、波数 n n n は波数 n ∗ n^{*} n ∗ に折り返される (エイリアシング)という。
補題 3.2 (指標の離散的な直交性と補間の一意性 ) ✓
N = 2 K + 1 N = 2K+1 N = 2 K + 1 、x j = 2 π j / N x_j = 2\pi j/N x j = 2 π j / N とする。
整数 n n n について、1 N ∑ j = 0 N − 1 e i n x j \frac1N\sum_{j=0}^{N-1}e^{inx_j} N 1 ∑ j = 0 N − 1 e in x j は n n n が N N N の倍数のとき 1、そうでないとき 0 である。
v , w ∈ S N v, w \in S_N v , w ∈ S N について 1 N ∑ j = 0 N − 1 v ( x j ) w ( x j ) ‾ = ⟨ v , w ⟩ \frac1N\sum_{j=0}^{N-1}v(x_j)\overline{w(x_j)} = \langle v, w\rangle N 1 ∑ j = 0 N − 1 v ( x j ) w ( x j ) = ⟨ v , w ⟩ 。
連続な周期関数 u u u について、I N u I_Nu I N u は p ( x j ) = u ( x j ) p(x_j) = u(x_j) p ( x j ) = u ( x j ) (j = 0 , … , N − 1 j = 0, \ldots, N-1 j = 0 , … , N − 1 )を満たすただ 1 つの p ∈ S N p \in S_N p ∈ S N である。
証明(補題 3.2)
ω = e 2 π i n / N \omega = e^{2\pi in/N} ω = e 2 π in / N とおくと和は 1 N ∑ j = 0 N − 1 ω j \frac1N\sum_{j=0}^{N-1}\omega^j N 1 ∑ j = 0 N − 1 ω j です。n n n が N N N の倍数なら ω = 1 \omega = 1 ω = 1 で和は 1。そうでなければ ω ≠ 1 \omega \ne 1 ω = 1 、ω N = 1 \omega^N = 1 ω N = 1 なので、等比数列の和の公式から ∑ j = 0 N − 1 ω j = ( ω N − 1 ) / ( ω − 1 ) = 0 \sum_{j=0}^{N-1}\omega^j = (\omega^N - 1)/(\omega - 1) = 0 ∑ j = 0 N − 1 ω j = ( ω N − 1 ) / ( ω − 1 ) = 0 です。
v = ∑ ∣ k ∣ ≤ K a k e k v = \sum_{|k|\le K}a_ke_k v = ∑ ∣ k ∣ ≤ K a k e k 、w = ∑ ∣ l ∣ ≤ K b l e l w = \sum_{|l|\le K}b_le_l w = ∑ ∣ l ∣ ≤ K b l e l と書くと
1 N ∑ j v ( x j ) w ( x j ) ‾ = ∑ k , l a k b ˉ l ⋅ 1 N ∑ j e i ( k − l ) x j \frac1N\sum_jv(x_j)\overline{w(x_j)} = \sum_{k,l}a_k\bar b_l\cdot\frac1N\sum_je^{i(k-l)x_j} N 1 j ∑ v ( x j ) w ( x j ) = k , l ∑ a k b ˉ l ⋅ N 1 j ∑ e i ( k − l ) x j です。∣ k − l ∣ ≤ 2 K < N |k - l| \le 2K \lt N ∣ k − l ∣ ≤ 2 K < N なので、k − l k - l k − l が N N N の倍数になるのは k = l k = l k = l のときだけです。1 から右辺は ∑ k a k b ˉ k \sum_ka_k\bar b_k ∑ k a k b ˉ k で、これは { e k } \{e_k\} { e k } の正規直交性から ⟨ v , w ⟩ \langle v, w\rangle ⟨ v , w ⟩ に等しくなります。
p = I N u p = I_Nu p = I N u が補間の条件を満たすことを確かめます。
I N u ( x l ) = ∑ ∣ k ∣ ≤ K 1 N ∑ j u ( x j ) e i k ( x l − x j ) = ∑ j u ( x j ) ⋅ 1 N ∑ k = − K K ω l j k , ω l j = e 2 π i ( l − j ) / N I_Nu(x_l) = \sum_{|k|\le K}\frac1N\sum_ju(x_j)e^{ik(x_l - x_j)} = \sum_ju(x_j)\cdot\frac1N\sum_{k=-K}^{K}\omega_{lj}^k,\qquad \omega_{lj} = e^{2\pi i(l-j)/N} I N u ( x l ) = ∣ k ∣ ≤ K ∑ N 1 j ∑ u ( x j ) e ik ( x l − x j ) = j ∑ u ( x j ) ⋅ N 1 k = − K ∑ K ω l j k , ω l j = e 2 π i ( l − j ) / N です。l = j l = j l = j なら ω l j = 1 \omega_{lj} = 1 ω l j = 1 で内側の和は 1 です。l ≠ j l \ne j l = j なら ω l j ≠ 1 \omega_{lj} \ne 1 ω l j = 1 、ω l j N = 1 \omega_{lj}^N = 1 ω l j N = 1 で、∑ k = − K K ω l j k = ω l j − K ( ω l j N − 1 ) / ( ω l j − 1 ) = 0 \sum_{k=-K}^{K}\omega_{lj}^k = \omega_{lj}^{-K}(\omega_{lj}^N - 1)/(\omega_{lj} - 1) = 0 ∑ k = − K K ω l j k = ω l j − K ( ω l j N − 1 ) / ( ω l j − 1 ) = 0 です。したがって I N u ( x l ) = u ( x l ) I_Nu(x_l) = u(x_l) I N u ( x l ) = u ( x l ) 。一意性: p , q ∈ S N p, q \in S_N p , q ∈ S N が同じ補間の条件を満たせば、p − q ∈ S N p - q \in S_N p − q ∈ S N はすべての格子点で 0 なので、2 から ∥ p − q ∥ 2 = 1 N ∑ j ∣ ( p − q ) ( x j ) ∣ 2 = 0 \|p - q\|^2 = \frac1N\sum_j|(p-q)(x_j)|^2 = 0 ∥ p − q ∥ 2 = N 1 ∑ j ∣ ( p − q ) ( x j ) ∣ 2 = 0 です。
∎
2 は、S N S_N S N の元どうしの内積が台形則で厳密に計算できることを言っています。周期関数の台形則が三角多項式に対して厳密であること(定理 3.2[数値積分 II] )の言い換えです。
次の補題は、格子点の値だけから作った係数 u ~ k \tilde u_k u ~ k が、本来の係数 u ^ ( k ) \hat u(k) u ^ ( k ) とどう違うかを与えます。たとえば N = 5 N = 5 N = 5 なら、波数 3 3 3 の波は格子点の上で波数 − 2 -2 − 2 の波と同じ値をとるので、3 ∗ = − 2 3^{*} = -2 3 ∗ = − 2 です。具体的な数値は §4 の例で確かめます。
補題 3.3 (折り返しの公式 ) ✓
u u u を連続な周期関数で ∑ n ∣ u ^ ( n ) ∣ < ∞ \sum_n|\hat u(n)| \lt \infty ∑ n ∣ u ^ ( n ) ∣ < ∞ を満たすものとする。このとき、すべての整数 k k k について
u ~ k = ∑ m ∈ Z u ^ ( k + m N ) \tilde u_k = \sum_{m\in\mathbb{Z}}\hat u(k + mN) u ~ k = m ∈ Z ∑ u ^ ( k + m N ) が成り立つ。また I N e n = e n ∗ I_Ne_n = e_{n^{*}} I N e n = e n ∗ (n ∈ Z n \in \mathbb{Z} n ∈ Z )で、
I N u = ∑ n ∈ Z u ^ ( n ) e n ∗ , u − I N u = ∑ ∣ n ∣ > K u ^ ( n ) ( e n − e n ∗ ) I_Nu = \sum_{n\in\mathbb{Z}}\hat u(n)\,e_{n^{*}},\qquad u - I_Nu = \sum_{|n| \gt K}\hat u(n)\,(e_n - e_{n^{*}}) I N u = n ∈ Z ∑ u ^ ( n ) e n ∗ , u − I N u = ∣ n ∣ > K ∑ u ^ ( n ) ( e n − e n ∗ ) である(どちらも一様に絶対収束する)。
証明(補題 3.3) 補題 2.2 から、すべての点で u ( x ) = ∑ n u ^ ( n ) e i n x u(x) = \sum_n\hat u(n)e^{inx} u ( x ) = ∑ n u ^ ( n ) e in x です。x = x j x = x_j x = x j を代入して定義に入れ、有限和と絶対収束する級数を入れ替えると
u ~ k = 1 N ∑ j = 0 N − 1 ∑ n u ^ ( n ) e i ( n − k ) x j = ∑ n u ^ ( n ) ⋅ 1 N ∑ j = 0 N − 1 e i ( n − k ) x j \tilde u_k = \frac1N\sum_{j=0}^{N-1}\sum_n\hat u(n)e^{i(n-k)x_j} = \sum_n\hat u(n)\cdot\frac1N\sum_{j=0}^{N-1}e^{i(n-k)x_j} u ~ k = N 1 j = 0 ∑ N − 1 n ∑ u ^ ( n ) e i ( n − k ) x j = n ∑ u ^ ( n ) ⋅ N 1 j = 0 ∑ N − 1 e i ( n − k ) x j です。補題 3.2 の 1 から、内側の和は n − k n - k n − k が N N N の倍数のとき 1、そうでないとき 0 なので、n = k + m N n = k + mN n = k + m N の項だけが残ります。
u = e n u = e_n u = e n では u ^ ( n ) = 1 \hat u(n) = 1 u ^ ( n ) = 1 で他の係数は 0 なので、∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K について、u ~ k \tilde u_k u ~ k は k ≡ n ( m o d N ) k \equiv n \pmod N k ≡ n ( mod N ) すなわち k = n ∗ k = n^{*} k = n ∗ のとき 1、そうでないとき 0 です。よって I N e n = e n ∗ I_Ne_n = e_{n^{*}} I N e n = e n ∗ です。一般の u u u では、最初の式から
I N u = ∑ ∣ k ∣ ≤ K ∑ m u ^ ( k + m N ) e k = ∑ n u ^ ( n ) e n ∗ I_Nu = \sum_{|k|\le K}\sum_m\hat u(k + mN)\,e_k = \sum_n\hat u(n)\,e_{n^{*}} I N u = ∣ k ∣ ≤ K ∑ m ∑ u ^ ( k + m N ) e k = n ∑ u ^ ( n ) e n ∗ です(n = k + m N n = k + mN n = k + m N と書くと n ∗ = k n^{*} = k n ∗ = k で、( k , m ) (k, m) ( k , m ) と n n n は 1 対 1 に対応する)。∣ n ∣ ≤ K |n| \le K ∣ n ∣ ≤ K では n ∗ = n n^{*} = n n ∗ = n なので、u = ∑ n u ^ ( n ) e n u = \sum_n\hat u(n)e_n u = ∑ n u ^ ( n ) e n との差は ∣ n ∣ > K |n| \gt K ∣ n ∣ > K の項だけが残ります。∣ e n − e n ∗ ∣ ≤ 2 |e_n - e_{n^{*}}| \le 2 ∣ e n − e n ∗ ∣ ≤ 2 と ∑ ∣ u ^ ( n ) ∣ < ∞ \sum|\hat u(n)| \lt \infty ∑ ∣ u ^ ( n ) ∣ < ∞ から収束は一様かつ絶対です。
∎
標本化定理(定理 2.1[標本化定理とウェーブレット] )は、帯域が制限された関数は十分細かい標本から復元できると述べ、Nyquist 率より粗い標本では復元できない例がありました(命題 2.2[標本化定理とウェーブレット] )。折り返しの公式は、その周期関数版を定量的にしたものです。N N N 点の格子が区別できる波数は ∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K の N N N 個だけで、それより高い波数の成分は消えるのではなく、低い波数の成分に加わります。
次の定理の証明は、誤差を「低い波数の係数に高い波数が折り返された分」と「K K K より高い波数を捨てた分」の 2 つに分け、それぞれを Cauchy–Schwarz の不等式で抑える流れです。
定理 3.4 (三角補間の誤差 ) ✓
s > 1 / 2 s \gt 1/2 s > 1/2 、u ∈ H p e r s u \in H^s_{\mathrm{per}} u ∈ H per s 、N = 2 K + 1 N = 2K+1 N = 2 K + 1 とする。このとき
∥ u − I N u ∥ ≤ ( 1 + 2 Z s ) 1 / 2 ( 2 N ) s ∣ u ∣ H s \|u - I_Nu\| \le (1 + 2Z_s)^{1/2}\Bigl(\frac2N\Bigr)^{s}|u|_{H^s} ∥ u − I N u ∥ ≤ ( 1 + 2 Z s ) 1/2 ( N 2 ) s ∣ u ∣ H s が成り立つ。
証明(定理 3.4) 補題 2.2 から ∑ ∣ u ^ ( n ) ∣ < ∞ \sum|\hat u(n)| \lt \infty ∑ ∣ u ^ ( n ) ∣ < ∞ なので 補題 3.3 が使えます。I N u I_Nu I N u の Fourier 係数は、∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K で u ~ k = u ^ ( k ) + ∑ m ≠ 0 u ^ ( k + m N ) \tilde u_k = \hat u(k) + \sum_{m\ne0}\hat u(k+mN) u ~ k = u ^ ( k ) + ∑ m = 0 u ^ ( k + m N ) 、∣ k ∣ > K |k| \gt K ∣ k ∣ > K で 0 です。Parseval の等式(定理 5.1[フーリエ級数] )から
∥ u − I N u ∥ 2 = ∑ ∣ k ∣ ≤ K ∣ ∑ m ≠ 0 u ^ ( k + m N ) ∣ 2 ⏟ 折り返しの誤差 + ∑ ∣ n ∣ > K ∣ u ^ ( n ) ∣ 2 ⏟ 切断の誤差 \|u - I_Nu\|^2 = \underbrace{\sum_{|k|\le K}\Bigl|\sum_{m\ne0}\hat u(k+mN)\Bigr|^2}_{\text{折り返しの誤差}} + \underbrace{\sum_{|n| \gt K}|\hat u(n)|^2}_{\text{切断の誤差}} ∥ u − I N u ∥ 2 = 折り返しの誤差 ∣ k ∣ ≤ K ∑ m = 0 ∑ u ^ ( k + m N ) 2 + 切断の誤差 ∣ n ∣ > K ∑ ∣ u ^ ( n ) ∣ 2 です。第 2 項は 定理 2.3 (r = 0 r = 0 r = 0 )の証明から ( 2 / N ) 2 s ∑ ∣ n ∣ > K ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 (2/N)^{2s}\sum_{|n| \gt K}|n|^{2s}|\hat u(n)|^2 ( 2/ N ) 2 s ∑ ∣ n ∣ > K ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 以下です。
第 1 項を評価します。∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K 、m ≠ 0 m \ne 0 m = 0 のとき ∣ k + m N ∣ ≥ ∣ m ∣ N − K ≥ ∣ m ∣ N − N / 2 ≥ ∣ m ∣ N / 2 |k + mN| \ge |m|N - K \ge |m|N - N/2 \ge |m|N/2 ∣ k + m N ∣ ≥ ∣ m ∣ N − K ≥ ∣ m ∣ N − N /2 ≥ ∣ m ∣ N /2 なので
∑ m ≠ 0 ∣ k + m N ∣ − 2 s ≤ 2 ∑ m = 1 ∞ ( m N 2 ) − 2 s = 2 Z s ( 2 N ) 2 s \sum_{m\ne0}|k+mN|^{-2s} \le 2\sum_{m=1}^{\infty}\Bigl(\frac{mN}{2}\Bigr)^{-2s} = 2Z_s\Bigl(\frac2N\Bigr)^{2s} m = 0 ∑ ∣ k + m N ∣ − 2 s ≤ 2 m = 1 ∑ ∞ ( 2 m N ) − 2 s = 2 Z s ( N 2 ) 2 s です。Cauchy–Schwarz の不等式(命題 2.2[Hilbert 空間の基礎] )から
∣ ∑ m ≠ 0 u ^ ( k + m N ) ∣ 2 ≤ ∑ m ≠ 0 ∣ k + m N ∣ − 2 s ⋅ ∑ m ≠ 0 ∣ k + m N ∣ 2 s ∣ u ^ ( k + m N ) ∣ 2 ≤ 2 Z s ( 2 N ) 2 s ∑ m ≠ 0 ∣ k + m N ∣ 2 s ∣ u ^ ( k + m N ) ∣ 2 \Bigl|\sum_{m\ne0}\hat u(k+mN)\Bigr|^2 \le \sum_{m\ne0}|k+mN|^{-2s}\cdot\sum_{m\ne0}|k+mN|^{2s}|\hat u(k+mN)|^2 \le 2Z_s\Bigl(\frac2N\Bigr)^{2s}\sum_{m\ne0}|k+mN|^{2s}|\hat u(k+mN)|^2 m = 0 ∑ u ^ ( k + m N ) 2 ≤ m = 0 ∑ ∣ k + m N ∣ − 2 s ⋅ m = 0 ∑ ∣ k + m N ∣ 2 s ∣ u ^ ( k + m N ) ∣ 2 ≤ 2 Z s ( N 2 ) 2 s m = 0 ∑ ∣ k + m N ∣ 2 s ∣ u ^ ( k + m N ) ∣ 2 です。∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K について足します。∣ n ∣ > K |n| \gt K ∣ n ∣ > K である整数 n n n は n = k + m N n = k + mN n = k + m N (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K 、m ≠ 0 m \ne 0 m = 0 )とただ 1 通りに書けるので、右辺の和は ∑ ∣ n ∣ > K ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 \sum_{|n| \gt K}|n|^{2s}|\hat u(n)|^2 ∑ ∣ n ∣ > K ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 になります。2 つの項を合わせて
∥ u − I N u ∥ 2 ≤ ( 2 Z s + 1 ) ( 2 N ) 2 s ∑ ∣ n ∣ > K ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 ≤ ( 1 + 2 Z s ) ( 2 N ) 2 s ∣ u ∣ H s 2 \|u - I_Nu\|^2 \le (2Z_s + 1)\Bigl(\frac2N\Bigr)^{2s}\sum_{|n| \gt K}|n|^{2s}|\hat u(n)|^2 \le (1 + 2Z_s)\Bigl(\frac2N\Bigr)^{2s}|u|_{H^s}^2 ∥ u − I N u ∥ 2 ≤ ( 2 Z s + 1 ) ( N 2 ) 2 s ∣ n ∣ > K ∑ ∣ n ∣ 2 s ∣ u ^ ( n ) ∣ 2 ≤ ( 1 + 2 Z s ) ( N 2 ) 2 s ∣ u ∣ H s 2 です。
∎
補間の誤差は切断の誤差と同じ次数 N − s N^{-s} N − s です。ただし仮定が s > 1 / 2 s \gt 1/2 s > 1/2 に強まっています。補間は点での値を使うので、u u u が連続でなければ意味をもたないからです。
u u u が実軸のまわりで正則なら、Fourier 係数は指数的に減衰します(補題 3.1[数値積分 II] )。これを前節の式に入れると、誤差も指数的に減ります。
補題 4.1 (等比級数の裾 ) ✓
0 < q < 1 0 \lt q \lt 1 0 < q < 1 、K ≥ 0 K \ge 0 K ≥ 0 とする。このとき
∑ n > K q n = q K + 1 1 − q , ∑ n > K n q n ≤ ( K + 1 ) q K + 1 ( 1 − q ) 2 \sum_{n \gt K}q^n = \frac{q^{K+1}}{1-q},\qquad \sum_{n \gt K}n\,q^n \le \frac{(K+1)\,q^{K+1}}{(1-q)^2} n > K ∑ q n = 1 − q q K + 1 , n > K ∑ n q n ≤ ( 1 − q ) 2 ( K + 1 ) q K + 1 である。
証明(補題 4.1) 1 つ目は等比級数の和(命題 3.6[級数と収束判定] )に q K + 1 q^{K+1} q K + 1 を掛けたものです。2 つ目を示します。まず ∑ j ≥ 1 j q j = ∑ i ≥ 1 ∑ j ≥ i q j = ∑ i ≥ 1 q i / ( 1 − q ) = q / ( 1 − q ) 2 \sum_{j\ge1}jq^j = \sum_{i\ge1}\sum_{j\ge i}q^j = \sum_{i\ge1}q^i/(1-q) = q/(1-q)^2 ∑ j ≥ 1 j q j = ∑ i ≥ 1 ∑ j ≥ i q j = ∑ i ≥ 1 q i / ( 1 − q ) = q / ( 1 − q ) 2 です(非負の項の二重級数なので和の順序を入れ替えてよい)。n = K + j n = K + j n = K + j (j ≥ 1 j \ge 1 j ≥ 1 )と書くと K + j ≤ ( K + 1 ) j K + j \le (K+1)j K + j ≤ ( K + 1 ) j なので
∑ n > K n q n = q K ∑ j ≥ 1 ( K + j ) q j ≤ ( K + 1 ) q K ∑ j ≥ 1 j q j = ( K + 1 ) q K + 1 ( 1 − q ) 2 \sum_{n \gt K}n\,q^n = q^K\sum_{j\ge1}(K + j)q^j \le (K+1)\,q^K\sum_{j\ge1}jq^j = \frac{(K+1)\,q^{K+1}}{(1-q)^2} n > K ∑ n q n = q K j ≥ 1 ∑ ( K + j ) q j ≤ ( K + 1 ) q K j ≥ 1 ∑ j q j = ( 1 − q ) 2 ( K + 1 ) q K + 1 です。
∎
定理 4.2 (解析関数に対する指数収束 ) ✓
a > 0 a \gt 0 a > 0 とし、u u u は帯状領域 { z : ∣ I m z ∣ < a } \{z : |\mathrm{Im}\,z| \lt a\} { z : ∣ Im z ∣ < a } で正則で、u ( z + 2 π ) = u ( z ) u(z + 2\pi) = u(z) u ( z + 2 π ) = u ( z ) 、そこで ∣ u ∣ ≤ M |u| \le M ∣ u ∣ ≤ M とする。0 < b < a 0 \lt b \lt a 0 < b < a 、N = 2 K + 1 N = 2K+1 N = 2 K + 1 とすると
∥ u − P N u ∥ ∞ ≤ 2 M e b − 1 e − b K , ∥ u − I N u ∥ ∞ ≤ 4 M e b − 1 e − b K , ∥ u ′ − ( I N u ) ′ ∥ ∞ ≤ 4 M e b ( e b − 1 ) 2 ( K + 1 ) e − b K \begin{aligned}
\|u - P_Nu\|_\infty &\le \frac{2M}{e^{b}-1}\,e^{-bK},\\
\|u - I_Nu\|_\infty &\le \frac{4M}{e^{b}-1}\,e^{-bK},\\
\|u' - (I_Nu)'\|_\infty &\le \frac{4M\,e^{b}}{(e^{b}-1)^2}\,(K+1)\,e^{-bK}
\end{aligned} ∥ u − P N u ∥ ∞ ∥ u − I N u ∥ ∞ ∥ u ′ − ( I N u ) ′ ∥ ∞ ≤ e b − 1 2 M e − b K , ≤ e b − 1 4 M e − b K , ≤ ( e b − 1 ) 2 4 M e b ( K + 1 ) e − b K が成り立つ。K = ( N − 1 ) / 2 K = (N-1)/2 K = ( N − 1 ) /2 なので、右辺はそれぞれ O ( e − b N / 2 ) O(e^{-bN/2}) O ( e − b N /2 ) 、O ( e − b N / 2 ) O(e^{-bN/2}) O ( e − b N /2 ) 、O ( N e − b N / 2 ) O(Ne^{-bN/2}) O ( N e − b N /2 ) である。
証明(定理 4.2) 補題 3.1[数値積分 II] から ∣ u ^ ( n ) ∣ ≤ M e − b ∣ n ∣ |\hat u(n)| \le Me^{-b|n|} ∣ u ^ ( n ) ∣ ≤ M e − b ∣ n ∣ です。q = e − b q = e^{-b} q = e − b とおきます。とくに ∑ n ∣ n ∣ ∣ u ^ ( n ) ∣ < ∞ \sum_n|n||\hat u(n)| \lt \infty ∑ n ∣ n ∣∣ u ^ ( n ) ∣ < ∞ です。
切断: 補題 2.2 から u = ∑ n u ^ ( n ) e n u = \sum_n\hat u(n)e_n u = ∑ n u ^ ( n ) e n (一様収束)なので、補題 4.1 から
∣ u ( x ) − P N u ( x ) ∣ ≤ ∑ ∣ n ∣ > K ∣ u ^ ( n ) ∣ ≤ 2 M ∑ n > K q n = 2 M q K + 1 1 − q = 2 M e b − 1 e − b K |u(x) - P_Nu(x)| \le \sum_{|n| \gt K}|\hat u(n)| \le 2M\sum_{n \gt K}q^n = \frac{2Mq^{K+1}}{1-q} = \frac{2M}{e^b - 1}e^{-bK} ∣ u ( x ) − P N u ( x ) ∣ ≤ ∣ n ∣ > K ∑ ∣ u ^ ( n ) ∣ ≤ 2 M n > K ∑ q n = 1 − q 2 M q K + 1 = e b − 1 2 M e − b K です。
補間: 補題 3.3 の u − I N u = ∑ ∣ n ∣ > K u ^ ( n ) ( e n − e n ∗ ) u - I_Nu = \sum_{|n| \gt K}\hat u(n)(e_n - e_{n^{*}}) u − I N u = ∑ ∣ n ∣ > K u ^ ( n ) ( e n − e n ∗ ) と ∣ e n − e n ∗ ∣ ≤ 2 |e_n - e_{n^{*}}| \le 2 ∣ e n − e n ∗ ∣ ≤ 2 から、切断の評価の 2 倍になります。
導関数: 級数 ∑ n u ^ ( n ) e n \sum_n\hat u(n)e_n ∑ n u ^ ( n ) e n を項別に微分した級数 ∑ n i n u ^ ( n ) e n \sum_nin\hat u(n)e_n ∑ n in u ^ ( n ) e n は ∑ ∣ n ∣ ∣ u ^ ( n ) ∣ < ∞ \sum|n||\hat u(n)| \lt \infty ∑ ∣ n ∣∣ u ^ ( n ) ∣ < ∞ から一様収束するので、u u u は C 1 C^1 C 1 級で u ′ = ∑ n i n u ^ ( n ) e n u' = \sum_nin\hat u(n)e_n u ′ = ∑ n in u ^ ( n ) e n です(定理 7.3[関数列と一様収束] を実部と虚部に使う)。同じ理由で ∑ n u ^ ( n ) e n ∗ \sum_n\hat u(n)e_{n^{*}} ∑ n u ^ ( n ) e n ∗ も項別に微分でき(∣ e n ∗ ′ ∣ = ∣ n ∗ ∣ ≤ ∣ n ∣ |e_{n^{*}}'| = |n^{*}| \le |n| ∣ e n ∗ ′ ∣ = ∣ n ∗ ∣ ≤ ∣ n ∣ )、
u ′ − ( I N u ) ′ = ∑ ∣ n ∣ > K u ^ ( n ) i ( n e n − n ∗ e n ∗ ) u' - (I_Nu)' = \sum_{|n| \gt K}\hat u(n)\,i\,(n\,e_n - n^{*}e_{n^{*}}) u ′ − ( I N u ) ′ = ∣ n ∣ > K ∑ u ^ ( n ) i ( n e n − n ∗ e n ∗ ) です。∣ n ∗ ∣ ≤ K < ∣ n ∣ |n^{*}| \le K \lt |n| ∣ n ∗ ∣ ≤ K < ∣ n ∣ なので各項の絶対値は 2 ∣ n ∣ ∣ u ^ ( n ) ∣ 2|n||\hat u(n)| 2∣ n ∣∣ u ^ ( n ) ∣ 以下で、補題 4.1 から
∥ u ′ − ( I N u ) ′ ∥ ∞ ≤ 2 ∑ ∣ n ∣ > K ∣ n ∣ ∣ u ^ ( n ) ∣ ≤ 4 M ∑ n > K n q n ≤ 4 M ( K + 1 ) q K + 1 ( 1 − q ) 2 = 4 M e b ( e b − 1 ) 2 ( K + 1 ) e − b K \|u' - (I_Nu)'\|_\infty \le 2\sum_{|n| \gt K}|n||\hat u(n)| \le 4M\sum_{n \gt K}nq^n \le \frac{4M(K+1)q^{K+1}}{(1-q)^2} = \frac{4Me^{b}}{(e^b-1)^2}(K+1)e^{-bK} ∥ u ′ − ( I N u ) ′ ∥ ∞ ≤ 2 ∣ n ∣ > K ∑ ∣ n ∣∣ u ^ ( n ) ∣ ≤ 4 M n > K ∑ n q n ≤ ( 1 − q ) 2 4 M ( K + 1 ) q K + 1 = ( e b − 1 ) 2 4 M e b ( K + 1 ) e − b K です(最後は分母と分子に e 2 b e^{2b} e 2 b を掛けた)。
∎
格子点での ( I N u ) ′ (I_Nu)' ( I N u ) ′ の値が、次節のスペクトル微分行列による計算結果です。
例 4.3 (スペクトル微分と中心差分 )
u ( x ) = e sin x u(x) = e^{\sin x} u ( x ) = e s i n x は整関数で、∣ e sin z ∣ ≤ e cosh a |e^{\sin z}| \le e^{\cosh a} ∣ e s i n z ∣ ≤ e c o s h a (∣ I m z ∣ ≤ a |\mathrm{Im}\,z| \le a ∣ Im z ∣ ≤ a )なので、任意の a a a で 定理 4.2 が使えます。一方 u ( x ) = ∣ sin x ∣ 3 u(x) = |\sin x|^3 u ( x ) = ∣ sin x ∣ 3 は C 2 C^2 C 2 級ですが 3 階導関数が x = 0 , π x = 0, \pi x = 0 , π で跳びます。それぞれの導関数を、2 次の中心差分、4 次の中心差分、スペクトル微分で近似し、格子点での最大誤差を比べます。
# Python 3.9.6 / NumPy 2.0.2
def spectral_derivative ( v ) :
""" 奇数 N 点(x_j = 2πj/N)の格子値から、三角補間の導関数の格子値を返す。 """
k = np.fft. fftfreq ( N , d = 1.0 / N ) # 0, 1, ..., K, -K, ..., -1
return np. real ( np.fft. ifft ( 1 j * k * np.fft. fft ( v )))
return (np. roll ( v , - 1 ) - np. roll ( v , 1 )) / ( 2 * h)
return ( 8 * (np. roll ( v , - 1 ) - np. roll ( v , 1 )) - (np. roll ( v , - 2 ) - np. roll ( v , 2 ))) / ( 12 * h)
cases = [ ( " exp(sin x) " , lambda x : np. exp ( np. sin ( x )), lambda x : np. cos ( x ) * np. exp ( np. sin ( x ))),
( " |sin x|^3 " , lambda x : np. abs ( np. sin ( x )) ** 3 , lambda x : 3 * np. sin ( x ) * np. abs ( np. sin ( x )) * np. cos ( x )) ]
for name, f, df in cases:
print ( " N 2nd-order FD 4th-order FD spectral " )
for N in [ 9 , 17 , 33 , 65 , 129 , 257 ] :
x = 2 * np.pi * np. arange ( N ) / N
errs = [ np. max ( np. abs ( d - exact )) for d in ( fd2 ( v , h ), fd4 ( v , h ), spectral_derivative ( v )) ]
print ( f " {N :5d } {errs [ 0 ] :.3e } {errs [ 1 ] :.3e } {errs [ 2 ] :.3e } " )
N 2nd-order FD 4th-order FD spectral
9 2.795e-01 1.186e-01 4.946e-03
17 8.909e-02 1.318e-02 1.891e-07
33 2.435e-02 1.033e-03 3.195e-15
65 6.322e-03 7.133e-05 1.121e-14
129 1.608e-03 4.642e-06 8.682e-14
257 4.054e-04 2.952e-07 1.064e-13
N 2nd-order FD 4th-order FD spectral
9 4.696e-01 2.781e-01 7.078e-02
17 1.496e-01 7.070e-02 1.911e-02
33 4.238e-02 1.598e-02 5.558e-03
65 1.104e-02 3.817e-03 1.516e-03
129 2.814e-03 9.468e-04 3.973e-04
257 7.099e-04 2.371e-04 1.018e-04
e sin x e^{\sin x} e s i n x では、差分の誤差が N N N を 2 倍にするごとに約 1 / 4 1/4 1/4 、約 1 / 16 1/16 1/16 になるのに対し、スペクトル微分は N = 33 N = 33 N = 33 で丸めの大きさに達します。それ以降は誤差が少しずつ増えています。微分は波数 k k k の成分の丸め誤差を k k k 倍するので、丸め誤差の寄与が N N N に比例して増えるためです。∣ sin x ∣ 3 |\sin x|^3 ∣ sin x ∣ 3 では 3 つとも N N N を 2 倍にするごとに約 1 / 4 1/4 1/4 で、方法の次数ではなく関数の滑らかさが誤差を決めています。
例 4.4 (高い波数が低い波数に見える )
N = 9 N = 9 N = 9 (K = 4 K = 4 K = 4 )の格子で sin ( n x ) \sin(nx) sin ( n x ) を標本化し、離散 Fourier 係数が 0 でない波数を調べます。補題 3.3 によれば、sin ( n x ) \sin(nx) sin ( n x ) は格子点の上で sin ( n ∗ x ) \sin(n^{*}x) sin ( n ∗ x ) と一致するはずです。
# Python 3.9.6 / NumPy 2.0.2
x = 2 * np.pi * np. arange ( N ) / N
k = np.fft. fftfreq ( N , d = 1.0 / N ). astype ( int )
for n in [ 3 , 7 , 11 , 13 , 22 ] :
c = np.fft. fft ( v ) / N # 離散 Fourier 係数
support = sorted ( int ( kk ) for kk , cc in zip ( k , c ) if abs ( cc ) > 1e-12 )
alias = (n + N // 2 ) % N - N // 2 # n と N を法として合同な |k| <= K の整数
diff = np. max ( np. abs ( v - np. sin ( alias * x )))
print ( f "n = {n :2d } : nonzero at k = {support} , alias = {alias :2d } , "
f "max_j |sin(n x_j) - sin(alias x_j)| = {diff :.1e } " )
n = 3: nonzero at k = [-3, 3], alias = 3, max_j |sin(n x_j) - sin(alias x_j)| = 0.0e+00
n = 7: nonzero at k = [-2, 2], alias = -2, max_j |sin(n x_j) - sin(alias x_j)| = 4.9e-15
n = 11: nonzero at k = [-2, 2], alias = 2, max_j |sin(n x_j) - sin(alias x_j)| = 4.9e-15
n = 13: nonzero at k = [-4, 4], alias = 4, max_j |sin(n x_j) - sin(alias x_j)| = 2.4e-15
n = 22: nonzero at k = [-4, 4], alias = 4, max_j |sin(n x_j) - sin(alias x_j)| = 8.1e-15
7 = − 2 + 9 7 = -2 + 9 7 = − 2 + 9 、11 = 2 + 9 11 = 2 + 9 11 = 2 + 9 、13 = 4 + 9 13 = 4 + 9 13 = 4 + 9 、22 = 4 + 2 ⋅ 9 22 = 4 + 2\cdot9 22 = 4 + 2 ⋅ 9 のとおりです。sin ( 7 x ) \sin(7x) sin ( 7 x ) は格子の上では sin ( − 2 x ) = − sin ( 2 x ) \sin(-2x) = -\sin(2x) sin ( − 2 x ) = − sin ( 2 x ) と区別できません。
定義 5.1 (スペクトル微分行列 ) ↗
N = 2 K + 1 N = 2K+1 N = 2 K + 1 、x j = 2 π j / N x_j = 2\pi j/N x j = 2 π j / N とする。格子値のベクトル v = ( v 0 , … , v N − 1 ) \boldsymbol{v} = (v_0, \ldots, v_{N-1}) v = ( v 0 , … , v N − 1 ) に対し、p ( x j ) = v j p(x_j) = v_j p ( x j ) = v j を満たす p ∈ S N p \in S_N p ∈ S N (補題 3.2 の 3)をとり、( D v ) j = p ′ ( x j ) (D\boldsymbol{v})_j = p'(x_j) ( D v ) j = p ′ ( x j ) で定まる N N N 次の行列 D D D をスペクトル微分行列 という。
命題 5.2 (スペクトル微分行列の成分と固有値 ) ✓
定義 5.1 の D D D について次が成り立つ。
D j j = 0 D_{jj} = 0 D j j = 0 で、j ≠ l j \ne l j = l のとき
D j l = ( − 1 ) j − l 2 sin ( ( x j − x l ) / 2 ) . D_{jl} = \frac{(-1)^{j-l}}{2\sin\bigl((x_j - x_l)/2\bigr)}. D j l = 2 sin ( ( x j − x l ) /2 ) ( − 1 ) j − l .
D D D は実の歪対称行列(D T = − D D^{\mathsf T} = -D D T = − D )で、巡回行列である(D j l D_{jl} D j l は j − l j - l j − l を N N N で割った余りだけで決まる)。
v k = ( e i k x j ) j = 0 N − 1 \boldsymbol{v}_k = (e^{ikx_j})_{j=0}^{N-1} v k = ( e ik x j ) j = 0 N − 1 (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )は互いに直交する D D D の固有ベクトルで、D v k = i k v k D\boldsymbol{v}_k = ik\,\boldsymbol{v}_k D v k = ik v k 。D D D の固有値は i k ik ik (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )ですべてであり、∥ D ∥ 2 = K \|D\|_2 = K ∥ D ∥ 2 = K 。
2 階微分の行列(p ′ ′ ( x j ) p''(x_j) p ′′ ( x j ) を与える行列)は D 2 D^2 D 2 に等しく、実対称で、固有値は − k 2 -k^2 − k 2 (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )、スペクトル半径は K 2 = ( N − 1 ) 2 / 4 K^2 = (N-1)^2/4 K 2 = ( N − 1 ) 2 /4 である。
証明(命題 5.2)
C ( x ) = 1 N ∑ ∣ k ∣ ≤ K e i k x C(x) = \frac1N\sum_{|k|\le K}e^{ikx} C ( x ) = N 1 ∑ ∣ k ∣ ≤ K e ik x とおくと、定義 3.1 から
p ( x ) = ∑ ∣ k ∣ ≤ K 1 N ∑ l v l e i k ( x − x l ) = ∑ l = 0 N − 1 v l C ( x − x l ) p(x) = \sum_{|k|\le K}\frac1N\sum_lv_le^{ik(x - x_l)} = \sum_{l=0}^{N-1}v_l\,C(x - x_l) p ( x ) = ∣ k ∣ ≤ K ∑ N 1 l ∑ v l e ik ( x − x l ) = l = 0 ∑ N − 1 v l C ( x − x l ) なので、D j l = C ′ ( x j − x l ) D_{jl} = C'(x_j - x_l) D j l = C ′ ( x j − x l ) です。Dirichlet 核の公式(補題 3.1[フーリエ級数] )から、x x x が 2 π 2\pi 2 π の整数倍でないとき C ( x ) = sin ( N x / 2 ) / ( N sin ( x / 2 ) ) C(x) = \sin(Nx/2)/(N\sin(x/2)) C ( x ) = sin ( N x /2 ) / ( N sin ( x /2 )) で、
C ′ ( x ) = N 2 cos N x 2 sin x 2 − 1 2 sin N x 2 cos x 2 N sin 2 x 2 C'(x) = \frac{\frac N2\cos\frac{Nx}2\,\sin\frac x2 - \frac12\sin\frac{Nx}2\,\cos\frac x2}{N\sin^2\frac x2} C ′ ( x ) = N sin 2 2 x 2 N cos 2 N x sin 2 x − 2 1 sin 2 N x cos 2 x です。x = x j − x l = 2 π ( j − l ) / N x = x_j - x_l = 2\pi(j-l)/N x = x j − x l = 2 π ( j − l ) / N (j ≠ l j \ne l j = l )では N x / 2 = π ( j − l ) Nx/2 = \pi(j-l) N x /2 = π ( j − l ) なので sin ( N x / 2 ) = 0 \sin(Nx/2) = 0 sin ( N x /2 ) = 0 、cos ( N x / 2 ) = ( − 1 ) j − l \cos(Nx/2) = (-1)^{j-l} cos ( N x /2 ) = ( − 1 ) j − l で、C ′ ( x ) = ( − 1 ) j − l / ( 2 sin ( x / 2 ) ) C'(x) = (-1)^{j-l}/(2\sin(x/2)) C ′ ( x ) = ( − 1 ) j − l / ( 2 sin ( x /2 )) となります。j = l j = l j = l では C ′ ( 0 ) = 1 N ∑ ∣ k ∣ ≤ K i k = 0 C'(0) = \frac1N\sum_{|k|\le K}ik = 0 C ′ ( 0 ) = N 1 ∑ ∣ k ∣ ≤ K ik = 0 です。
j j j と l l l を入れ替えると、( − 1 ) j − l (-1)^{j-l} ( − 1 ) j − l は変わらず、sin ( ( x j − x l ) / 2 ) \sin((x_j - x_l)/2) sin (( x j − x l ) /2 ) は符号が変わるので D l j = − D j l D_{lj} = -D_{jl} D l j = − D j l 。j − l j - l j − l を j − l + N j - l + N j − l + N に置き換えると、( − 1 ) j − l (-1)^{j-l} ( − 1 ) j − l は N N N が奇数なので符号が変わり、sin ( π ( j − l ) / N + π ) = − sin ( π ( j − l ) / N ) \sin(\pi(j-l)/N + \pi) = -\sin(\pi(j-l)/N) sin ( π ( j − l ) / N + π ) = − sin ( π ( j − l ) / N ) も符号が変わるので、D j l D_{jl} D j l は変わりません。
e k ∈ S N e_k \in S_N e k ∈ S N は自分自身の補間なので、定義から ( D v k ) j = e k ′ ( x j ) = i k e i k x j (D\boldsymbol{v}_k)_j = e_k'(x_j) = ik\,e^{ikx_j} ( D v k ) j = e k ′ ( x j ) = ik e ik x j です。補題 3.2 の 2 から 1 N v l ∗ v k = ⟨ e k , e l ⟩ \frac1N\boldsymbol{v}_l^{*}\boldsymbol{v}_k = \langle e_k, e_l\rangle N 1 v l ∗ v k = ⟨ e k , e l ⟩ で、これは k = l k = l k = l のとき 1、そうでないとき 0 です。したがって { v k / N } ∣ k ∣ ≤ K \{\boldsymbol{v}_k/\sqrt N\}_{|k|\le K} { v k / N } ∣ k ∣ ≤ K は C N \mathbb{C}^N C N の正規直交基底で、D D D の固有値は i k ik ik (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )の N N N 個ですべてです。x = ∑ k c k v k / N \boldsymbol{x} = \sum_kc_k\boldsymbol{v}_k/\sqrt N x = ∑ k c k v k / N と展開すると ∥ D x ∥ 2 2 = ∑ k k 2 ∣ c k ∣ 2 ≤ K 2 ∥ x ∥ 2 2 \|D\boldsymbol{x}\|_2^2 = \sum_kk^2|c_k|^2 \le K^2\|\boldsymbol{x}\|_2^2 ∥ D x ∥ 2 2 = ∑ k k 2 ∣ c k ∣ 2 ≤ K 2 ∥ x ∥ 2 2 で、x = v K \boldsymbol{x} = \boldsymbol{v}_K x = v K で等号が成り立つので ∥ D ∥ 2 = K \|D\|_2 = K ∥ D ∥ 2 = K です。
p ∈ S N p \in S_N p ∈ S N なら p ′ ∈ S N p' \in S_N p ′ ∈ S N なので、p ′ p' p ′ の格子値 D v D\boldsymbol{v} D v を補間する S N S_N S N の元は p ′ p' p ′ 自身で、その導関数 p ′ ′ p'' p ′′ の格子値は D ( D v ) D(D\boldsymbol{v}) D ( D v ) です。D 2 D^2 D 2 は ( D 2 ) T = ( D T ) 2 = D 2 (D^2)^{\mathsf T} = (D^{\mathsf T})^2 = D^2 ( D 2 ) T = ( D T ) 2 = D 2 から対称で、3 から D 2 v k = − k 2 v k D^2\boldsymbol{v}_k = -k^2\boldsymbol{v}_k D 2 v k = − k 2 v k です。絶対値が最大の固有値は − K 2 -K^2 − K 2 です。
∎
D D D は密行列ですが、3 から、D v D\boldsymbol{v} D v は「離散 Fourier 変換をして i k ik ik を掛けて逆変換する」ことで計算できます。例 4.3 の spectral_derivative がそれです。
4 は時間発展の方程式を陽的に解くときの刻み幅を決めます。熱方程式 u t = u x x u_t = u_{xx} u t = u xx を空間についてスペクトル法で離散化した系 v ′ = D 2 v \boldsymbol{v}' = D^2\boldsymbol{v} v ′ = D 2 v に陽的 Euler 法を使うと、波数 k k k の成分は 1 ステップで 1 − Δ t k 2 1 - \Delta t\,k^2 1 − Δ t k 2 倍されるので、すべての成分が増えないためには Δ t ≤ 2 / K 2 = 8 / ( N − 1 ) 2 \Delta t \le 2/K^2 = 8/(N-1)^2 Δ t ≤ 2/ K 2 = 8/ ( N − 1 ) 2 が必要十分です。2 次の中心差分の場合の条件 Δ t ≤ h 2 / 2 = 2 π 2 / N 2 \Delta t \le h^2/2 = 2\pi^2/N^2 Δ t ≤ h 2 /2 = 2 π 2 / N 2 と同じ O ( N − 2 ) O(N^{-2}) O ( N − 2 ) ですが、定数は π 2 / 4 ≈ 2.5 \pi^2/4 \approx 2.5 π 2 /4 ≈ 2.5 倍厳しくなります。差分の最大固有値 4 / h 2 4/h^2 4/ h 2 が、厳密な K 2 = ( π / h ) 2 K^2 = (\pi/h)^2 K 2 = ( π / h ) 2 より小さいためです。
周期境界の境界値問題
− u ′ ′ + c ( x ) u = f ( x ) ( x ∈ T ) -u'' + c(x)\,u = f(x)\qquad(x \in \mathbb{T}) − u ′′ + c ( x ) u = f ( x ) ( x ∈ T )
を考えます。この節では関数はすべて実数値とし、c c c は連続で 0 < c 0 ≤ c ( x ) ≤ c 1 0 \lt c_0 \le c(x) \le c_1 0 < c 0 ≤ c ( x ) ≤ c 1 とします。S N S_N S N も実数値の元(v ^ ( − k ) = v ^ ( k ) ‾ \hat v(-k) = \overline{\hat v(k)} v ^ ( − k ) = v ^ ( k ) を満たすもの)に限ります。実数値の関数の P N u P_Nu P N u と I N u I_Nu I N u は実数値です。
定義 6.1 (Fourier–Galerkin 法と選点法 ) ↗
a ( u , v ) = ⟨ u ′ , v ′ ⟩ + ⟨ c u , v ⟩ a(u, v) = \langle u', v'\rangle + \langle cu, v\rangle a ( u , v ) = ⟨ u ′ , v ′ ⟩ + ⟨ c u , v ⟩ (u , v ∈ H p e r 1 u, v \in H^1_{\mathrm{per}} u , v ∈ H per 1 )とおく。f ∈ L 2 ( T ) f \in L^2(\mathbb{T}) f ∈ L 2 ( T ) に対し、a ( u , v ) = ⟨ f , v ⟩ a(u, v) = \langle f, v\rangle a ( u , v ) = ⟨ f , v ⟩ (すべての v ∈ H p e r 1 v \in H^1_{\mathrm{per}} v ∈ H per 1 )を満たす u ∈ H p e r 1 u \in H^1_{\mathrm{per}} u ∈ H per 1 を弱解 という。
u N ∈ S N u_N \in S_N u N ∈ S N で a ( u N , v ) = ⟨ f , v ⟩ a(u_N, v) = \langle f, v\rangle a ( u N , v ) = ⟨ f , v ⟩ (すべての v ∈ S N v \in S_N v ∈ S N )を満たすものを Fourier–Galerkin 解 という。
f f f が連続のとき、u N c ∈ S N u_N^{c} \in S_N u N c ∈ S N で − ( u N c ) ′ ′ ( x j ) + c ( x j ) u N c ( x j ) = f ( x j ) -(u_N^{c})''(x_j) + c(x_j)u_N^{c}(x_j) = f(x_j) − ( u N c ) ′′ ( x j ) + c ( x j ) u N c ( x j ) = f ( x j ) (j = 0 , … , N − 1 j = 0, \ldots, N-1 j = 0 , … , N − 1 )を満たすものを選点法の解 (擬スペクトル法の解)という。
α = min ( 1 , c 0 ) \alpha = \min(1, c_0) α = min ( 1 , c 0 ) 、M a = max ( 1 , c 1 ) M_a = \max(1, c_1) M a = max ( 1 , c 1 ) とおくと、∥ v ∥ H 1 2 = ∥ v ∥ 2 + ∥ v ′ ∥ 2 \|v\|_{H^1}^2 = \|v\|^2 + \|v'\|^2 ∥ v ∥ H 1 2 = ∥ v ∥ 2 + ∥ v ′ ∥ 2 から
a ( v , v ) ≥ α ∥ v ∥ H 1 2 , ∣ a ( u , v ) ∣ ≤ M a ∥ u ∥ H 1 ∥ v ∥ H 1 a(v, v) \ge \alpha\|v\|_{H^1}^2,\qquad |a(u, v)| \le M_a\|u\|_{H^1}\|v\|_{H^1} a ( v , v ) ≥ α ∥ v ∥ H 1 2 , ∣ a ( u , v ) ∣ ≤ M a ∥ u ∥ H 1 ∥ v ∥ H 1
です。H p e r 1 H^1_{\mathrm{per}} H per 1 は重み ( 1 + k 2 ) (1 + k^2) ( 1 + k 2 ) つきの ℓ 2 \ell^2 ℓ 2 空間と等長なので Hilbert 空間で、弱解は Lax–Milgram の定理(定理 3.2[楕円型方程式の弱解と変分法] )からただ 1 つ存在します。Galerkin 解も同じ定理を S N S_N S N に使ってただ 1 つ存在します(定理 2.3[有限要素法 I] )。
定理 6.2 (Fourier–Galerkin 法の収束 ) ✓
f ∈ L 2 ( T ) f \in L^2(\mathbb{T}) f ∈ L 2 ( T ) 、u u u を弱解、u N u_N u N を Fourier–Galerkin 解とする。
c c c が正の定数なら u ^ ( k ) = f ^ ( k ) / ( k 2 + c ) \hat u(k) = \hat f(k)/(k^2 + c) u ^ ( k ) = f ^ ( k ) / ( k 2 + c ) で、u N = P N u u_N = P_Nu u N = P N u である。したがって誤差は 定理 2.3 のとおりで、u u u が 定理 4.2 の仮定を満たせば指数的に減る。
一般の c c c では、s ≥ 1 s \ge 1 s ≥ 1 で u ∈ H p e r s u \in H^s_{\mathrm{per}} u ∈ H per s のとき
∥ u − u N ∥ H 1 ≤ M a α ∥ u − P N u ∥ H 1 ≤ 2 M a α ( K + 1 ) 1 − s ∣ u ∣ H s . \|u - u_N\|_{H^1} \le \frac{M_a}{\alpha}\|u - P_Nu\|_{H^1} \le \frac{\sqrt2\,M_a}{\alpha}(K+1)^{1-s}|u|_{H^s}. ∥ u − u N ∥ H 1 ≤ α M a ∥ u − P N u ∥ H 1 ≤ α 2 M a ( K + 1 ) 1 − s ∣ u ∣ H s .
証明(定理 6.2)
c c c が定数のとき、弱解の定義で v v v として e k e_k e k の実部と虚部をとると、Parseval の等式から ( k 2 + c ) u ^ ( k ) = f ^ ( k ) (k^2 + c)\hat u(k) = \hat f(k) ( k 2 + c ) u ^ ( k ) = f ^ ( k ) です。Galerkin 解についても、∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K で同じ式 ( k 2 + c ) u ^ N ( k ) = f ^ ( k ) (k^2 + c)\hat u_N(k) = \hat f(k) ( k 2 + c ) u ^ N ( k ) = f ^ ( k ) が成り立ち、∣ k ∣ > K |k| \gt K ∣ k ∣ > K では u ^ N ( k ) = 0 \hat u_N(k) = 0 u ^ N ( k ) = 0 です。よって u N = P N u u_N = P_Nu u N = P N u です。
Céa の補題(定理 2.5[有限要素法 I] )から ∥ u − u N ∥ H 1 ≤ ( M a / α ) inf v ∈ S N ∥ u − v ∥ H 1 \|u - u_N\|_{H^1} \le (M_a/\alpha)\inf_{v\in S_N}\|u - v\|_{H^1} ∥ u − u N ∥ H 1 ≤ ( M a / α ) inf v ∈ S N ∥ u − v ∥ H 1 です。v = P N u v = P_Nu v = P N u をとり、定理 2.3 (r = 1 r = 1 r = 1 )を使います。
∎
有限要素法では、近似空間が区分多項式なので inf v ∥ u − v ∥ H 1 \inf_v\|u - v\|_{H^1} inf v ∥ u − v ∥ H 1 は O ( h k ) O(h^k) O ( h k ) で頭打ちでした。同じ Céa の補題でも、近似空間を S N S_N S N にとると、右辺は u u u の滑らかさの分だけ小さくなります。
選点法は、積分を計算せずに格子点の値だけで方程式を立てられるので、変数係数や非線形の問題で使いやすい方法です。その代わり、積 c u N c\,u_N c u N と右辺 f f f を格子点で標本化するときに折り返しが入ります。
次の定理は、選点法の解 u N c u_N^{c} u N c が Galerkin 解 u N u_N u N からどれだけずれるかを調べます。証明の方針は 3 段階です。まず補間の誤差が小さい(定数 N 0 N_0 N 0 は、N ≥ N 0 N \ge N_0 N ≥ N 0 ならその誤差が α / 2 \alpha/2 α /2 倍以下になるように選んだ値)ことで選点法の解の存在と一意性を示し、次に両者の差が満たす式を作り、最後に u ′ ′ u'' u ′′ の補間誤差でずれの大きさを評価します。
定理 6.3 (選点法の解と Galerkin 解の差 ) ✓
c c c を C 1 C^1 C 1 級、f f f を連続とし、γ = max ( ∥ c ∥ ∞ , ∥ c ′ ∥ ∞ ) \gamma = \max(\|c\|_\infty, \|c'\|_\infty) γ = max ( ∥ c ∥ ∞ , ∥ c ′ ∥ ∞ ) 、N 0 = 4 10 γ / α N_0 = 4\sqrt{10}\,\gamma/\alpha N 0 = 4 10 γ / α とおく。N = 2 K + 1 ≥ N 0 N = 2K + 1 \ge N_0 N = 2 K + 1 ≥ N 0 のとき、選点法の解 u N c u_N^{c} u N c はただ 1 つ存在し、Galerkin 解 u N u_N u N との差は
α ∥ u N c − u N ∥ H 1 ≤ ∥ ( 1 − I N ) ( c u N c − f ) ∥ \alpha\,\|u_N^{c} - u_N\|_{H^1} \le \bigl\|(1 - I_N)(cu_N^{c} - f)\bigr\| α ∥ u N c − u N ∥ H 1 ≤ ( 1 − I N ) ( c u N c − f ) を満たす(右辺は c u N c cu_N^{c} c u N c と f f f の折り返しを含む補間誤差である)。さらに弱解 u u u が s > 5 / 2 s \gt 5/2 s > 5/2 について H p e r s H^s_{\mathrm{per}} H per s に属するなら
∥ u − u N c ∥ H 1 ≤ 2 ∥ u − u N ∥ H 1 + 2 α ( 1 + 2 Z s − 2 ) 1 / 2 ( 2 N ) s − 2 ∣ u ∣ H s \|u - u_N^{c}\|_{H^1} \le 2\|u - u_N\|_{H^1} + \frac{2}{\alpha}(1 + 2Z_{s-2})^{1/2}\Bigl(\frac2N\Bigr)^{s-2}|u|_{H^s} ∥ u − u N c ∥ H 1 ≤ 2∥ u − u N ∥ H 1 + α 2 ( 1 + 2 Z s − 2 ) 1/2 ( N 2 ) s − 2 ∣ u ∣ H s である。
証明(定理 6.3) 選点法の方程式の書き換え。 w ∈ S N w \in S_N w ∈ S N について、− w ′ ′ + I N ( c w ) − I N f -w'' + I_N(cw) - I_Nf − w ′′ + I N ( c w ) − I N f は S N S_N S N の元で、格子点での値は − w ′ ′ ( x j ) + c ( x j ) w ( x j ) − f ( x j ) -w''(x_j) + c(x_j)w(x_j) - f(x_j) − w ′′ ( x j ) + c ( x j ) w ( x j ) − f ( x j ) です。補題 3.2 の 3(一意性)から、w w w が選点法の解であることと、S N S_N S N の元として − w ′ ′ + I N ( c w ) = I N f -w'' + I_N(cw) = I_Nf − w ′′ + I N ( c w ) = I N f が成り立つことは同値です。
補間誤差の評価。 w ∈ H p e r 1 w \in H^1_{\mathrm{per}} w ∈ H per 1 が C 1 C^1 C 1 級なら、( c w ) ′ = c ′ w + c w ′ (cw)' = c'w + cw' ( c w ) ′ = c ′ w + c w ′ から ∣ c w ∣ H 1 = ∥ ( c w ) ′ ∥ ≤ γ ( ∥ w ∥ + ∥ w ′ ∥ ) ≤ 2 γ ∥ w ∥ H 1 |cw|_{H^1} = \|(cw)'\| \le \gamma(\|w\| + \|w'\|) \le \sqrt2\,\gamma\|w\|_{H^1} ∣ c w ∣ H 1 = ∥ ( c w ) ′ ∥ ≤ γ ( ∥ w ∥ + ∥ w ′ ∥ ) ≤ 2 γ ∥ w ∥ H 1 です。定理 3.4 (s = 1 s = 1 s = 1 。Z 1 ≤ 2 Z_1 \le 2 Z 1 ≤ 2 なので ( 1 + 2 Z 1 ) 1 / 2 ≤ 5 (1 + 2Z_1)^{1/2} \le \sqrt5 ( 1 + 2 Z 1 ) 1/2 ≤ 5 )から
∥ ( 1 − I N ) ( c w ) ∥ ≤ 5 ⋅ 2 N ⋅ 2 γ ∥ w ∥ H 1 = 2 10 γ N ∥ w ∥ H 1 ≤ α 2 ∥ w ∥ H 1 ( N ≥ N 0 ) \|(1 - I_N)(cw)\| \le \sqrt5\cdot\frac2N\cdot\sqrt2\,\gamma\,\|w\|_{H^1} = \frac{2\sqrt{10}\,\gamma}{N}\|w\|_{H^1} \le \frac\alpha2\|w\|_{H^1}\qquad(N \ge N_0) ∥ ( 1 − I N ) ( c w ) ∥ ≤ 5 ⋅ N 2 ⋅ 2 γ ∥ w ∥ H 1 = N 2 10 γ ∥ w ∥ H 1 ≤ 2 α ∥ w ∥ H 1 ( N ≥ N 0 ) です。
一意性と存在。 f f f の格子値がすべて 0 のときの解 w ∈ S N w \in S_N w ∈ S N は − w ′ ′ + I N ( c w ) = 0 -w'' + I_N(cw) = 0 − w ′′ + I N ( c w ) = 0 を満たします。w w w との内積をとり、⟨ − w ′ ′ , w ⟩ = ∥ w ′ ∥ 2 \langle -w'', w\rangle = \|w'\|^2 ⟨ − w ′′ , w ⟩ = ∥ w ′ ∥ 2 (Parseval の等式)を使うと
a ( w , w ) = ∥ w ′ ∥ 2 + ⟨ c w , w ⟩ = ⟨ c w − I N ( c w ) , w ⟩ ≤ α 2 ∥ w ∥ H 1 ∥ w ∥ ≤ α 2 ∥ w ∥ H 1 2 a(w, w) = \|w'\|^2 + \langle cw, w\rangle = \langle cw - I_N(cw), w\rangle \le \frac\alpha2\|w\|_{H^1}\|w\| \le \frac\alpha2\|w\|_{H^1}^2 a ( w , w ) = ∥ w ′ ∥ 2 + ⟨ c w , w ⟩ = ⟨ c w − I N ( c w ) , w ⟩ ≤ 2 α ∥ w ∥ H 1 ∥ w ∥ ≤ 2 α ∥ w ∥ H 1 2 です。a ( w , w ) ≥ α ∥ w ∥ H 1 2 a(w, w) \ge \alpha\|w\|_{H^1}^2 a ( w , w ) ≥ α ∥ w ∥ H 1 2 と合わせて w = 0 w = 0 w = 0 。選点法の方程式は未知数 N N N 個・方程式 N N N 個の連立 1 次方程式なので、一意性から解の存在が従います。
Galerkin 解との差。 e = u N c − u N ∈ S N e = u_N^{c} - u_N \in S_N e = u N c − u N ∈ S N とおきます。v ∈ S N v \in S_N v ∈ S N について、Galerkin 解の定義から a ( u N , v ) = ⟨ f , v ⟩ a(u_N, v) = \langle f, v\rangle a ( u N , v ) = ⟨ f , v ⟩ 、選点法の方程式から ⟨ − ( u N c ) ′ ′ , v ⟩ = ⟨ I N f − I N ( c u N c ) , v ⟩ \langle -(u_N^{c})'', v\rangle = \langle I_Nf - I_N(cu_N^{c}), v\rangle ⟨ − ( u N c ) ′′ , v ⟩ = ⟨ I N f − I N ( c u N c ) , v ⟩ なので
a ( e , v ) = ⟨ − ( u N c ) ′ ′ + c u N c , v ⟩ − ⟨ f , v ⟩ = ⟨ ( 1 − I N ) ( c u N c − f ) , v ⟩ a(e, v) = \langle -(u_N^{c})'' + cu_N^{c}, v\rangle - \langle f, v\rangle = \bigl\langle (1 - I_N)(cu_N^{c} - f), v\bigr\rangle a ( e , v ) = ⟨ − ( u N c ) ′′ + c u N c , v ⟩ − ⟨ f , v ⟩ = ⟨ ( 1 − I N ) ( c u N c − f ) , v ⟩ です。v = e v = e v = e とすると α ∥ e ∥ H 1 2 ≤ a ( e , e ) ≤ ∥ ( 1 − I N ) ( c u N c − f ) ∥ ∥ e ∥ H 1 \alpha\|e\|_{H^1}^2 \le a(e, e) \le \|(1 - I_N)(cu_N^{c} - f)\|\,\|e\|_{H^1} α ∥ e ∥ H 1 2 ≤ a ( e , e ) ≤ ∥ ( 1 − I N ) ( c u N c − f ) ∥ ∥ e ∥ H 1 で、最初の不等式が出ます。
誤差の次数。 u ∈ H p e r s u \in H^s_{\mathrm{per}} u ∈ H per s (s > 5 / 2 s \gt 5/2 s > 5/2 )とします。∑ k ∣ k ∣ ∣ u ^ ( k ) ∣ < ∞ \sum_k|k||\hat u(k)| \lt \infty ∑ k ∣ k ∣∣ u ^ ( k ) ∣ < ∞ (補題 2.2 を u ′ u' u ′ に使う)から u u u は C 1 C^1 C 1 級です。弱解の定義で v v v に e k e_k e k の実部と虚部をとると k 2 u ^ ( k ) = ( f − c u ) ^ ( k ) k^2\hat u(k) = \widehat{(f - cu)}(k) k 2 u ^ ( k ) = ( f − c u ) ( k ) なので、u ′ ′ = c u − f u'' = cu - f u ′′ = c u − f (u ′ ′ u'' u ′′ は Fourier 係数が − k 2 u ^ ( k ) -k^2\hat u(k) − k 2 u ^ ( k ) の L 2 L^2 L 2 の元)で、u ′ ′ ∈ H p e r s − 2 u'' \in H^{s-2}_{\mathrm{per}} u ′′ ∈ H per s − 2 、∣ u ′ ′ ∣ H s − 2 = ∣ u ∣ H s |u''|_{H^{s-2}} = |u|_{H^s} ∣ u ′′ ∣ H s − 2 = ∣ u ∣ H s です。そこで
( 1 − I N ) ( c u N c − f ) = ( 1 − I N ) u ′ ′ + ( 1 − I N ) ( c ( u N c − u ) ) (1 - I_N)(cu_N^{c} - f) = (1 - I_N)u'' + (1 - I_N)\bigl(c\,(u_N^{c} - u)\bigr) ( 1 − I N ) ( c u N c − f ) = ( 1 − I N ) u ′′ + ( 1 − I N ) ( c ( u N c − u ) ) と分けます。第 1 項は 定理 3.4 (s − 2 > 1 / 2 s - 2 \gt 1/2 s − 2 > 1/2 )から ( 1 + 2 Z s − 2 ) 1 / 2 ( 2 / N ) s − 2 ∣ u ∣ H s (1 + 2Z_{s-2})^{1/2}(2/N)^{s-2}|u|_{H^s} ( 1 + 2 Z s − 2 ) 1/2 ( 2/ N ) s − 2 ∣ u ∣ H s 以下、第 2 項は上の補間誤差の評価から ( α / 2 ) ∥ u N c − u ∥ H 1 ≤ ( α / 2 ) ( ∥ e ∥ H 1 + ∥ u N − u ∥ H 1 ) (\alpha/2)\|u_N^{c} - u\|_{H^1} \le (\alpha/2)(\|e\|_{H^1} + \|u_N - u\|_{H^1}) ( α /2 ) ∥ u N c − u ∥ H 1 ≤ ( α /2 ) ( ∥ e ∥ H 1 + ∥ u N − u ∥ H 1 ) 以下です。最初の不等式に入れて ( α / 2 ) ∥ e ∥ H 1 (\alpha/2)\|e\|_{H^1} ( α /2 ) ∥ e ∥ H 1 を左辺に移すと
∥ e ∥ H 1 ≤ 2 α ( 1 + 2 Z s − 2 ) 1 / 2 ( 2 N ) s − 2 ∣ u ∣ H s + ∥ u − u N ∥ H 1 \|e\|_{H^1} \le \frac2\alpha(1 + 2Z_{s-2})^{1/2}\Bigl(\frac2N\Bigr)^{s-2}|u|_{H^s} + \|u - u_N\|_{H^1} ∥ e ∥ H 1 ≤ α 2 ( 1 + 2 Z s − 2 ) 1/2 ( N 2 ) s − 2 ∣ u ∣ H s + ∥ u − u N ∥ H 1 です。∥ u − u N c ∥ H 1 ≤ ∥ u − u N ∥ H 1 + ∥ e ∥ H 1 \|u - u_N^{c}\|_{H^1} \le \|u - u_N\|_{H^1} + \|e\|_{H^1} ∥ u − u N c ∥ H 1 ≤ ∥ u − u N ∥ H 1 + ∥ e ∥ H 1 から結論が出ます。
∎
非線形の方程式では、折り返しは安定性にも影響します。Burgers 方程式 u t + ( u 2 / 2 ) x = ν u x x u_t + (u^2/2)_x = \nu u_{xx} u t + ( u 2 /2 ) x = ν u xx の u 2 u^2 u 2 のような 2 次の項は、次の方法で折り返しなしに計算できます。
定義 6.5 (3/2 則による折り返しの除去 ) ↗
u , v ∈ S N u, v \in S_N u , v ∈ S N (N = 2 K + 1 N = 2K+1 N = 2 K + 1 )の積の切断 P N ( u v ) P_N(uv) P N ( uv ) を、M ≥ 3 K + 1 M \ge 3K + 1 M ≥ 3 K + 1 点の格子で u u u と v v v の値を求めて掛け、その離散 Fourier 係数のうち ∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K のものだけを残して計算する方法を、3/2 則 (零詰めによる折り返しの除去)という。M ≈ ( 3 / 2 ) N M \approx (3/2)N M ≈ ( 3/2 ) N である。
命題 6.6 (3/2 則は Galerkin の積を厳密に与える ) ✓
u , v ∈ S N u, v \in S_N u , v ∈ S N 、M ≥ 3 K + 1 M \ge 3K + 1 M ≥ 3 K + 1 とし、M M M 点の格子 y j = 2 π j / M y_j = 2\pi j/M y j = 2 π j / M での離散 Fourier 係数を w ~ k ( M ) = 1 M ∑ j = 0 M − 1 w ( y j ) e − i k y j \tilde w^{(M)}_k = \frac1M\sum_{j=0}^{M-1}w(y_j)e^{-iky_j} w ~ k ( M ) = M 1 ∑ j = 0 M − 1 w ( y j ) e − ik y j と書く。このとき w = u v w = uv w = uv について w ~ k ( M ) = w ^ ( k ) \tilde w^{(M)}_k = \hat w(k) w ~ k ( M ) = w ^ ( k ) (∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )である。M = N M = N M = N では一般に w ~ k ( N ) ≠ w ^ ( k ) \tilde w^{(N)}_k \ne \hat w(k) w ~ k ( N ) = w ^ ( k ) である。
証明(命題 6.6) w = u v w = uv w = uv は次数 2 K 2K 2 K 以下の三角多項式なので、∣ n ∣ > 2 K |n| \gt 2K ∣ n ∣ > 2 K で w ^ ( n ) = 0 \hat w(n) = 0 w ^ ( n ) = 0 です。折り返しの公式(補題 3.3 の最初の式。証明は格子点の数が偶数でもそのまま通る)から w ~ k ( M ) = ∑ m w ^ ( k + m M ) \tilde w^{(M)}_k = \sum_m\hat w(k + mM) w ~ k ( M ) = ∑ m w ^ ( k + m M ) です。∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K 、m ≠ 0 m \ne 0 m = 0 のとき ∣ k + m M ∣ ≥ M − K ≥ 2 K + 1 |k + mM| \ge M - K \ge 2K + 1 ∣ k + m M ∣ ≥ M − K ≥ 2 K + 1 なので、m ≠ 0 m \ne 0 m = 0 の項はすべて 0 です。M = N M = N M = N の反例は u = v = e K + e − K u = v = e_K + e_{-K} u = v = e K + e − K で、w = e 2 K + 2 + e − 2 K w = e_{2K} + 2 + e_{-2K} w = e 2 K + 2 + e − 2 K 、w ^ ( − 1 ) = 0 \hat w(-1) = 0 w ^ ( − 1 ) = 0 ですが、2 K = − 1 + N 2K = -1 + N 2 K = − 1 + N なので w ~ − 1 ( N ) = w ^ ( 2 K ) = 1 \tilde w^{(N)}_{-1} = \hat w(2K) = 1 w ~ − 1 ( N ) = w ^ ( 2 K ) = 1 です。
∎
例 6.7 (積の係数の折り返し )
K = 8 K = 8 K = 8 の実三角多項式 u u u (係数は乱数)について、u 2 u^2 u 2 の Fourier 係数(∣ k ∣ ≤ K |k| \le K ∣ k ∣ ≤ K )を M M M 点の格子で求め、係数の畳み込みで求めた厳密な値と比べます。
# Python 3.9.6 / NumPy 2.0.2
rng = np.random. default_rng ( 0 )
c = rng. normal ( size = K + 1 ) + 1 j * rng. normal ( size = K + 1 )
""" 次数 K の実三角多項式 u の u^2 の Fourier 係数(|k| <= K)を、M 点の格子上の積から求める。 """
x = 2 * np.pi * np. arange ( M ) / M
u = c[ 0 ].real + 2 * np. real ( sum ( c [ n ] * np. exp ( 1 j * n * x ) for n in range ( 1 , K + 1 )))
w = np.fft. fft ( u * u ) / M
return np. array ( [ w [ k % M ] for k in range ( - K , K + 1 ) ] )
full = np. zeros ( 2 * K + 1 , dtype = complex ) # u の係数(k = -K, ..., K)
full[:K] = np. conj ( c [ : 0 : - 1 ])
exact = np. convolve ( full , full ) [ K: 3 * K + 1 ] # 畳み込みで求めた u^2 の係数(|k| <= K)
for M in [ 2 * K + 1 , 3 * K, 3 * K + 1 , 4 * K ] :
print ( f "M = {M :2d } : max error of the coefficients of u^2 = {np. max ( np. abs ( coeffs ( M ) - exact )) :.2e } " )
M = 17: max error of the coefficients of u^2 = 8.51e+00
M = 24: max error of the coefficients of u^2 = 5.95e-01
M = 25: max error of the coefficients of u^2 = 3.58e-14
M = 32: max error of the coefficients of u^2 = 2.49e-14
M = 3 K = 24 M = 3K = 24 M = 3 K = 24 ではまだ折り返しが残り、M = 3 K + 1 = 25 M = 3K + 1 = 25 M = 3 K + 1 = 25 で丸めの大きさになります。命題 6.6 の条件 M ≥ 3 K + 1 M \ge 3K + 1 M ≥ 3 K + 1 のとおりです。
例 6.8 (Fourier 選点法と 4 次 Runge–Kutta 法 )
移流方程式 u t + u x = 0 u_t + u_x = 0 u t + u x = 0 と熱方程式 u t = u x x u_t = u_{xx} u t = u xx を、初期値 u 0 = e sin x u_0 = e^{\sin x} u 0 = e s i n x 、空間は Fourier 選点法、時間は古典的な 4 次 Runge–Kutta 法で解きます。離散 Fourier 変換をした側では、波数 k k k の成分は w ′ = λ k w w' = \lambda_kw w ′ = λ k w (移流は λ k = − i k \lambda_k = -ik λ k = − ik 、熱は λ k = − k 2 \lambda_k = -k^2 λ k = − k 2 )で、Runge–Kutta 法の 1 ステップは R ( Δ t λ k ) R(\Delta t\lambda_k) R ( Δ t λ k ) 倍、R ( z ) = 1 + z + z 2 / 2 + z 3 / 6 + z 4 / 24 R(z) = 1 + z + z^2/2 + z^3/6 + z^4/24 R ( z ) = 1 + z + z 2 /2 + z 3 /6 + z 4 /24 です。純虚数 z = i y z = iy z = i y では ∣ R ( i y ) ∣ 2 = 1 − y 6 / 72 + y 8 / 576 |R(iy)|^2 = 1 - y^6/72 + y^8/576 ∣ R ( i y ) ∣ 2 = 1 − y 6 /72 + y 8 /576 なので ∣ R ( i y ) ∣ ≤ 1 ⟺ ∣ y ∣ ≤ 2 2 |R(iy)| \le 1 \iff |y| \le 2\sqrt2 ∣ R ( i y ) ∣ ≤ 1 ⟺ ∣ y ∣ ≤ 2 2 、負の実数では R ( − 2.7 ) ≈ 0.879 R(-2.7) \approx 0.879 R ( − 2.7 ) ≈ 0.879 、R ( − 3.2 ) ≈ 1.828 R(-3.2) \approx 1.828 R ( − 3.2 ) ≈ 1.828 です。
# Python 3.9.6 / NumPy 2.0.2
def rk4 ( L , v , dt , steps ) :
""" v' = L v(L は Fourier 側の対角成分)を古典的な 4 次 Runge–Kutta 法で進める。 """
k2 = L * (w + 0.5 * dt * k1)
k3 = L * (w + 0.5 * dt * k2)
w = w + dt * (k1 + 2 * k2 + 2 * k3 + k4) / 6
return np. real ( np.fft. ifft ( w ))
u0 = lambda x : np. exp ( np. sin ( x ))
print ( " advection u_t + u_x = 0, error at T = 1 " )
print ( " N \\ steps 50 100 200 400 " )
for N in [ 9 , 17 , 33 , 65 ] :
x = 2 * np.pi * np. arange ( N ) / N
k = np.fft. fftfreq ( N , d = 1.0 / N )
row = [ np. max ( np. abs ( rk4 ( - 1 j * k , u0 ( x ) , T / s , s ) - u0 ( x - T ))) for s in ( 50 , 100 , 200 , 400 ) ]
print ( f " {N :5d } " + " " . join ( f " {e :.3e } " for e in row ))
print ( " heat u_t = u_xx, error at T = 1 against the exact solution of the semi-discrete system " )
print ( " N steps (dt K^2 = 2.7) error steps (dt K^2 = 3.2) error " )
x = 2 * np.pi * np. arange ( N ) / N
k = np.fft. fftfreq ( N , d = 1.0 / N )
ref = np. real ( np.fft. ifft ( np. exp ( - k ** 2 * T ) * np.fft. fft ( u0 ( x ))))
steps = int ( np. ceil ( T * K2 / z ))
out. append ( (steps, np. max ( np. abs ( rk4 ( - k ** 2 , u0 ( x ) , T / steps , steps ) - ref )) ) )
print ( f " {N :5d } {out [ 0 ] [ 0 ] :6d } {out [ 0 ] [ 1 ] :.3e } {out [ 1 ] [ 0 ] :6d } {out [ 1 ] [ 1 ] :.3e } " )
advection u_t + u_x = 0, error at T = 1
9 1.086e-03 1.086e-03 1.086e-03 1.086e-03
17 4.524e-08 1.836e-08 1.774e-08 1.771e-08
33 3.304e-08 2.067e-09 1.292e-10 8.078e-12
65 3.291e-08 2.052e-09 1.284e-10 8.033e-12
heat u_t = u_xx, error at T = 1 against the exact solution of the semi-discrete system
N steps (dt K^2 = 2.7) error steps (dt K^2 = 3.2) error
17 24 1.680e-07 20 3.448e-02
33 95 6.155e-10 80 4.289e+04
65 380 2.349e-12 320 2.629e+67
移流方程式では、N = 9 N = 9 N = 9 の行はステップ数を変えても誤差が変わりません(空間の誤差が支配)。N = 33 , 65 N = 33, 65 N = 33 , 65 の行は N N N によらず、ステップ数を 2 倍にするごとに誤差が約 1 / 16 1/16 1/16 になっています(時間の誤差が支配)。N = 33 N = 33 N = 33 で空間の誤差は 10 − 12 10^{-12} 1 0 − 12 より小さいので、精度を決めているのは時間積分です。熱方程式では、Δ t K 2 = 2.7 \Delta tK^2 = 2.7 Δ t K 2 = 2.7 では安定で、3.2 3.2 3.2 では最高波数の成分が毎ステップ約 1.83 1.83 1.83 倍に増えて発散します。K 2 ≈ N 2 / 4 K^2 \approx N^2/4 K 2 ≈ N 2 /4 なので、安定な刻み幅は Δ t ≈ 11 / N 2 \Delta t \approx 11/N^2 Δ t ≈ 11/ N 2 以下です。
周期的でない関数を三角多項式で近似すると、端での不一致が不連続として働き、収束が遅くなります(§8)。区間 [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] 上の周期的でない問題では、代数多項式による補間を使います。等間隔の点での高次の補間は不安定なので、端に密な点をとります。
定義 7.1 (Chebyshev–Gauss–Lobatto 点と Chebyshev 微分行列 ) ↗
N ≥ 1 N \ge 1 N ≥ 1 とする(この節の N N N は多項式の次数で、偶奇は問わない)。x j = cos ( j π / N ) x_j = \cos(j\pi/N) x j = cos ( j π / N ) (j = 0 , … , N j = 0, \ldots, N j = 0 , … , N )を Chebyshev–Gauss–Lobatto 点 という。[ − 1 , 1 ] [-1,1] [ − 1 , 1 ] 上の連続関数 u u u について、p N ( x j ) = u ( x j ) p_N(x_j) = u(x_j) p N ( x j ) = u ( x j ) (j = 0 , … , N j = 0, \ldots, N j = 0 , … , N )を満たす N N N 次以下の多項式 p N p_N p N (定理 2.2[多項式補間] )を u u u の Chebyshev 補間 という。格子値のベクトル v = ( v 0 , … , v N ) \boldsymbol{v} = (v_0, \ldots, v_N) v = ( v 0 , … , v N ) を補間する N N N 次以下の多項式 p p p について ( D N v ) j = p ′ ( x j ) (D_N\boldsymbol{v})_j = p'(x_j) ( D N v ) j = p ′ ( x j ) で定まる ( N + 1 ) (N+1) ( N + 1 ) 次の行列 D N D_N D N を Chebyshev 微分行列 という。境界値問題を、p N p_N p N が内部の点 x 1 , … , x N − 1 x_1, \ldots, x_{N-1} x 1 , … , x N − 1 で微分方程式を満たし、x 0 , x N x_0, x_N x 0 , x N で境界条件を満たすように解く方法を Chebyshev 選点法 という。
x 0 = 1 x_0 = 1 x 0 = 1 、x N = − 1 x_N = -1 x N = − 1 で、点は右から左へ並びます。Chebyshev 多項式 T k T_k T k (定義 2.1[誤差保証つきの求積と関数近似] )は T k ( cos θ ) = cos k θ T_k(\cos\theta) = \cos k\theta T k ( cos θ ) = cos k θ を満たすので(補題 6.1[多項式補間] )、x = cos θ x = \cos\theta x = cos θ と置くと T k ( x j ) = cos ( k j π / N ) T_k(x_j) = \cos(kj\pi/N) T k ( x j ) = cos ( k j π / N ) です。x j x_j x j は、θ \theta θ について等間隔な点 θ j = j π / N \theta_j = j\pi/N θ j = j π / N の像で、Chebyshev 補間は偶関数 u ( cos θ ) u(\cos\theta) u ( cos θ ) の余弦による三角補間です。そのため Fourier の場合と同じ折り返しが起こります。
補題 7.2 (Chebyshev 多項式の折り返し ) ✓
整数 k ≥ 0 k \ge 0 k ≥ 0 に対し、k k k を 2 N 2N 2 N で割った余りを r r r とし、k ♯ = r k^{\sharp} = r k ♯ = r (r ≤ N r \le N r ≤ N のとき)、k ♯ = 2 N − r k^{\sharp} = 2N - r k ♯ = 2 N − r (r > N r \gt N r > N のとき)とおく。このとき T k ( x j ) = T k ♯ ( x j ) T_k(x_j) = T_{k^{\sharp}}(x_j) T k ( x j ) = T k ♯ ( x j ) (j = 0 , … , N j = 0, \ldots, N j = 0 , … , N )で、T k T_k T k の Chebyshev 補間は T k ♯ T_{k^{\sharp}} T k ♯ である。
証明(補題 7.2) k = 2 N m + r k = 2Nm + r k = 2 N m + r と書くと、T k ( x j ) = cos ( k j π / N ) = cos ( r j π / N + 2 π m j ) = cos ( r j π / N ) T_k(x_j) = \cos(kj\pi/N) = \cos(rj\pi/N + 2\pi mj) = \cos(rj\pi/N) T k ( x j ) = cos ( k j π / N ) = cos ( r j π / N + 2 π mj ) = cos ( r j π / N ) です。r ≤ N r \le N r ≤ N ならこれは T r ( x j ) T_r(x_j) T r ( x j ) 。r > N r \gt N r > N なら cos ( ( 2 N − r ) j π / N ) = cos ( 2 π j − r j π / N ) = cos ( r j π / N ) \cos((2N - r)j\pi/N) = \cos(2\pi j - rj\pi/N) = \cos(rj\pi/N) cos (( 2 N − r ) j π / N ) = cos ( 2 π j − r j π / N ) = cos ( r j π / N ) なので T 2 N − r ( x j ) T_{2N-r}(x_j) T 2 N − r ( x j ) に等しくなります。0 ≤ k ♯ ≤ N 0 \le k^{\sharp} \le N 0 ≤ k ♯ ≤ N なので T k ♯ T_{k^{\sharp}} T k ♯ は N N N 次以下で、補間多項式の一意性(定理 2.2[多項式補間] )から T k T_k T k の補間です。
∎
補題 7.3 (Chebyshev 多項式の導関数 ) ✓
k ≥ 0 k \ge 0 k ≥ 0 について、[ − 1 , 1 ] [-1,1] [ − 1 , 1 ] 上で ∣ T k ′ ( x ) ∣ ≤ k 2 |T_k'(x)| \le k^2 ∣ T k ′ ( x ) ∣ ≤ k 2 であり、T k ′ ( 1 ) = k 2 T_k'(1) = k^2 T k ′ ( 1 ) = k 2 、T k ′ ′ ( 1 ) = k 2 ( k 2 − 1 ) / 3 T_k''(1) = k^2(k^2-1)/3 T k ′′ ( 1 ) = k 2 ( k 2 − 1 ) /3 である。また 0 < θ < π 0 \lt \theta \lt \pi 0 < θ < π で T k ′ ( cos θ ) = k sin k θ / sin θ T_k'(\cos\theta) = k\sin k\theta/\sin\theta T k ′ ( cos θ ) = k sin k θ / sin θ である。
証明(補題 7.3) T k ( cos θ ) = cos k θ T_k(\cos\theta) = \cos k\theta T k ( cos θ ) = cos k θ を θ \theta θ で微分すると − sin θ T k ′ ( cos θ ) = − k sin k θ -\sin\theta\,T_k'(\cos\theta) = -k\sin k\theta − sin θ T k ′ ( cos θ ) = − k sin k θ なので、0 < θ < π 0 \lt \theta \lt \pi 0 < θ < π で T k ′ ( cos θ ) = k sin k θ / sin θ T_k'(\cos\theta) = k\sin k\theta/\sin\theta T k ′ ( cos θ ) = k sin k θ / sin θ です。∣ sin k θ ∣ ≤ k ∣ sin θ ∣ |\sin k\theta| \le k|\sin\theta| ∣ sin k θ ∣ ≤ k ∣ sin θ ∣ を k k k についての帰納法で示します。k = 0 , 1 k = 0, 1 k = 0 , 1 では等号。∣ sin ( k + 1 ) θ ∣ = ∣ sin k θ cos θ + cos k θ sin θ ∣ ≤ ∣ sin k θ ∣ + ∣ sin θ ∣ ≤ ( k + 1 ) ∣ sin θ ∣ |\sin(k+1)\theta| = |\sin k\theta\cos\theta + \cos k\theta\sin\theta| \le |\sin k\theta| + |\sin\theta| \le (k+1)|\sin\theta| ∣ sin ( k + 1 ) θ ∣ = ∣ sin k θ cos θ + cos k θ sin θ ∣ ≤ ∣ sin k θ ∣ + ∣ sin θ ∣ ≤ ( k + 1 ) ∣ sin θ ∣ です。よって ( − 1 , 1 ) (-1,1) ( − 1 , 1 ) で ∣ T k ′ ∣ ≤ k 2 |T_k'| \le k^2 ∣ T k ′ ∣ ≤ k 2 で、T k ′ T_k' T k ′ は連続なので [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] でも成り立ちます。θ → 0 \theta \to 0 θ → 0 とすると sin k θ / sin θ → k \sin k\theta/\sin\theta \to k sin k θ / sin θ → k なので T k ′ ( 1 ) = k 2 T_k'(1) = k^2 T k ′ ( 1 ) = k 2 です。
g ( θ ) = T k ( cos θ ) = cos k θ g(\theta) = T_k(\cos\theta) = \cos k\theta g ( θ ) = T k ( cos θ ) = cos k θ は g ′ ′ = − k 2 g g'' = -k^2g g ′′ = − k 2 g を満たします。g ′ = − sin θ T k ′ g' = -\sin\theta\,T_k' g ′ = − sin θ T k ′ 、g ′ ′ = sin 2 θ T k ′ ′ − cos θ T k ′ g'' = \sin^2\theta\,T_k'' - \cos\theta\,T_k' g ′′ = sin 2 θ T k ′′ − cos θ T k ′ (T k T_k T k の引数は cos θ \cos\theta cos θ )なので、x = cos θ x = \cos\theta x = cos θ について ( 1 − x 2 ) T k ′ ′ ( x ) − x T k ′ ( x ) + k 2 T k ( x ) = 0 (1 - x^2)T_k''(x) - xT_k'(x) + k^2T_k(x) = 0 ( 1 − x 2 ) T k ′′ ( x ) − x T k ′ ( x ) + k 2 T k ( x ) = 0 が ( − 1 , 1 ) (-1,1) ( − 1 , 1 ) で成り立ち、両辺は多項式なのですべての x x x で成り立ちます。これを微分すると ( 1 − x 2 ) T k ′ ′ ′ − 3 x T k ′ ′ + ( k 2 − 1 ) T k ′ = 0 (1-x^2)T_k''' - 3xT_k'' + (k^2 - 1)T_k' = 0 ( 1 − x 2 ) T k ′′′ − 3 x T k ′′ + ( k 2 − 1 ) T k ′ = 0 で、x = 1 x = 1 x = 1 とすると T k ′ ′ ( 1 ) = ( k 2 − 1 ) T k ′ ( 1 ) / 3 = k 2 ( k 2 − 1 ) / 3 T_k''(1) = (k^2-1)T_k'(1)/3 = k^2(k^2-1)/3 T k ′′ ( 1 ) = ( k 2 − 1 ) T k ′ ( 1 ) /3 = k 2 ( k 2 − 1 ) /3 です。
∎
定理 7.4 (Chebyshev 補間の誤差 ) ✓
ρ > 1 \rho \gt 1 ρ > 1 とし、u u u は Bernstein 楕円 E ρ E_\rho E ρ で正則で [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] 上で実数値とする。1 < r < ρ 1 \lt r \lt \rho 1 < r < ρ 、M r = max ∂ E r ∣ u ∣ M_r = \max_{\partial E_r}|u| M r = max ∂ E r ∣ u ∣ 、C r = ∑ j ≥ 1 ( 1 + j ) 2 r − j C_r = \sum_{j\ge1}(1+j)^2r^{-j} C r = ∑ j ≥ 1 ( 1 + j ) 2 r − j とおく。u u u の Chebyshev 補間 p N p_N p N について
max [ − 1 , 1 ] ∣ u − p N ∣ ≤ 4 M r r − 1 r − N , max [ − 1 , 1 ] ∣ u ′ − p N ′ ∣ ≤ 4 M r C r N 2 r − N \max_{[-1,1]}|u - p_N| \le \frac{4M_r}{r - 1}\,r^{-N},\qquad \max_{[-1,1]}|u' - p_N'| \le 4M_rC_r\,N^2r^{-N} [ − 1 , 1 ] max ∣ u − p N ∣ ≤ r − 1 4 M r r − N , [ − 1 , 1 ] max ∣ u ′ − p N ′ ∣ ≤ 4 M r C r N 2 r − N が成り立つ。
証明(定理 7.4) 定理 3.1[誤差保証つきの求積と関数近似] から、u = ∑ k ≥ 0 a k T k u = \sum_{k\ge0}a_kT_k u = ∑ k ≥ 0 a k T k ([ − 1 , 1 ] [-1,1] [ − 1 , 1 ] で絶対かつ一様に収束)、∣ a k ∣ ≤ 2 M r r − k |a_k| \le 2M_rr^{-k} ∣ a k ∣ ≤ 2 M r r − k (k ≥ 1 k \ge 1 k ≥ 1 )です。
補間の表示。 q = ∑ k ≥ 0 a k T k ♯ q = \sum_{k\ge0}a_kT_{k^{\sharp}} q = ∑ k ≥ 0 a k T k ♯ とおきます。∑ k ∣ a k ∣ < ∞ \sum_k|a_k| \lt \infty ∑ k ∣ a k ∣ < ∞ なので、l = 0 , … , N l = 0, \ldots, N l = 0 , … , N ごとに k ♯ = l k^{\sharp} = l k ♯ = l となる k k k についての和 ∑ a k \sum a_k ∑ a k は絶対収束し、q q q は T 0 , … , T N T_0, \ldots, T_N T 0 , … , T N の 1 次結合、すなわち N N N 次以下の多項式です。補題 7.2 から q ( x j ) = ∑ k a k T k ( x j ) = u ( x j ) q(x_j) = \sum_ka_kT_k(x_j) = u(x_j) q ( x j ) = ∑ k a k T k ( x j ) = u ( x j ) なので、一意性から q = p N q = p_N q = p N です。k ≤ N k \le N k ≤ N では k ♯ = k k^{\sharp} = k k ♯ = k なので
u − p N = ∑ k > N a k ( T k − T k ♯ ) u - p_N = \sum_{k \gt N}a_k\,(T_k - T_{k^{\sharp}}) u − p N = k > N ∑ a k ( T k − T k ♯ ) です。
関数値。 [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] で ∣ T k ∣ ≤ 1 |T_k| \le 1 ∣ T k ∣ ≤ 1 (補題 6.1[多項式補間] )なので、補題 4.1 (q = 1 / r q = 1/r q = 1/ r )から
∣ u − p N ∣ ≤ 2 ∑ k > N ∣ a k ∣ ≤ 4 M r ∑ k > N r − k = 4 M r r − N − 1 1 − r − 1 = 4 M r r − 1 r − N |u - p_N| \le 2\sum_{k \gt N}|a_k| \le 4M_r\sum_{k \gt N}r^{-k} = \frac{4M_r\,r^{-N-1}}{1 - r^{-1}} = \frac{4M_r}{r-1}r^{-N} ∣ u − p N ∣ ≤ 2 k > N ∑ ∣ a k ∣ ≤ 4 M r k > N ∑ r − k = 1 − r − 1 4 M r r − N − 1 = r − 1 4 M r r − N です。
導関数。 補題 7.3 から ∣ a k T k ′ ∣ ≤ 2 M r k 2 r − k |a_kT_k'| \le 2M_rk^2r^{-k} ∣ a k T k ′ ∣ ≤ 2 M r k 2 r − k で、∑ k k 2 r − k \sum_kk^2r^{-k} ∑ k k 2 r − k は比判定法(定理 6.2[級数と収束判定] )で収束するので、∑ k a k T k ′ \sum_ka_kT_k' ∑ k a k T k ′ は [ − 1 , 1 ] [-1,1] [ − 1 , 1 ] で一様収束します。項別微分(定理 7.3[関数列と一様収束] )から u ′ = ∑ k a k T k ′ u' = \sum_ka_kT_k' u ′ = ∑ k a k T k ′ で、p N ′ = ∑ k a k T k ♯ ′ p_N' = \sum_ka_kT_{k^{\sharp}}' p N ′ = ∑ k a k T k ♯ ′ も同様です(∣ T k ♯ ′ ∣ ≤ ( k ♯ ) 2 ≤ k 2 |T_{k^{\sharp}}'| \le (k^{\sharp})^2 \le k^2 ∣ T k ♯ ′ ∣ ≤ ( k ♯ ) 2 ≤ k 2 )。k > N k \gt N k > N では ( k ♯ ) 2 ≤ N 2 < k 2 (k^{\sharp})^2 \le N^2 \lt k^2 ( k ♯ ) 2 ≤ N 2 < k 2 なので
∣ u ′ − p N ′ ∣ ≤ ∑ k > N ∣ a k ∣ ( k 2 + ( k ♯ ) 2 ) ≤ 4 M r ∑ k > N k 2 r − k |u' - p_N'| \le \sum_{k \gt N}|a_k|\bigl(k^2 + (k^{\sharp})^2\bigr) \le 4M_r\sum_{k \gt N}k^2r^{-k} ∣ u ′ − p N ′ ∣ ≤ k > N ∑ ∣ a k ∣ ( k 2 + ( k ♯ ) 2 ) ≤ 4 M r k > N ∑ k 2 r − k です。k = N + j k = N + j k = N + j (j ≥ 1 j \ge 1 j ≥ 1 )と書くと N + j ≤ N ( 1 + j ) N + j \le N(1 + j) N + j ≤ N ( 1 + j ) なので ∑ k > N k 2 r − k ≤ N 2 r − N ∑ j ≥ 1 ( 1 + j ) 2 r − j = C r N 2 r − N \sum_{k \gt N}k^2r^{-k} \le N^2r^{-N}\sum_{j\ge1}(1+j)^2r^{-j} = C_rN^2r^{-N} ∑ k > N k 2 r − k ≤ N 2 r − N ∑ j ≥ 1 ( 1 + j ) 2 r − j = C r N 2 r − N です。
∎
Chebyshev 多項式の零点(Chebyshev 点)での補間については、Lebesgue 定数を使った評価 O ( r − n log n ) O(r^{-n}\log n) O ( r − n log n ) がありました(系 6.7[多項式補間] )。ここでは折り返しを使って、Lebesgue 定数を経由せずに対数の因子のない評価を得ています。導関数の誤差は N 2 N^2 N 2 倍になります。この N 2 N^2 N 2 は T k ′ T_k' T k ′ が端で k 2 k^2 k 2 の大きさをもつことから来ていて、次の命題のとおり微分行列の大きさにも現れます。
次の命題の 1 の証明では、点 x 0 , … , x N x_0, \ldots, x_N x 0 , … , x N をちょうど零点にもつ多項式 ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) \omega(x) = (1 - x^2)T_N'(x) ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) を使います。Lagrange の基底多項式は「その点で 1、他の点で 0」の多項式で、分母にこの ω \omega ω の導関数が現れるため、ω ′ \omega' ω ′ の値さえ分かれば微分行列の成分が書き下せるからです。
命題 7.5 (Chebyshev 微分行列 ) ✓
N ≥ 1 N \ge 1 N ≥ 1 、c 0 = c N = 2 c_0 = c_N = 2 c 0 = c N = 2 、c j = 1 c_j = 1 c j = 1 (0 < j < N 0 \lt j \lt N 0 < j < N )とする。
j ≠ l j \ne l j = l のとき D N D_N D N の成分は
( D N ) j l = c j c l ⋅ ( − 1 ) j + l x j − x l (D_N)_{jl} = \frac{c_j}{c_l}\cdot\frac{(-1)^{j+l}}{x_j - x_l} ( D N ) j l = c l c j ⋅ x j − x l ( − 1 ) j + l
で、対角成分は ( D N ) j j = − ∑ l ≠ j ( D N ) j l (D_N)_{jj} = -\sum_{l\ne j}(D_N)_{jl} ( D N ) j j = − ∑ l = j ( D N ) j l である。
N N N 次以下の多項式 p p p は p ( cos θ ) = ∑ k = 0 N b k cos k θ p(\cos\theta) = \sum_{k=0}^{N}b_k\cos k\theta p ( cos θ ) = ∑ k = 0 N b k cos k θ と書け、0 < θ < π 0 \lt \theta \lt \pi 0 < θ < π で p ′ ( cos θ ) = ∑ k = 1 N k b k sin k θ / sin θ p'(\cos\theta) = \sum_{k=1}^{N}k\,b_k\sin k\theta/\sin\theta p ′ ( cos θ ) = ∑ k = 1 N k b k sin k θ / sin θ である。
端の点の間隔は x 0 − x 1 = 2 sin 2 ( π / ( 2 N ) ) ≤ π 2 / ( 2 N 2 ) x_0 - x_1 = 2\sin^2(\pi/(2N)) \le \pi^2/(2N^2) x 0 − x 1 = 2 sin 2 ( π / ( 2 N )) ≤ π 2 / ( 2 N 2 ) である。
∥ D N ∥ ∞ ≥ N 2 \|D_N\|_\infty \ge N^2 ∥ D N ∥ ∞ ≥ N 2 、∥ D N 2 ∥ ∞ ≥ N 2 ( N 2 − 1 ) / 3 \|D_N^2\|_\infty \ge N^2(N^2-1)/3 ∥ D N 2 ∥ ∞ ≥ N 2 ( N 2 − 1 ) /3 である。一方 D N N + 1 = 0 D_N^{N+1} = 0 D N N + 1 = 0 である。
証明(命題 7.5)
ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) \omega(x) = (1 - x^2)T_N'(x) ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) とおきます。補題 7.3 から T N ′ ( cos θ ) = N sin N θ / sin θ T_N'(\cos\theta) = N\sin N\theta/\sin\theta T N ′ ( cos θ ) = N sin N θ / sin θ で、これは θ j = j π / N \theta_j = j\pi/N θ j = j π / N (j = 1 , … , N − 1 j = 1, \ldots, N-1 j = 1 , … , N − 1 )で 0 です。T N ′ T_N' T N ′ は N − 1 N - 1 N − 1 次なので、零点は x 1 , … , x N − 1 x_1, \ldots, x_{N-1} x 1 , … , x N − 1 ですべてで、ω \omega ω は x 0 , … , x N x_0, \ldots, x_N x 0 , … , x N をちょうど零点とする N + 1 N + 1 N + 1 次の多項式です。ω ( x ) = κ ∏ m ( x − x m ) \omega(x) = \kappa\prod_m(x - x_m) ω ( x ) = κ ∏ m ( x − x m ) と書くと ω ′ ( x l ) = κ ∏ m ≠ l ( x l − x m ) \omega'(x_l) = \kappa\prod_{m\ne l}(x_l - x_m) ω ′ ( x l ) = κ ∏ m = l ( x l − x m ) なので、Lagrange の基底多項式(定理 2.2[多項式補間] )は ℓ l ( x ) = ω ( x ) / ( ω ′ ( x l ) ( x − x l ) ) \ell_l(x) = \omega(x)/(\omega'(x_l)(x - x_l)) ℓ l ( x ) = ω ( x ) / ( ω ′ ( x l ) ( x − x l )) です。p = ∑ l v l ℓ l p = \sum_lv_l\ell_l p = ∑ l v l ℓ l から ( D N ) j l = ℓ l ′ ( x j ) (D_N)_{jl} = \ell_l'(x_j) ( D N ) j l = ℓ l ′ ( x j ) で、j ≠ l j \ne l j = l のとき ω ( x j ) = 0 \omega(x_j) = 0 ω ( x j ) = 0 を使うと
ℓ l ′ ( x j ) = ω ′ ( x j ) ( x j − x l ) − ω ( x j ) ω ′ ( x l ) ( x j − x l ) 2 = ω ′ ( x j ) ω ′ ( x l ) ( x j − x l ) \ell_l'(x_j) = \frac{\omega'(x_j)(x_j - x_l) - \omega(x_j)}{\omega'(x_l)(x_j - x_l)^2} = \frac{\omega'(x_j)}{\omega'(x_l)(x_j - x_l)} ℓ l ′ ( x j ) = ω ′ ( x l ) ( x j − x l ) 2 ω ′ ( x j ) ( x j − x l ) − ω ( x j ) = ω ′ ( x l ) ( x j − x l ) ω ′ ( x j ) です。ω ′ ( x j ) \omega'(x_j) ω ′ ( x j ) を求めます。0 < θ < π 0 \lt \theta \lt \pi 0 < θ < π で ω ( cos θ ) = N sin θ sin N θ \omega(\cos\theta) = N\sin\theta\sin N\theta ω ( cos θ ) = N sin θ sin N θ なので、θ \theta θ で微分して
ω ′ ( cos θ ) = − N ( cos θ sin N θ sin θ + N cos N θ ) \omega'(\cos\theta) = -N\Bigl(\cos\theta\,\frac{\sin N\theta}{\sin\theta} + N\cos N\theta\Bigr) ω ′ ( cos θ ) = − N ( cos θ sin θ sin N θ + N cos N θ ) です。θ = θ j \theta = \theta_j θ = θ j (0 < j < N 0 \lt j \lt N 0 < j < N )では sin N θ j = 0 \sin N\theta_j = 0 sin N θ j = 0 、cos N θ j = ( − 1 ) j \cos N\theta_j = (-1)^j cos N θ j = ( − 1 ) j なので ω ′ ( x j ) = − N 2 ( − 1 ) j \omega'(x_j) = -N^2(-1)^j ω ′ ( x j ) = − N 2 ( − 1 ) j 。θ → 0 \theta \to 0 θ → 0 では sin N θ / sin θ → N \sin N\theta/\sin\theta \to N sin N θ / sin θ → N なので ω ′ ( 1 ) = − 2 N 2 \omega'(1) = -2N^2 ω ′ ( 1 ) = − 2 N 2 。θ = π − φ \theta = \pi - \varphi θ = π − φ 、φ → 0 \varphi \to 0 φ → 0 では sin N θ / sin θ = − ( − 1 ) N sin N φ / sin φ → − ( − 1 ) N N \sin N\theta/\sin\theta = -(-1)^N\sin N\varphi/\sin\varphi \to -(-1)^NN sin N θ / sin θ = − ( − 1 ) N sin N φ / sin φ → − ( − 1 ) N N 、cos θ → − 1 \cos\theta \to -1 cos θ → − 1 、cos N θ → ( − 1 ) N \cos N\theta \to (-1)^N cos N θ → ( − 1 ) N なので ω ′ ( − 1 ) = − 2 N 2 ( − 1 ) N \omega'(-1) = -2N^2(-1)^N ω ′ ( − 1 ) = − 2 N 2 ( − 1 ) N 。まとめて ω ′ ( x j ) = − c j N 2 ( − 1 ) j \omega'(x_j) = -c_jN^2(-1)^j ω ′ ( x j ) = − c j N 2 ( − 1 ) j で、( D N ) j l = c j ( − 1 ) j / ( c l ( − 1 ) l ( x j − x l ) ) (D_N)_{jl} = c_j(-1)^j/(c_l(-1)^l(x_j - x_l)) ( D N ) j l = c j ( − 1 ) j / ( c l ( − 1 ) l ( x j − x l )) です。対角成分: 定数関数 1 は N N N 次以下の多項式で導関数が 0 なので、D N D_N D N の各行の成分の和は 0 です。
T 0 , … , T N T_0, \ldots, T_N T 0 , … , T N は次数が 0 , … , N 0, \ldots, N 0 , … , N なので N N N 次以下の多項式の基底で、p = ∑ k b k T k p = \sum_kb_kT_k p = ∑ k b k T k と書けます。T k ( cos θ ) = cos k θ T_k(\cos\theta) = \cos k\theta T k ( cos θ ) = cos k θ から最初の式が出て、θ \theta θ で微分すると − sin θ p ′ ( cos θ ) = − ∑ k k b k sin k θ -\sin\theta\,p'(\cos\theta) = -\sum_kkb_k\sin k\theta − sin θ p ′ ( cos θ ) = − ∑ k k b k sin k θ です。
1 − cos ( π / N ) = 2 sin 2 ( π / ( 2 N ) ) 1 - \cos(\pi/N) = 2\sin^2(\pi/(2N)) 1 − cos ( π / N ) = 2 sin 2 ( π / ( 2 N )) と sin t ≤ t \sin t \le t sin t ≤ t から出ます。
v = ( T N ( x j ) ) j = ( ( − 1 ) j ) j \boldsymbol{v} = (T_N(x_j))_j = ((-1)^j)_j v = ( T N ( x j ) ) j = (( − 1 ) j ) j は ∥ v ∥ ∞ = 1 \|\boldsymbol{v}\|_\infty = 1 ∥ v ∥ ∞ = 1 で、補間する多項式は T N T_N T N 自身なので、( D N v ) 0 = T N ′ ( 1 ) = N 2 (D_N\boldsymbol{v})_0 = T_N'(1) = N^2 ( D N v ) 0 = T N ′ ( 1 ) = N 2 (補題 7.3 )。よって ∥ D N ∥ ∞ ≥ ∥ D N v ∥ ∞ ≥ N 2 \|D_N\|_\infty \ge \|D_N\boldsymbol{v}\|_\infty \ge N^2 ∥ D N ∥ ∞ ≥ ∥ D N v ∥ ∞ ≥ N 2 です。N N N 次以下の多項式の導関数は N N N 次以下なので、D N 2 v D_N^2\boldsymbol{v} D N 2 v は 2 階導関数の格子値で、( D N 2 v ) 0 = T N ′ ′ ( 1 ) = N 2 ( N 2 − 1 ) / 3 (D_N^2\boldsymbol{v})_0 = T_N''(1) = N^2(N^2-1)/3 ( D N 2 v ) 0 = T N ′′ ( 1 ) = N 2 ( N 2 − 1 ) /3 です。同じ理由で D N N + 1 v D_N^{N+1}\boldsymbol{v} D N N + 1 v は N + 1 N + 1 N + 1 階導関数の格子値で、N N N 次以下の多項式では 0 です。
∎
2 が「Fourier の場合への帰着」です。Chebyshev 補間の微分は、余弦級数の係数 b k b_k b k を離散余弦変換(FFT)で求め、k b k kb_k k b k を係数とする正弦級数を作って sin θ \sin\theta sin θ で割ることでも計算できます。
4 の D N N + 1 = 0 D_N^{N+1} = 0 D N N + 1 = 0 は、境界条件を課さない D N D_N D N の固有値がすべて 0 であることを意味します。時間発展の安定性に関係するのは、境界条件を入れた行列です。たとえば u ( ± 1 ) = 0 u(\pm1) = 0 u ( ± 1 ) = 0 のもとでの 2 階微分は、D N 2 D_N^2 D N 2 から最初と最後の行と列を除いた ( N − 1 ) (N-1) ( N − 1 ) 次の行列 D ~ N ( 2 ) \tilde D^{(2)}_N D ~ N ( 2 ) で表されます。
したがって、熱方程式を Chebyshev 選点法と陽的な時間積分で解くと、刻み幅は Δ t = O ( N − 4 ) \Delta t = O(N^{-4}) Δ t = O ( N − 4 ) に制限されます。1 階の方程式(移流・波動)では O ( N − 2 ) O(N^{-2}) O ( N − 2 ) です。Fourier の場合(O ( N − 2 ) O(N^{-2}) O ( N − 2 ) ・O ( N − 1 ) O(N^{-1}) O ( N − 1 ) )より厳しいのは、3 のとおり端の点の間隔が O ( N − 2 ) O(N^{-2}) O ( N − 2 ) だからで、最も細かい格子幅についての CFL 条件に当たります。陰的な方法か、端の密集を緩める変数変換を使うのが普通です。
例 7.7 (Chebyshev 選点法による境界値問題 )
u ′ ′ = e 4 x u'' = e^{4x} u ′′ = e 4 x 、u ( ± 1 ) = 0 u(\pm1) = 0 u ( ± 1 ) = 0 の解は u ( x ) = ( e 4 x − x sinh 4 − cosh 4 ) / 16 u(x) = (e^{4x} - x\sinh4 - \cosh4)/16 u ( x ) = ( e 4 x − x sinh 4 − cosh 4 ) /16 です。u u u は整関数なので、定理 7.4 から補間の誤差はどんな r r r についても O ( r − N ) O(r^{-N}) O ( r − N ) です。選点法の方程式 D ~ N ( 2 ) u = ( e 4 x j ) j = 1 N − 1 \tilde D^{(2)}_N\boldsymbol{u} = (e^{4x_j})_{j=1}^{N-1} D ~ N ( 2 ) u = ( e 4 x j ) j = 1 N − 1 を解き、あわせて D ~ N ( 2 ) \tilde D^{(2)}_N D ~ N ( 2 ) のスペクトル半径と ∥ D N ∥ ∞ \|D_N\|_\infty ∥ D N ∥ ∞ を調べます。
# Python 3.9.6 / NumPy 2.0.2
""" Chebyshev–Gauss–Lobatto 点 x_j = cos(jπ/N) と微分行列 D((N+1) 次)。 """
x = np. cos ( np.pi * j / N )
c = np. where ( (j == 0 ) | (j == N) , 2.0 , 1.0 ) * ( - 1.0 ) ** j
dx = x[:, None ] - x[ None , :] + np. eye ( N + 1 ) # 対角は仮に 1
D = (c[:, None ] / c[ None , :]) / dx
D -= np. diag ( D. sum ( axis = 1 )) # 対角成分は行和が 0 になるように決める
exact = lambda x : (np. exp ( 4 * x ) - x * np. sinh ( 4.0 ) - np. cosh ( 4.0 )) / 16
print ( " N max error rho(D2_interior) rho / N^4 ||D||_inf / N^2 " )
for N in [ 4 , 8 , 12 , 16 , 20 , 24 , 32 , 48 , 64 ] :
D2 = (D @ D) [ 1 :N, 1 :N ] # 両端の行と列を除く(u(±1) = 0)
u = np.linalg. solve ( D2 , np. exp ( 4 * x [ 1 :N ]))
err = np. max ( np. abs ( u - exact ( x [ 1 :N ])))
rho = np. max ( np. abs ( np.linalg. eigvals ( D2 )))
print ( f " {N :4d } {err :.3e } {rho :.6e } {rho / N ** 4 :.5f } "
f " {np. max ( np. sum ( np. abs ( D ) , axis = 1 )) / N ** 2 :.4f } " )
N max error rho(D2_interior) rho / N^4 ||D||_inf / N^2
4 1.039e-01 1.954400e+01 0.07634 1.0000
8 2.162e-04 2.143723e+02 0.05234 1.0000
12 1.067e-07 1.023326e+03 0.04935 1.0000
16 1.935e-11 3.174792e+03 0.04844 1.0000
20 2.887e-15 7.687117e+03 0.04804 1.0000
24 7.994e-15 1.586978e+04 0.04783 1.0000
32 3.508e-14 4.993925e+04 0.04763 1.0000
48 5.551e-14 2.520431e+05 0.04748 1.0000
64 1.814e-13 7.957304e+05 0.04743 1.0000
誤差は N = 20 N = 20 N = 20 で丸めの大きさに達します(N = 16 N = 16 N = 16 で 2 × 10 − 11 2\times10^{-11} 2 × 1 0 − 11 )。それ以降は、行列の条件数が N 4 N^4 N 4 で増えるため、丸め誤差の寄与が少しずつ大きくなります。スペクトル半径は 0.047 N 4 0.047\,N^4 0.047 N 4 程度で、注意 7.6 の値と合います。∥ D N ∥ ∞ / N 2 \|D_N\|_\infty/N^2 ∥ D N ∥ ∞ / N 2 は表示の桁で 1 で、命題 7.5 の 4 の下界 N 2 N^2 N 2 がこの範囲では等号に近いことが分かります。
例 7.8 (調和振動子の固有値 )
− u ′ ′ + y 2 u = E u -u'' + y^2u = Eu − u ′′ + y 2 u = E u (y ∈ R y \in \mathbb{R} y ∈ R )の固有値は E = 1 , 3 , 5 , … E = 1, 3, 5, \ldots E = 1 , 3 , 5 , … です。区間 [ − L , L ] [-L, L] [ − L , L ] (L = 8 L = 8 L = 8 )に切って両端で u = 0 u = 0 u = 0 とし、y = L x y = Lx y = Lx の変数変換で Chebyshev 選点法を使うと、行列 − D ~ N ( 2 ) / L 2 + d i a g ( L 2 x j 2 ) -\tilde D^{(2)}_N/L^2 + \mathrm{diag}(L^2x_j^2) − D ~ N ( 2 ) / L 2 + diag ( L 2 x j 2 ) の固有値が近似を与えます(例 7.7 の cheb を使い、np.linalg.eigvals で固有値を求めました)。
N N N E 1 E_1 E 1 E 2 E_2 E 2 E 3 E_3 E 3 E 4 E_4 E 4 16 0.9054614145799 3.5335247519847 4.3172265629918 10.8740876566453 24 0.9987954905584 3.0148542022036 4.8858222558542 7.3416780603733 32 0.9999972825215 3.0000635816753 4.9991772019360 7.0053199034813 48 0.9999999999998 3.0000000000101 4.9999999997456 7.0000000039444 64 1.0000000000000 3.0000000000000 5.0000000000000 7.0000000000000
固有関数 e − y 2 / 2 × e^{-y^2/2}\times e − y 2 /2 × (多項式)は整関数なので、収束は指数的です。N = 16 N = 16 N = 16 では点が足りず、近似固有値は真の値の上にも下にもずれています。選点法は Galerkin 法ではないので、近似固有値が上界になる保証(Rayleigh–Ritz の上界)はありません。区間を切ったことによる誤差は e − L 2 e^{-L^2} e − L 2 程度で、この表では見えません(切断の誤差は固有値問題の離散化 で評価します)。無限区間を切らずに扱うには、Hermite 関数を基底にとる方法があります(Boyd の教科書の第 17 章)。
スペクトル法の高い精度は、解が滑らかであることに依存します。不連続があると、誤差は不連続点の近くだけでなく区間全体で大きくなります。
命題 8.1 (不連続な関数の Fourier 切断 ) ✓
f ( θ ) = s g n θ f(\theta) = \mathrm{sgn}\,\theta f ( θ ) = sgn θ (− π < θ < π -\pi \lt \theta \lt \pi − π < θ < π )とし、S n f = ∑ ∣ k ∣ ≤ n f ^ ( k ) e k S_nf = \sum_{|k|\le n}\hat f(k)e_k S n f = ∑ ∣ k ∣ ≤ n f ^ ( k ) e k を部分和とする。
sup θ ∣ f ( θ ) − S n f ( θ ) ∣ \sup_\theta|f(\theta) - S_nf(\theta)| sup θ ∣ f ( θ ) − S n f ( θ ) ∣ は n → ∞ n \to \infty n → ∞ で 0 に収束しない。
すべての n ≥ 0 n \ge 0 n ≥ 0 で ∥ f − S n f ∥ 2 ≥ 4 π 2 ( n + 2 ) \|f - S_nf\|^2 \ge \dfrac{4}{\pi^2(n+2)} ∥ f − S n f ∥ 2 ≥ π 2 ( n + 2 ) 4 。
不連続点から離れた点 θ = π / 2 \theta = \pi/2 θ = π /2 で、すべての m ≥ 0 m \ge 0 m ≥ 0 について ∣ f ( π / 2 ) − S 2 m + 1 f ( π / 2 ) ∣ ≥ 2 π ( 2 m + 5 ) \bigl|f(\pi/2) - S_{2m+1}f(\pi/2)\bigr| \ge \dfrac{2}{\pi(2m+5)} f ( π /2 ) − S 2 m + 1 f ( π /2 ) ≥ π ( 2 m + 5 ) 2 。
証明(命題 8.1)
定理 6.1[フーリエ級数] から S 2 m + 1 f ( π / ( 2 m + 2 ) ) → 2 π ∫ 0 π sin u u d u ≈ 1.179 S_{2m+1}f(\pi/(2m+2)) \to \frac2\pi\int_0^\pi\frac{\sin u}{u}du \approx 1.179 S 2 m + 1 f ( π / ( 2 m + 2 )) → π 2 ∫ 0 π u s i n u d u ≈ 1.179 で、f ( π / ( 2 m + 2 ) ) = 1 f(\pi/(2m+2)) = 1 f ( π / ( 2 m + 2 )) = 1 なので、十分大きい m m m で sup θ ∣ f − S 2 m + 1 f ∣ > 0.17 \sup_\theta|f - S_{2m+1}f| \gt 0.17 sup θ ∣ f − S 2 m + 1 f ∣ > 0.17 です。f ^ ( k ) \hat f(k) f ^ ( k ) は偶数の k k k で 0 なので(下の 2 の計算)S 2 m + 2 f = S 2 m + 1 f S_{2m+2}f = S_{2m+1}f S 2 m + 2 f = S 2 m + 1 f で、偶数の n n n でも同じです。
f ^ ( k ) = 1 2 π ∫ − π π s g n θ e − i k θ d θ = − i π ∫ 0 π sin k θ d θ = − i ( 1 − cos k π ) π k \hat f(k) = \frac1{2\pi}\int_{-\pi}^{\pi}\mathrm{sgn}\,\theta\,e^{-ik\theta}d\theta = -\frac{i}{\pi}\int_0^\pi\sin k\theta\,d\theta = -\frac{i(1 - \cos k\pi)}{\pi k} f ^ ( k ) = 2 π 1 ∫ − π π sgn θ e − ik θ d θ = − π i ∫ 0 π sin k θ d θ = − π k i ( 1 − c o s k π ) なので、k k k が奇数のとき ∣ f ^ ( k ) ∣ 2 = 4 / ( π 2 k 2 ) |\hat f(k)|^2 = 4/(\pi^2k^2) ∣ f ^ ( k ) ∣ 2 = 4/ ( π 2 k 2 ) 、偶数のとき 0 です。Parseval の等式から ∥ f − S n f ∥ 2 = 8 π 2 ∑ k > n , k 奇数 k − 2 \|f - S_nf\|^2 = \frac{8}{\pi^2}\sum_{k \gt n,\ k\text{ 奇数}}k^{-2} ∥ f − S n f ∥ 2 = π 2 8 ∑ k > n , k 奇数 k − 2 です。n n n より大きい最小の奇数を a a a とすると a ≤ n + 2 a \le n + 2 a ≤ n + 2 で、t ↦ ( a + 2 t ) − 2 t \mapsto (a + 2t)^{-2} t ↦ ( a + 2 t ) − 2 は減少するので
∑ j ≥ 0 1 ( a + 2 j ) 2 ≥ ∫ 0 ∞ d t ( a + 2 t ) 2 = 1 2 a ≥ 1 2 ( n + 2 ) \sum_{j\ge0}\frac1{(a+2j)^2} \ge \int_0^\infty\frac{dt}{(a+2t)^2} = \frac1{2a} \ge \frac1{2(n+2)} j ≥ 0 ∑ ( a + 2 j ) 2 1 ≥ ∫ 0 ∞ ( a + 2 t ) 2 d t = 2 a 1 ≥ 2 ( n + 2 ) 1 です。
定理 6.1[フーリエ級数] の式から S 2 m + 1 f ( π / 2 ) = 4 π ∑ k = 0 m ( − 1 ) k 2 k + 1 S_{2m+1}f(\pi/2) = \frac4\pi\sum_{k=0}^{m}\frac{(-1)^k}{2k+1} S 2 m + 1 f ( π /2 ) = π 4 ∑ k = 0 m 2 k + 1 ( − 1 ) k です。f f f は π / 2 \pi/2 π /2 の近くで定数なので、定理 3.4[フーリエ級数] から S n f ( π / 2 ) → f ( π / 2 ) = 1 S_nf(\pi/2) \to f(\pi/2) = 1 S n f ( π /2 ) → f ( π /2 ) = 1 です。したがって
f ( π / 2 ) − S 2 m + 1 f ( π / 2 ) = 4 π ∑ k > m ( − 1 ) k 2 k + 1 = 4 π ( − 1 ) m + 1 ∑ j ≥ 0 ( 1 2 m + 3 + 4 j − 1 2 m + 5 + 4 j ) f(\pi/2) - S_{2m+1}f(\pi/2) = \frac4\pi\sum_{k \gt m}\frac{(-1)^k}{2k+1} = \frac4\pi(-1)^{m+1}\sum_{j\ge0}\Bigl(\frac1{2m+3+4j} - \frac1{2m+5+4j}\Bigr) f ( π /2 ) − S 2 m + 1 f ( π /2 ) = π 4 k > m ∑ 2 k + 1 ( − 1 ) k = π 4 ( − 1 ) m + 1 j ≥ 0 ∑ ( 2 m + 3 + 4 j 1 − 2 m + 5 + 4 j 1 ) です(収束する級数の隣り合う 2 項をまとめた)。各項は 2 ( 2 m + 3 + 4 j ) ( 2 m + 5 + 4 j ) ≥ 2 ( 2 m + 5 + 4 j ) 2 \frac{2}{(2m+3+4j)(2m+5+4j)} \ge \frac{2}{(2m+5+4j)^2} ( 2 m + 3 + 4 j ) ( 2 m + 5 + 4 j ) 2 ≥ ( 2 m + 5 + 4 j ) 2 2 で、2 と同じく積分と比べると ∑ j ≥ 0 2 ( a + 4 j ) 2 ≥ 2 ∫ 0 ∞ d t ( a + 4 t ) 2 = 1 2 a \sum_{j\ge0}\frac{2}{(a+4j)^2} \ge 2\int_0^\infty\frac{dt}{(a+4t)^2} = \frac1{2a} ∑ j ≥ 0 ( a + 4 j ) 2 2 ≥ 2 ∫ 0 ∞ ( a + 4 t ) 2 d t = 2 a 1 (a = 2 m + 5 a = 2m+5 a = 2 m + 5 )です。よって絶対値は 4 π ⋅ 1 2 ( 2 m + 5 ) \frac4\pi\cdot\frac1{2(2m+5)} π 4 ⋅ 2 ( 2 m + 5 ) 1 以上です。
∎
3 が差分法との違いです。差分法では、不連続の影響は(線形で安定なスキームなら)不連続点の近くにとどまります。スペクトル法では、どの点の近似にもすべての点の値を使うので、1 か所の不連続が区間全体の誤差を O ( 1 / N ) O(1/N) O ( 1/ N ) にします。周期的でない滑らかな関数(たとえば [ 0 , 2 π ] [0, 2\pi] [ 0 , 2 π ] 上の x x x )を Fourier 級数で近似しようとした場合も、周期的に延長すると端で跳ぶので、同じことが起こります。これが、周期的でない問題に Chebyshev 多項式を使う理由です。
演習 9.1 易
N = 5 N = 5 N = 5 (K = 2 K = 2 K = 2 )とする。3 ∗ 3^{*} 3 ∗ を求め、sin 3 x \sin 3x sin 3 x と − sin 2 x -\sin 2x − sin 2 x が 5 個の格子点 x j = 2 π j / 5 x_j = 2\pi j/5 x j = 2 π j /5 で一致することを確かめよ。また ∥ e 3 − I 5 e 3 ∥ \|e_3 - I_5e_3\| ∥ e 3 − I 5 e 3 ∥ を求めよ。
解答 3 ≡ − 2 ( m o d 5 ) 3 \equiv -2 \pmod 5 3 ≡ − 2 ( mod 5 ) で ∣ − 2 ∣ ≤ 2 |-2| \le 2 ∣ − 2∣ ≤ 2 なので 3 ∗ = − 2 3^{*} = -2 3 ∗ = − 2 。3 x j = − 2 x j + 5 x j = − 2 x j + 2 π j 3x_j = -2x_j + 5x_j = -2x_j + 2\pi j 3 x j = − 2 x j + 5 x j = − 2 x j + 2 π j なので sin 3 x j = sin ( − 2 x j ) = − sin 2 x j \sin 3x_j = \sin(-2x_j) = -\sin 2x_j sin 3 x j = sin ( − 2 x j ) = − sin 2 x j です。補題 3.3 から I 5 e 3 = e − 2 I_5e_3 = e_{-2} I 5 e 3 = e − 2 で、e 3 e_3 e 3 と e − 2 e_{-2} e − 2 は直交する単位ベクトルなので ∥ e 3 − e − 2 ∥ 2 = 1 + 1 = 2 \|e_3 - e_{-2}\|^2 = 1 + 1 = 2 ∥ e 3 − e − 2 ∥ 2 = 1 + 1 = 2 、∥ e 3 − I 5 e 3 ∥ = 2 \|e_3 - I_5e_3\| = \sqrt2 ∥ e 3 − I 5 e 3 ∥ = 2 です。補間が e 3 e_3 e 3 を「捨てる」のではなく、別の波数に置き換えていることが、切断の誤差(∥ e 3 − P 5 e 3 ∥ = 1 \|e_3 - P_5e_3\| = 1 ∥ e 3 − P 5 e 3 ∥ = 1 )より大きい値に表れています。
演習 9.2 標準
u u u を連続な周期関数で ∑ n ∣ u ^ ( n ) ∣ < ∞ \sum_n|\hat u(n)| \lt \infty ∑ n ∣ u ^ ( n ) ∣ < ∞ を満たすものとする。台形則 T N ( u ) = 2 π N ∑ j = 0 N − 1 u ( x j ) T_N(u) = \frac{2\pi}{N}\sum_{j=0}^{N-1}u(x_j) T N ( u ) = N 2 π ∑ j = 0 N − 1 u ( x j ) と積分 I ( u ) = ∫ 0 2 π u d x I(u) = \int_0^{2\pi}u\,dx I ( u ) = ∫ 0 2 π u d x について、T N ( u ) − I ( u ) = 2 π ∑ m ≠ 0 u ^ ( m N ) T_N(u) - I(u) = 2\pi\sum_{m\ne0}\hat u(mN) T N ( u ) − I ( u ) = 2 π ∑ m = 0 u ^ ( m N ) を折り返しの公式から導け。
解答 定義から T N ( u ) = 2 π u ~ 0 T_N(u) = 2\pi\tilde u_0 T N ( u ) = 2 π u ~ 0 、I ( u ) = 2 π u ^ ( 0 ) I(u) = 2\pi\hat u(0) I ( u ) = 2 π u ^ ( 0 ) です。補題 3.3 (k = 0 k = 0 k = 0 )から u ~ 0 = ∑ m u ^ ( m N ) \tilde u_0 = \sum_m\hat u(mN) u ~ 0 = ∑ m u ^ ( m N ) なので、T N ( u ) − I ( u ) = 2 π ( u ~ 0 − u ^ ( 0 ) ) = 2 π ∑ m ≠ 0 u ^ ( m N ) T_N(u) - I(u) = 2\pi(\tilde u_0 - \hat u(0)) = 2\pi\sum_{m\ne0}\hat u(mN) T N ( u ) − I ( u ) = 2 π ( u ~ 0 − u ^ ( 0 )) = 2 π ∑ m = 0 u ^ ( m N ) です。これは 定理 3.2[数値積分 II] の 2 の等式で、台形則の誤差は「波数 m N mN m N の成分が波数 0 に折り返された分」です。u u u が帯状領域で正則なら各項が M e − b ∣ m ∣ N Me^{-b|m|N} M e − b ∣ m ∣ N 以下なので、誤差は O ( e − b N ) O(e^{-bN}) O ( e − b N ) になります。補間の誤差 O ( e − b N / 2 ) O(e^{-bN/2}) O ( e − b N /2 ) より指数が 2 倍よいのは、補間では波数 K ≈ N / 2 K \approx N/2 K ≈ N /2 のすぐ外の成分が効くのに対し、積分では波数 N N N 以上の成分しか効かないからです。
演習 9.3 標準
N = 2 K + 1 N = 2K+1 N = 2 K + 1 、K ≥ 1 K \ge 1 K ≥ 1 とする。半離散の移流方程式 v ′ = − D v \boldsymbol{v}' = -D\boldsymbol{v} v ′ = − D v に陽的 Euler 法 v n + 1 = ( I − Δ t D ) v n \boldsymbol{v}^{n+1} = (I - \Delta tD)\boldsymbol{v}^n v n + 1 = ( I − Δ t D ) v n を使うと、どんな Δ t > 0 \Delta t \gt 0 Δ t > 0 でも ∥ ( I − Δ t D ) n ∥ 2 → ∞ \|(I - \Delta tD)^n\|_2 \to \infty ∥ ( I − Δ t D ) n ∥ 2 → ∞ (n → ∞ n \to \infty n → ∞ )となることを示せ。また、T = n Δ t T = n\Delta t T = n Δ t を固定して Δ t → 0 \Delta t \to 0 Δ t → 0 とするとき ∥ ( I − Δ t D ) n ∥ 2 \|(I - \Delta tD)^n\|_2 ∥ ( I − Δ t D ) n ∥ 2 が有界にとどまるための、Δ t \Delta t Δ t と K K K の関係を求めよ。
解答 命題 5.2 の 3 から、I − Δ t D I - \Delta tD I − Δ t D は正規直交な固有ベクトル v k / N \boldsymbol{v}_k/\sqrt N v k / N と固有値 1 − i k Δ t 1 - ik\Delta t 1 − ik Δ t をもつので、∥ ( I − Δ t D ) n ∥ 2 = max ∣ k ∣ ≤ K ∣ 1 − i k Δ t ∣ n = ( 1 + K 2 Δ t 2 ) n / 2 \|(I - \Delta tD)^n\|_2 = \max_{|k|\le K}|1 - ik\Delta t|^n = (1 + K^2\Delta t^2)^{n/2} ∥ ( I − Δ t D ) n ∥ 2 = max ∣ k ∣ ≤ K ∣1 − ik Δ t ∣ n = ( 1 + K 2 Δ t 2 ) n /2 です。K ≥ 1 K \ge 1 K ≥ 1 、Δ t > 0 \Delta t \gt 0 Δ t > 0 なら底が 1 より大きいので発散します。n = T / Δ t n = T/\Delta t n = T /Δ t のとき ( 1 + K 2 Δ t 2 ) T / ( 2 Δ t ) ≤ e T K 2 Δ t / 2 (1 + K^2\Delta t^2)^{T/(2\Delta t)} \le e^{TK^2\Delta t/2} ( 1 + K 2 Δ t 2 ) T / ( 2Δ t ) ≤ e T K 2 Δ t /2 で、また K 2 Δ t → ∞ K^2\Delta t \to \infty K 2 Δ t → ∞ なら左辺は発散するので(y = K 2 Δ t 2 ≤ 1 y = K^2\Delta t^2 \le 1 y = K 2 Δ t 2 ≤ 1 のときは log ( 1 + y ) ≥ y / 2 \log(1 + y) \ge y/2 log ( 1 + y ) ≥ y /2 から左辺は e T K 2 Δ t / 4 e^{TK^2\Delta t/4} e T K 2 Δ t /4 以上、y > 1 y \gt 1 y > 1 のときは 2 T / ( 2 Δ t ) 2^{T/(2\Delta t)} 2 T / ( 2Δ t ) 以上)、有界であるための条件は K 2 Δ t K^2\Delta t K 2 Δ t が有界、すなわち Δ t = O ( N − 2 ) \Delta t = O(N^{-2}) Δ t = O ( N − 2 ) です。純虚数の固有値をもつ問題に陽的 Euler 法を使うと、1 階の方程式でも放物型と同じ厳しさの刻み幅が要ります。例 6.8 の 4 次 Runge–Kutta 法では、安定領域が虚軸の区間 ∣ y ∣ ≤ 2 2 |y| \le 2\sqrt2 ∣ y ∣ ≤ 2 2 を含むので Δ t ≤ 2 2 / K \Delta t \le 2\sqrt2/K Δ t ≤ 2 2 / K で済みます。
演習 9.4 難
N ≥ 1 N \ge 1 N ≥ 1 とする。T N + 1 T_{N+1} T N + 1 の Chebyshev 補間 p N p_N p N を求め、誤差が T N + 1 ( x ) − p N ( x ) = − 2 N ( 1 − x 2 ) T N ′ ( x ) T_{N+1}(x) - p_N(x) = -\frac2N(1 - x^2)T_N'(x) T N + 1 ( x ) − p N ( x ) = − N 2 ( 1 − x 2 ) T N ′ ( x ) と書けることを示せ。これを補間誤差の公式(定理 4.1[多項式補間] )と比べよ。
解答 補題 7.2 で k = N + 1 k = N + 1 k = N + 1 とします。N ≥ 2 N \ge 2 N ≥ 2 なら r = N + 1 > N r = N + 1 \gt N r = N + 1 > N なので k ♯ = 2 N − ( N + 1 ) = N − 1 k^{\sharp} = 2N - (N+1) = N - 1 k ♯ = 2 N − ( N + 1 ) = N − 1 、N = 1 N = 1 N = 1 なら r = 0 r = 0 r = 0 で k ♯ = 0 = N − 1 k^{\sharp} = 0 = N - 1 k ♯ = 0 = N − 1 。どちらも p N = T N − 1 p_N = T_{N-1} p N = T N − 1 です。x = cos θ x = \cos\theta x = cos θ とすると
T N + 1 ( x ) − T N − 1 ( x ) = cos ( N + 1 ) θ − cos ( N − 1 ) θ = − 2 sin N θ sin θ T_{N+1}(x) - T_{N-1}(x) = \cos(N+1)\theta - \cos(N-1)\theta = -2\sin N\theta\,\sin\theta T N + 1 ( x ) − T N − 1 ( x ) = cos ( N + 1 ) θ − cos ( N − 1 ) θ = − 2 sin N θ sin θ で、補題 7.3 から sin N θ sin θ = sin 2 θ ⋅ T N ′ ( cos θ ) / N = ( 1 − x 2 ) T N ′ ( x ) / N \sin N\theta\sin\theta = \sin^2\theta\cdot T_N'(\cos\theta)/N = (1 - x^2)T_N'(x)/N sin N θ sin θ = sin 2 θ ⋅ T N ′ ( cos θ ) / N = ( 1 − x 2 ) T N ′ ( x ) / N です。
補間誤差の公式は u − p N = u ( N + 1 ) ( ξ ) ( N + 1 ) ! ∏ j = 0 N ( x − x j ) u - p_N = \frac{u^{(N+1)}(\xi)}{(N+1)!}\prod_{j=0}^{N}(x - x_j) u − p N = ( N + 1 )! u ( N + 1 ) ( ξ ) ∏ j = 0 N ( x − x j ) です。u = T N + 1 u = T_{N+1} u = T N + 1 では u ( N + 1 ) = 2 N ( N + 1 ) ! u^{(N+1)} = 2^N(N+1)! u ( N + 1 ) = 2 N ( N + 1 )! (最高次の係数が 2 N 2^N 2 N )なので、誤差は 2 N ∏ j ( x − x j ) 2^N\prod_j(x - x_j) 2 N ∏ j ( x − x j ) です。一方 ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) \omega(x) = (1 - x^2)T_N'(x) ω ( x ) = ( 1 − x 2 ) T N ′ ( x ) は x 0 , … , x N x_0, \ldots, x_N x 0 , … , x N を零点にもち、最高次の係数は − N ⋅ 2 N − 1 -N\cdot2^{N-1} − N ⋅ 2 N − 1 なので ∏ j ( x − x j ) = − ω ( x ) / ( N 2 N − 1 ) \prod_j(x - x_j) = -\omega(x)/(N2^{N-1}) ∏ j ( x − x j ) = − ω ( x ) / ( N 2 N − 1 ) 、よって誤差は − 2 ω ( x ) / N -2\omega(x)/N − 2 ω ( x ) / N で、上の結果と一致します。max [ − 1 , 1 ] ∣ ∏ j ( x − x j ) ∣ = max ∣ 2 sin N θ sin θ ∣ / 2 N ≤ 2 1 − N \max_{[-1,1]}|\prod_j(x - x_j)| = \max|2\sin N\theta\sin\theta|/2^N \le 2^{1-N} max [ − 1 , 1 ] ∣ ∏ j ( x − x j ) ∣ = max ∣2 sin N θ sin θ ∣/ 2 N ≤ 2 1 − N で、Chebyshev 点の節点多項式の最大値 2 − N 2^{-N} 2 − N (定理 6.2[多項式補間] )の 2 倍以内です。端点を補間点に含めても、節点多項式の大きさはほとんど変わりません。
L. N. Trefethen, Spectral Methods in MATLAB , SIAM, 2000 — 第 3 章(周期格子と FFT)、第 4 章(滑らかさとスペクトル精度)、第 6 章(Chebyshev 微分行列)。
C. Canuto, M. Y. Hussaini, A. Quarteroni, T. A. Zang, Spectral Methods: Fundamentals in Single Domains , Springer, 2006 — Fourier・Chebyshev 近似の誤差評価と、Galerkin 法・選点法の解析。
J. P. Boyd, Chebyshev and Fourier Spectral Methods , 2nd ed., Dover, 2001 — 折り返しと 3/2 則、無限区間の基底。
D. Gottlieb, S. A. Orszag, Numerical Analysis of Spectral Methods: Theory and Applications , SIAM, 1977.
E. W. Cheney, Introduction to Approximation Theory , 2nd ed., AMS Chelsea, 1982 — Markov の不等式。
J. A. C. Weideman, L. N. Trefethen, “The eigenvalues of second-order spectral differentiation matrices”, SIAM Journal on Numerical Analysis 25 (1988), 1279–1298.
S. A. Orszag, “On the elimination of aliasing in finite-difference schemes by filtering high-wavenumber components”, Journal of the Atmospheric Sciences 28 (1971), 1074.
執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12