曲線の下の面積を、細い台形を並べて近似する方法があります。台形を細かくすれば誤差は減りますが、どのくらい減るのか、減り方の形が分かれば、粗い計算を 2 つ組み合わせて誤差を打ち消せるのではないか、というのがこの記事の出発点です。読み終えると、少ない計算で積分の精度を大きく上げる方法(外挿)と、得られた値の誤差を見積もる方法が分かり、あわせて刻みを小さくしすぎると逆効果になる理由も説明できるようになります。
複合台形則の誤差は、f f f が滑らかなら T ( h ) − I = c 1 h 2 + c 2 h 4 + ⋯ + c p h 2 p + O ( h 2 p + 2 ) T(h) - I = c_1h^2 + c_2h^4 + \cdots + c_ph^{2p} + O(h^{2p+2}) T ( h ) − I = c 1 h 2 + c 2 h 4 + ⋯ + c p h 2 p + O ( h 2 p + 2 ) と刻みの偶数冪で展開 できます。係数は Bernoulli 数(§2 で使う特別な数列)と端点での奇数階導関数の差で、証明はEuler–Maclaurin の公式 です。
周期関数を 1 周期にわたって積分するときは端点の項が打ち消し合い、台形則の誤差は O ( h 2 p ) O(h^{2p}) O ( h 2 p ) (C 2 p C^{2p} C 2 p 級)、帯状領域で正則 なら 4 π M / ( e a N − 1 ) 4\pi M/(e^{aN} - 1) 4 π M / ( e a N − 1 ) 以下と指数的に 小さくなります。証明は Fourier 係数の折り返し(高い周波数の波が、少ない点では低い周波数の波と同じに見えてしまうこと)と積分路の平行移動です。
Richardson 外挿 は、誤差の展開の主要項を 2 つの刻みの値の組み合わせで消します。これを繰り返す Romberg 法 では、表の第 j j j 列の誤差が O ( h 2 j + 2 ) O(h^{2j+2}) O ( h 2 j + 2 ) になり、第 1 列は複合 Simpson 則に一致します。
2 つの刻みの値の差から誤差そのものを推定 でき、適応型求積の停止判定の根拠になります。仮定(滑らかさ)が崩れると、加速も推定も効かなくなります(∫ 0 1 x d x \int_0^1\sqrt x\,dx ∫ 0 1 x d x )。
数値微分では刻みを小さくすると丸め誤差が u / h u/h u / h で増えるので、中心差分の最適な刻みは h ≈ u 1 / 3 h \approx u^{1/3} h ≈ u 1/3 の程度で、得られる精度は u 2 / 3 u^{2/3} u 2/3 程度です。
この記事で使う事前知識
複合台形則・求積則 : 区間を等分して台形の面積を足し、積分の近似値とする方法。積分を関数値の重み付き和で近似する公式を求積則と呼びます。→ 求積則
漸近展開 : h → 0 h \to 0 h → 0 での振る舞いを h h h の冪の和で表す展開。和が収束するとは限らず、h h h が小さいときに最初の数項が精度を与えます。→ 漸近解析
正則関数 : 複素平面の領域で複素微分できる関数。→ 正則関数
Fourier 係数 : 周期関数を e i n θ e^{in\theta} e in θ の重ね合わせで表したときの、各 e i n θ e^{in\theta} e in θ の係数 f ^ ( n ) \hat f(n) f ^ ( n ) 。
単位丸め u u u : 浮動小数の 1 回の四則演算で生じる相対誤差の上限(倍精度で 2 − 53 2^{-53} 2 − 53 )。
Newton–Cotes 則と Gauss 求積 の章で、複合台形則の誤差は − ( b − a ) h 2 12 f ′ ′ ( ξ ) -\frac{(b-a)h^2}{12}f''(\xi) − 12 ( b − a ) h 2 f ′′ ( ξ ) であることを示しました。この式は誤差の大きさを教えてくれますが、ξ \xi ξ が未知なので誤差を消すことはできません。ところが、誤差の式をもっと精密に、
T ( h ) = I + c 1 h 2 + c 2 h 4 + ⋯ T(h) = I + c_1h^2 + c_2h^4 + \cdots T ( h ) = I + c 1 h 2 + c 2 h 4 + ⋯
と h h h のべき級数の形で書けるなら話は変わります。c 1 c_1 c 1 が未知でも、T ( h ) T(h) T ( h ) と T ( h / 2 ) T(h/2) T ( h /2 ) の 2 つの値から c 1 h 2 c_1h^2 c 1 h 2 の項を消去できるからです。この「誤差の展開の形だけを使って、係数を知らずに誤差を消す」技法が Richardson 外挿で、数値積分だけでなく、数値微分、常微分方程式の数値解、格子の上の計算の連続極限など、刻みのある計算すべてに使えます。
本章の主役は Euler–Maclaurin の公式です。これが台形則の誤差の展開を与え、外挿が効く理由と、効かない場合(端点で滑らかでない関数)の理由の両方を説明します。さらに同じ公式から、周期関数では台形則が驚くほど正確になるという、一見すると逆説的な事実も出てきます。最後に、刻みを小さくすると逆に精度が落ちる数値微分を例に、打ち切り誤差と丸め誤差の釣り合いを定量的に扱います。
漸近解析の章 の Bernoulli 多項式 B m ( t ) B_m(t) B m ( t ) と Bernoulli 数 B m = B m ( 0 ) B_m = B_m(0) B m = B m ( 0 ) (補題 7.1[漸近解析] )、その周期 1 の延長 B ~ m ( t ) = B m ( t − ⌊ t ⌋ ) \tilde B_m(t) = B_m(t - \lfloor t\rfloor) B ~ m ( t ) = B m ( t − ⌊ t ⌋) を使います。B 2 = 1 / 6 B_2 = 1/6 B 2 = 1/6 、B 4 = − 1 / 30 B_4 = -1/30 B 4 = − 1/30 、B 6 = 1 / 42 B_6 = 1/42 B 6 = 1/42 です。B m B_m B m は [ 0 , 1 ] [0,1] [ 0 , 1 ] 上の連続関数なので最大値 β m = max 0 ≤ t ≤ 1 ∣ B m ( t ) ∣ \beta_m = \max_{0 \le t \le 1}|B_m(t)| β m = max 0 ≤ t ≤ 1 ∣ B m ( t ) ∣ をもち(定理 2.3[平均値の定理とテイラーの定理] )、すべての実数 t t t で ∣ B ~ m ( t ) ∣ ≤ β m |\tilde B_m(t)| \le \beta_m ∣ B ~ m ( t ) ∣ ≤ β m です。
以下 a < b a \lt b a < b 、N ≥ 1 N \ge 1 N ≥ 1 、h = ( b − a ) / N h = (b-a)/N h = ( b − a ) / N とし、複合台形則を T ( h ) = h ( 1 2 f ( a ) + ∑ k = 1 N − 1 f ( a + k h ) + 1 2 f ( b ) ) T(h) = h\bigl(\frac12f(a) + \sum_{k=1}^{N-1}f(a + kh) + \frac12f(b)\bigr) T ( h ) = h ( 2 1 f ( a ) + ∑ k = 1 N − 1 f ( a + k h ) + 2 1 f ( b ) ) 、I = ∫ a b f ( x ) d x I = \int_a^b f(x)\,dx I = ∫ a b f ( x ) d x と書きます。
次の定理のねらいは、誤差 T ( h ) − I T(h) - I T ( h ) − I が h 2 , h 4 , … h^2, h^4, \ldots h 2 , h 4 , … の項の和として書け、その係数が両端での奇数階導関数の差だけで決まることを示すことです。Euler–Maclaurin の公式そのものは証明の最初の式で、和 ∑ g ( k ) \sum g(k) ∑ g ( k ) を、積分、両端の平均、Bernoulli 数を含む端点の項、剰余の積分で書き表したものです。証明では、これを g ( s ) = f ( a + s h ) g(s) = f(a + sh) g ( s ) = f ( a + s h ) に当てはめて整理します。
定理 2.1 (複合台形則の漸近展開 ) ✓
p ≥ 0 p \ge 0 p ≥ 0 とし、f ∈ C 2 p + 2 [ a , b ] f \in C^{2p+2}[a,b] f ∈ C 2 p + 2 [ a , b ] とする。
c j = B 2 j ( 2 j ) ! ( f ( 2 j − 1 ) ( b ) − f ( 2 j − 1 ) ( a ) ) ( j ≥ 1 ) c_j = \frac{B_{2j}}{(2j)!}\bigl(f^{(2j-1)}(b) - f^{(2j-1)}(a)\bigr) \qquad (j \ge 1) c j = ( 2 j )! B 2 j ( f ( 2 j − 1 ) ( b ) − f ( 2 j − 1 ) ( a ) ) ( j ≥ 1 ) とおくと、すべての N ≥ 1 N \ge 1 N ≥ 1 について
T ( h ) − I = ∑ j = 1 p c j h 2 j + R p ( h ) , ∣ R p ( h ) ∣ ≤ K p h 2 p + 2 T(h) - I = \sum_{j=1}^{p} c_j h^{2j} + R_p(h), \qquad |R_p(h)| \le K_p h^{2p+2} T ( h ) − I = j = 1 ∑ p c j h 2 j + R p ( h ) , ∣ R p ( h ) ∣ ≤ K p h 2 p + 2 が成り立つ。ここで K p = ∣ c p + 1 ∣ + ( b − a ) β 2 p + 2 ( 2 p + 2 ) ! max [ a , b ] ∣ f ( 2 p + 2 ) ∣ K_p = |c_{p+1}| + \frac{(b-a)\beta_{2p+2}}{(2p+2)!}\max_{[a,b]}|f^{(2p+2)}| K p = ∣ c p + 1 ∣ + ( 2 p + 2 )! ( b − a ) β 2 p + 2 max [ a , b ] ∣ f ( 2 p + 2 ) ∣ は N N N によらない定数である。
証明(定理 2.1) g ( s ) = f ( a + s h ) g(s) = f(a + sh) g ( s ) = f ( a + s h ) (s ∈ [ 0 , N ] s \in [0, N] s ∈ [ 0 , N ] )とおくと g ∈ C 2 p + 2 [ 0 , N ] g \in C^{2p+2}[0,N] g ∈ C 2 p + 2 [ 0 , N ] で、g ( m ) ( s ) = h m f ( m ) ( a + s h ) g^{(m)}(s) = h^m f^{(m)}(a + sh) g ( m ) ( s ) = h m f ( m ) ( a + s h ) です。Euler–Maclaurin の公式(定理 7.2[漸近解析] 。整数 0 < N 0 \lt N 0 < N 、項の数 p + 1 p+1 p + 1 )を g g g に使うと
∑ k = 0 N g ( k ) = ∫ 0 N g ( s ) d s + g ( 0 ) + g ( N ) 2 + ∑ j = 1 p + 1 B 2 j ( 2 j ) ! ( g ( 2 j − 1 ) ( N ) − g ( 2 j − 1 ) ( 0 ) ) − ∫ 0 N B ~ 2 p + 2 ( s ) ( 2 p + 2 ) ! g ( 2 p + 2 ) ( s ) d s \sum_{k=0}^{N}g(k) = \int_0^N g(s)\,ds + \frac{g(0) + g(N)}{2} + \sum_{j=1}^{p+1}\frac{B_{2j}}{(2j)!}\bigl(g^{(2j-1)}(N) - g^{(2j-1)}(0)\bigr) - \int_0^N\frac{\tilde B_{2p+2}(s)}{(2p+2)!}g^{(2p+2)}(s)\,ds k = 0 ∑ N g ( k ) = ∫ 0 N g ( s ) d s + 2 g ( 0 ) + g ( N ) + j = 1 ∑ p + 1 ( 2 j )! B 2 j ( g ( 2 j − 1 ) ( N ) − g ( 2 j − 1 ) ( 0 ) ) − ∫ 0 N ( 2 p + 2 )! B ~ 2 p + 2 ( s ) g ( 2 p + 2 ) ( s ) d s です。T ( h ) = h ( ∑ k = 0 N g ( k ) − g ( 0 ) + g ( N ) 2 ) T(h) = h\bigl(\sum_{k=0}^N g(k) - \frac{g(0) + g(N)}{2}\bigr) T ( h ) = h ( ∑ k = 0 N g ( k ) − 2 g ( 0 ) + g ( N ) ) 、置換積分(定理 6.1[積分の基本定理と定積分] )から h ∫ 0 N g ( s ) d s = I h\int_0^N g(s)\,ds = I h ∫ 0 N g ( s ) d s = I なので、両辺に h h h を掛けて
T ( h ) − I = ∑ j = 1 p + 1 c j h 2 j − h 2 p + 3 ∫ 0 N B ~ 2 p + 2 ( s ) ( 2 p + 2 ) ! f ( 2 p + 2 ) ( a + s h ) d s T(h) - I = \sum_{j=1}^{p+1}c_jh^{2j} - h^{2p+3}\int_0^N\frac{\tilde B_{2p+2}(s)}{(2p+2)!}f^{(2p+2)}(a + sh)\,ds T ( h ) − I = j = 1 ∑ p + 1 c j h 2 j − h 2 p + 3 ∫ 0 N ( 2 p + 2 )! B ~ 2 p + 2 ( s ) f ( 2 p + 2 ) ( a + s h ) d s を得ます。j = p + 1 j = p+1 j = p + 1 の項と最後の積分を R p ( h ) R_p(h) R p ( h ) とします。積分の単調性(命題 4.1[積分の基本定理と定積分] の 2)と ∣ B ~ 2 p + 2 ∣ ≤ β 2 p + 2 |\tilde B_{2p+2}| \le \beta_{2p+2} ∣ B ~ 2 p + 2 ∣ ≤ β 2 p + 2 から、最後の項の絶対値は h 2 p + 3 N β 2 p + 2 ( 2 p + 2 ) ! max ∣ f ( 2 p + 2 ) ∣ h^{2p+3}N\frac{\beta_{2p+2}}{(2p+2)!}\max|f^{(2p+2)}| h 2 p + 3 N ( 2 p + 2 )! β 2 p + 2 max ∣ f ( 2 p + 2 ) ∣ 以下で、N h = b − a Nh = b - a N h = b − a なので主張を得ます。
∎
p = 0 p = 0 p = 0 の場合は ∣ T ( h ) − I ∣ ≤ K 0 h 2 |T(h) - I| \le K_0h^2 ∣ T ( h ) − I ∣ ≤ K 0 h 2 で、前の章 の複合台形則の評価(系 4.3[数値積分 I] )と同じ次数です。展開の価値は、誤差が偶数冪だけ で、しかも係数 c j c_j c j が h h h によらないことにあります。注意すべきは、これは収束する級数ではなく漸近展開 だということです。p p p を増やすと K p K_p K p は一般に急激に大きくなり、p → ∞ p \to \infty p → ∞ で右辺の級数が収束するとは限りません。外挿では、固定した p p p について h → 0 h \to 0 h → 0 の振る舞いだけを使います。
最初の係数は c 1 = 1 12 ( f ′ ( b ) − f ′ ( a ) ) c_1 = \frac{1}{12}\bigl(f'(b) - f'(a)\bigr) c 1 = 12 1 ( f ′ ( b ) − f ′ ( a ) ) です。f ′ ( b ) = f ′ ( a ) f'(b) = f'(a) f ′ ( b ) = f ′ ( a ) なら h 2 h^2 h 2 の項が消え、さらに奇数階導関数がすべて両端で一致すれば、どの c j c_j c j も消えます。これが次の節の出発点です。
f f f を周期 2 π 2\pi 2 π の関数とし、h = 2 π / N h = 2\pi/N h = 2 π / N 、
T N ( f ) = 2 π N ∑ k = 0 N − 1 f ( 2 π k N ) , I ( f ) = ∫ 0 2 π f ( θ ) d θ T_N(f) = \frac{2\pi}{N}\sum_{k=0}^{N-1}f\Bigl(\frac{2\pi k}{N}\Bigr), \qquad I(f) = \int_0^{2\pi}f(\theta)\,d\theta T N ( f ) = N 2 π k = 0 ∑ N − 1 f ( N 2 π k ) , I ( f ) = ∫ 0 2 π f ( θ ) d θ
とおきます。f ( 0 ) = f ( 2 π ) f(0) = f(2\pi) f ( 0 ) = f ( 2 π ) なので、T N T_N T N は [ 0 , 2 π ] [0, 2\pi] [ 0 , 2 π ] の複合台形則そのものです。
次の補題のねらいは、Fourier 係数が n n n とともに指数的に小さくなることを示すことです。方針は、実軸上の積分を、虚軸方向に b b b だけずらした直線上の積分に取り替えることです。そこでは e − i n θ e^{-in\theta} e − in θ の大きさが e − n b e^{-nb} e − nb に縮むので、係数も同じ割合で小さいと分かります。ずらしてよい理由は、周期性と Cauchy の積分定理(Goursat の定理)で、長方形の周に沿った積分が 0 0 0 になることです。
補題 3.1 (帯状領域で正則な周期関数の Fourier 係数 ) ✓
a > 0 a \gt 0 a > 0 とし、f f f は帯状領域 S a = { z ∈ C : ∣ I m z ∣ < a } S_a = \{z \in \mathbb{C} : |\mathrm{Im}\,z| \lt a\} S a = { z ∈ C : ∣ Im z ∣ < a } で正則、f ( z + 2 π ) = f ( z ) f(z + 2\pi) = f(z) f ( z + 2 π ) = f ( z ) 、S a S_a S a 上で ∣ f ∣ ≤ M |f| \le M ∣ f ∣ ≤ M とする。このとき 0 < b < a 0 \lt b \lt a 0 < b < a とすべての整数 n n n について、実軸上の f f f の Fourier 係数 f ^ ( n ) = 1 2 π ∫ − π π f ( θ ) e − i n θ d θ \hat f(n) = \frac1{2\pi}\int_{-\pi}^{\pi}f(\theta)e^{-in\theta}\,d\theta f ^ ( n ) = 2 π 1 ∫ − π π f ( θ ) e − in θ d θ は
∣ f ^ ( n ) ∣ ≤ M e − ∣ n ∣ b |\hat f(n)| \le M e^{-|n|b} ∣ f ^ ( n ) ∣ ≤ M e − ∣ n ∣ b を満たす。
証明(補題 3.1) n ≥ 0 n \ge 0 n ≥ 0 とします(n < 0 n \lt 0 n < 0 は下の − b -b − b を b b b に替えて同じです)。g ( z ) = f ( z ) e − i n z g(z) = f(z)e^{-inz} g ( z ) = f ( z ) e − in z は S a S_a S a で正則で、n n n が整数なので g ( z + 2 π ) = g ( z ) g(z + 2\pi) = g(z) g ( z + 2 π ) = g ( z ) です。頂点 − π − i b -\pi - ib − π − ib 、π − i b \pi - ib π − ib 、π \pi π 、− π -\pi − π の長方形 R R R (周と内部、S a S_a S a に含まれる)の周を正の向きに 1 周する積分を考えます。R R R を対角線で 2 つの閉三角形に分けると、Goursat の定理(定理 4.5[コーシーの積分定理と積分公式] )から各三角形の周の積分は 0 0 0 で、共通の対角線は逆向きに 2 回通るので打ち消し合います(命題 2.3[コーシーの積分定理と積分公式] の 2・3)。よって ∮ ∂ R g d z = 0 \oint_{\partial R}g\,dz = 0 ∮ ∂ R g d z = 0 です。
周を 4 辺に分けます。右辺 π − i b → π \pi - ib \to \pi π − ib → π の積分は i ∫ 0 b g ( π − i b + i t ) d t = i ∫ 0 b g ( π − i s ) d s i\int_0^b g(\pi - ib + it)\,dt = i\int_0^b g(\pi - is)\,ds i ∫ 0 b g ( π − ib + i t ) d t = i ∫ 0 b g ( π − i s ) d s (s = b − t s = b - t s = b − t )、左辺 − π → − π − i b -\pi \to -\pi - ib − π → − π − ib の積分は − i ∫ 0 b g ( − π − i s ) d s = − i ∫ 0 b g ( π − i s ) d s -i\int_0^b g(-\pi - is)\,ds = -i\int_0^b g(\pi - is)\,ds − i ∫ 0 b g ( − π − i s ) d s = − i ∫ 0 b g ( π − i s ) d s (周期性)なので、両者は打ち消し合います。残る上辺(実軸上を π \pi π から − π -\pi − π へ)と下辺(− π − i b -\pi - ib − π − ib から π − i b \pi - ib π − ib へ)から
∫ − π π g ( θ ) d θ = ∫ − π π g ( θ − i b ) d θ \int_{-\pi}^{\pi}g(\theta)\,d\theta = \int_{-\pi}^{\pi}g(\theta - ib)\,d\theta ∫ − π π g ( θ ) d θ = ∫ − π π g ( θ − ib ) d θ です。左辺は 2 π f ^ ( n ) 2\pi\hat f(n) 2 π f ^ ( n ) です。右辺の被積分関数は ∣ f ( θ − i b ) ∣ ∣ e − i n ( θ − i b ) ∣ ≤ M e − n b |f(\theta - ib)||e^{-in(\theta - ib)}| \le Me^{-nb} ∣ f ( θ − ib ) ∣∣ e − in ( θ − ib ) ∣ ≤ M e − nb を満たすので、ML 不等式(補題 2.4[コーシーの積分定理と積分公式] 。長さ 2 π 2\pi 2 π )から 2 π ∣ f ^ ( n ) ∣ ≤ 2 π M e − n b 2\pi|\hat f(n)| \le 2\pi Me^{-nb} 2 π ∣ f ^ ( n ) ∣ ≤ 2 π M e − nb です。
∎
次の定理の 1 は、前節の展開で端点の項が周期性により消えることから従います。2 の方針は、f f f を Fourier 級数で書いて台形則の和に代入し、k k k についての和が、n n n が N N N の倍数のときだけ N N N 、それ以外では 0 0 0 になることを使う、というものです。残るのは周波数 m N mN m N の係数だけで、補題がそれらの小ささを与えます。
定理 3.2 (周期関数の台形則 ) ✓
f : R → C f : \mathbb{R} \to \mathbb{C} f : R → C を周期 2 π 2\pi 2 π の関数とする。
p ≥ 1 p \ge 1 p ≥ 1 とし、f f f が C 2 p C^{2p} C 2 p 級ならば、すべての N ≥ 1 N \ge 1 N ≥ 1 について
∣ T N ( f ) − I ( f ) ∣ ≤ 2 π β 2 p ( 2 p ) ! max [ 0 , 2 π ] ∣ f ( 2 p ) ∣ ( 2 π N ) 2 p . |T_N(f) - I(f)| \le \frac{2\pi\beta_{2p}}{(2p)!}\max_{[0,2\pi]}|f^{(2p)}|\Bigl(\frac{2\pi}{N}\Bigr)^{2p}. ∣ T N ( f ) − I ( f ) ∣ ≤ ( 2 p )! 2 π β 2 p [ 0 , 2 π ] max ∣ f ( 2 p ) ∣ ( N 2 π ) 2 p .
f f f が 補題 3.1 の仮定(帯状領域 S a S_a S a で正則、周期 2 π 2\pi 2 π 、∣ f ∣ ≤ M |f| \le M ∣ f ∣ ≤ M )を満たすならば、すべての N ≥ 1 N \ge 1 N ≥ 1 について
T N ( f ) − I ( f ) = 2 π ∑ m ≠ 0 f ^ ( m N ) , ∣ T N ( f ) − I ( f ) ∣ ≤ 4 π M e a N − 1 . T_N(f) - I(f) = 2\pi\sum_{m \ne 0}\hat f(mN), \qquad |T_N(f) - I(f)| \le \frac{4\pi M}{e^{aN} - 1}. T N ( f ) − I ( f ) = 2 π m = 0 ∑ f ^ ( m N ) , ∣ T N ( f ) − I ( f ) ∣ ≤ e a N − 1 4 π M .
証明(定理 3.2) 1. 定理 2.1 の証明と同じく g ( s ) = f ( s h ) g(s) = f(sh) g ( s ) = f ( s h ) (h = 2 π / N h = 2\pi/N h = 2 π / N )に Euler–Maclaurin の公式(定理 7.2[漸近解析] 。項の数 p p p )を使います。周期性から g ( m ) ( N ) = h m f ( m ) ( 2 π ) = h m f ( m ) ( 0 ) = g ( m ) ( 0 ) g^{(m)}(N) = h^mf^{(m)}(2\pi) = h^mf^{(m)}(0) = g^{(m)}(0) g ( m ) ( N ) = h m f ( m ) ( 2 π ) = h m f ( m ) ( 0 ) = g ( m ) ( 0 ) なので、Bernoulli 数の項はすべて消え、g ( N ) = g ( 0 ) g(N) = g(0) g ( N ) = g ( 0 ) から T N ( f ) = h ( ∑ k = 0 N g ( k ) − g ( 0 ) + g ( N ) 2 ) T_N(f) = h\bigl(\sum_{k=0}^N g(k) - \frac{g(0)+g(N)}{2}\bigr) T N ( f ) = h ( ∑ k = 0 N g ( k ) − 2 g ( 0 ) + g ( N ) ) です。よって
T N ( f ) − I ( f ) = − h 2 p + 1 ∫ 0 N B ~ 2 p ( s ) ( 2 p ) ! f ( 2 p ) ( s h ) d s T_N(f) - I(f) = -h^{2p+1}\int_0^N\frac{\tilde B_{2p}(s)}{(2p)!}f^{(2p)}(sh)\,ds T N ( f ) − I ( f ) = − h 2 p + 1 ∫ 0 N ( 2 p )! B ~ 2 p ( s ) f ( 2 p ) ( s h ) d s で、絶対値は h 2 p + 1 N β 2 p max ∣ f ( 2 p ) ∣ / ( 2 p ) ! = 2 π h 2 p β 2 p max ∣ f ( 2 p ) ∣ / ( 2 p ) ! h^{2p+1}N\beta_{2p}\max|f^{(2p)}|/(2p)! = 2\pi h^{2p}\beta_{2p}\max|f^{(2p)}|/(2p)! h 2 p + 1 N β 2 p max ∣ f ( 2 p ) ∣/ ( 2 p )! = 2 π h 2 p β 2 p max ∣ f ( 2 p ) ∣/ ( 2 p )! 以下です(積分の単調性、命題 4.1[積分の基本定理と定積分] の 2。f f f が複素数値のときは、∣ α ∣ = 1 |\alpha| = 1 ∣ α ∣ = 1 を α ∫ φ = ∣ ∫ φ ∣ \alpha\int\varphi = |\int\varphi| α ∫ φ = ∣ ∫ φ ∣ となるように選べば ∣ ∫ φ ∣ = ∫ R e ( α φ ) ≤ ∫ ∣ φ ∣ |\int\varphi| = \int\mathrm{Re}(\alpha\varphi) \le \int|\varphi| ∣ ∫ φ ∣ = ∫ Re ( α φ ) ≤ ∫ ∣ φ ∣ となり、同じ評価が成り立ちます)。
2. 正則関数は無限回微分可能なので(系 3.3[正則関数の強力な性質] )、実軸に制限した f f f は C 1 C^1 C 1 級の周期関数です。命題 5.4[フーリエ級数] から ∑ n ∣ f ^ ( n ) ∣ < ∞ \sum_n|\hat f(n)| \lt \infty ∑ n ∣ f ^ ( n ) ∣ < ∞ で、Fourier 級数は f f f に一様に(とくに各点で)収束します。有限和と収束級数の和は交換できるので
T N ( f ) = 2 π N ∑ k = 0 N − 1 ∑ n ∈ Z f ^ ( n ) e 2 π i n k / N = 2 π ∑ n ∈ Z f ^ ( n ) ⋅ 1 N ∑ k = 0 N − 1 e 2 π i n k / N T_N(f) = \frac{2\pi}{N}\sum_{k=0}^{N-1}\sum_{n\in\mathbb{Z}}\hat f(n)e^{2\pi ink/N} = 2\pi\sum_{n\in\mathbb{Z}}\hat f(n)\cdot\frac1N\sum_{k=0}^{N-1}e^{2\pi ink/N} T N ( f ) = N 2 π k = 0 ∑ N − 1 n ∈ Z ∑ f ^ ( n ) e 2 π ink / N = 2 π n ∈ Z ∑ f ^ ( n ) ⋅ N 1 k = 0 ∑ N − 1 e 2 π ink / N です。内側の和は n n n が N N N の倍数なら N N N 、そうでなければ公比 e 2 π i n / N ≠ 1 e^{2\pi in/N} \ne 1 e 2 π in / N = 1 の等比級数の和 1 − e 2 π i n 1 − e 2 π i n / N = 0 \frac{1 - e^{2\pi in}}{1 - e^{2\pi in/N}} = 0 1 − e 2 π in / N 1 − e 2 π in = 0 です。よって T N ( f ) = 2 π ∑ m f ^ ( m N ) T_N(f) = 2\pi\sum_m\hat f(mN) T N ( f ) = 2 π ∑ m f ^ ( m N ) です。一方、周期性から I ( f ) = ∫ − π π f ( θ ) d θ = 2 π f ^ ( 0 ) I(f) = \int_{-\pi}^{\pi}f(\theta)\,d\theta = 2\pi\hat f(0) I ( f ) = ∫ − π π f ( θ ) d θ = 2 π f ^ ( 0 ) なので、等式を得ます。
0 < b < a 0 \lt b \lt a 0 < b < a について 補題 3.1 を使うと
∣ T N ( f ) − I ( f ) ∣ ≤ 2 π ⋅ 2 ∑ m = 1 ∞ M e − m N b = 4 π M e N b − 1 |T_N(f) - I(f)| \le 2\pi\cdot 2\sum_{m=1}^{\infty}Me^{-mNb} = \frac{4\pi M}{e^{Nb} - 1} ∣ T N ( f ) − I ( f ) ∣ ≤ 2 π ⋅ 2 m = 1 ∑ ∞ M e − m N b = e N b − 1 4 π M です。右辺は b b b について連続なので、b → a b \to a b → a とすれば主張を得ます。
∎
1 は「滑らかさの次数だけ速く収束する」こと、2 は「解析的なら指数的に速く収束する」ことを述べています。1 では p p p はいくらでも大きく取れるので、C ∞ C^\infty C ∞ 級の周期関数ではどんな多項式の速さよりも速く誤差が減ります。等式 T N − I = 2 π ∑ m ≠ 0 f ^ ( m N ) T_N - I = 2\pi\sum_{m\ne0}\hat f(mN) T N − I = 2 π ∑ m = 0 f ^ ( m N ) は、N N N 点の等間隔標本では周波数 m N mN m N の成分が周波数 0 0 0 (定数)と区別できない、という**折り返し(エイリアシング)**の表現です。積分の誤差は、折り返されて定数成分に混ざった高周波成分の大きさにほかなりません。
例 3.3 (e^{cos θ} の台形則の指数収束 )
∫ 0 2 π e cos θ d θ = 2 π I 0 ( 1 ) \int_0^{2\pi}e^{\cos\theta}d\theta = 2\pi I_0(1) ∫ 0 2 π e c o s θ d θ = 2 π I 0 ( 1 ) (I 0 I_0 I 0 は第 1 種変形 Bessel 関数)です。f ( z ) = e cos z f(z) = e^{\cos z} f ( z ) = e c o s z は整関数 で、z = x + i y z = x + iy z = x + i y について ∣ e cos z ∣ = e cos x cosh y ≤ e cosh a |e^{\cos z}| = e^{\cos x\cosh y} \le e^{\cosh a} ∣ e c o s z ∣ = e c o s x c o s h y ≤ e c o s h a なので、任意の a > 0 a \gt 0 a > 0 で 定理 3.2 の 2 が M = e cosh a M = e^{\cosh a} M = e c o s h a として使えます。f f f の Fourier 係数は f ^ ( n ) = I n ( 1 ) \hat f(n) = I_n(1) f ^ ( n ) = I n ( 1 ) なので、誤差の主要項は m = ± 1 m = \pm1 m = ± 1 の折り返し 4 π I N ( 1 ) 4\pi I_N(1) 4 π I N ( 1 ) です。
# Python 3.12.10 / NumPy 2.5.2 / SciPy 1.18.1 / mpmath 1.3.0
from scipy.special import iv
from mpmath import mp, besseli
I_sp = 2 * math.pi * iv ( 0 , 1.0 ) # 2π I_0(1)(SciPy)
I_mp = 2 * mp.pi * besseli ( 0 , 1 ) # 同じ値を mpmath で
f = lambda t : np. exp ( np. cos ( t ))
def bound ( N , a ) : # 4πM/(e^{aN}-1)
M = math. exp ( math. cosh ( a )) # |e^{cos z}| ≤ e^{cosh a}
return 4 * math.pi * M / math. expm1 ( a * N )
print ( " N 誤差 4πI_N(1) 評価(a=1) 評価(a 最適) " )
for N in [ 2 , 4 , 6 , 8 , 10 , 12 ] :
th = 2 * math.pi * np. arange ( N ) / N
err = abs ( 2 * math.pi / N * f ( th ) . sum () - I_sp )
alias = float ( 4 * mp.pi * besseli ( N , 1 )) # 折り返しの主要項
best = min ( bound ( N , a ) for a in np. linspace ( 0.1 , 6 , 600 ))
print ( f " {N :3d } {err :.2e } {alias :.2e } { bound ( N , 1 ) :.2e } "
print ( f "SciPy と mpmath の参照値の差: { abs ( I_sp - float ( I_mp )) :.1e } " )
N 誤差 4πI_N(1) 評価(a=1) 評価(a 最適)
2 1.74e+00 1.71e+00 9.20e+00 6.92e+00
4 3.44e-02 3.44e-02 1.10e+00 1.78e-01
6 2.83e-04 2.83e-04 1.46e-01 1.77e-03
8 1.25e-06 1.25e-06 1.97e-02 9.00e-06
10 3.46e-09 3.46e-09 2.67e-03 2.77e-08
12 6.53e-12 6.53e-12 3.61e-04 5.72e-11
SciPy と mpmath の参照値の差: 0.0e+00
検算. (a) 参照値 2 π I 0 ( 1 ) 2\pi I_0(1) 2 π I 0 ( 1 ) を SciPy の iv と mpmath の besseli(30 桁)の 2 通りで計算し、倍精度で一致しています。(b) 誤差は、証明の等式の主要項 4 π I N ( 1 ) 4\pi I_N(1) 4 π I N ( 1 ) (mpmath で計算)と N ≥ 4 N \ge 4 N ≥ 4 で表示の桁まで一致します。N = 2 N = 2 N = 2 でずれるのは、m = ± 2 m = \pm2 m = ± 2 の項 4 π I 4 ( 1 ) ≈ 0.03 4\pi I_4(1) \approx 0.03 4 π I 4 ( 1 ) ≈ 0.03 が無視できないためです。(c) 誤差はすべて評価 4 π M / ( e a N − 1 ) 4\pi M/(e^{aN}-1) 4 π M / ( e a N − 1 ) の内側にあり、a a a を N N N ごとに選び直すと評価は真の誤差の 10 倍程度まで近づきます。誤差は N N N を 2 増やすごとに 2〜3 桁減り、12 点で 10 − 11 10^{-11} 1 0 − 11 に達します。整関数なので a a a をいくらでも大きく取れ、収束は指数関数よりもさらに速くなっています(I N ( 1 ) ≈ ( 1 / 2 ) N / N ! I_N(1) \approx (1/2)^N/N! I N ( 1 ) ≈ ( 1/2 ) N / N ! )。
h h h を 0 0 0 に近づけたときの極限 A A A を求めたいが、計算できるのは有限の h h h での近似値 A ( h ) A(h) A ( h ) だけ、という状況を考えます。以下、A ( h ) A(h) A ( h ) は h ∈ { h 0 , h 0 / 2 , h 0 / 4 , … } h \in \{h_0, h_0/2, h_0/4, \ldots\} h ∈ { h 0 , h 0 /2 , h 0 /4 , … } で定義されているとします。
定義 4.1 (誤差の漸近展開 ) ↗
0 < p 1 < p 2 < ⋯ < p m < q 0 \lt p_1 \lt p_2 \lt \cdots \lt p_m \lt q 0 < p 1 < p 2 < ⋯ < p m < q とし、h k = h 0 / 2 k h_k = h_0/2^k h k = h 0 / 2 k とする。定数 c 1 , … , c m c_1, \ldots, c_m c 1 , … , c m と C ≥ 0 C \ge 0 C ≥ 0 があって、すべての k ≥ 0 k \ge 0 k ≥ 0 で
A ( h k ) = A + ∑ i = 1 m c i h k p i + r k , ∣ r k ∣ ≤ C h k q A(h_k) = A + \sum_{i=1}^{m}c_ih_k^{p_i} + r_k, \qquad |r_k| \le Ch_k^q A ( h k ) = A + i = 1 ∑ m c i h k p i + r k , ∣ r k ∣ ≤ C h k q が成り立つとき、A ( h ) A(h) A ( h ) は指数 p 1 , … , p m p_1, \ldots, p_m p 1 , … , p m 、剰余の次数 q q q の誤差の漸近展開 をもつという。係数 c i c_i c i は k k k (すなわち h h h )によらない。
定理 2.1 は、f ∈ C 2 p + 2 [ a , b ] f \in C^{2p+2}[a,b] f ∈ C 2 p + 2 [ a , b ] なら複合台形則が指数 2 , 4 , … , 2 p 2, 4, \ldots, 2p 2 , 4 , … , 2 p 、剰余の次数 2 p + 2 2p+2 2 p + 2 の誤差の漸近展開をもつ、と言い換えられます。大切なのは指数が既知で、係数が未知でもよいことです。
定理 4.2 (Richardson 外挿 ) ✓
0 < p < q 0 \lt p \lt q 0 < p < q とし、定数 c c c 、C ≥ 0 C \ge 0 C ≥ 0 があって、ある h h h と h / 2 h/2 h /2 について
A ( h ) = A + c h p + r ( h ) , A ( h / 2 ) = A + c ( h / 2 ) p + r ( h / 2 ) , ∣ r ( h ) ∣ ≤ C h q , ∣ r ( h / 2 ) ∣ ≤ C ( h / 2 ) q A(h) = A + ch^p + r(h), \qquad A(h/2) = A + c(h/2)^p + r(h/2), \qquad |r(h)| \le Ch^q,\ |r(h/2)| \le C(h/2)^q A ( h ) = A + c h p + r ( h ) , A ( h /2 ) = A + c ( h /2 ) p + r ( h /2 ) , ∣ r ( h ) ∣ ≤ C h q , ∣ r ( h /2 ) ∣ ≤ C ( h /2 ) q が成り立つとする。このとき
A 1 ( h ) = 2 p A ( h / 2 ) − A ( h ) 2 p − 1 A_1(h) = \frac{2^pA(h/2) - A(h)}{2^p - 1} A 1 ( h ) = 2 p − 1 2 p A ( h /2 ) − A ( h ) は ∣ A 1 ( h ) − A ∣ ≤ 1 + 2 p − q 2 p − 1 C h q |A_1(h) - A| \le \dfrac{1 + 2^{p-q}}{2^p - 1}\,Ch^q ∣ A 1 ( h ) − A ∣ ≤ 2 p − 1 1 + 2 p − q C h q を満たす。
証明(定理 4.2) 定義に代入すると、c c c の項は 2 p c ( h / 2 ) p − c h p = 0 2^pc(h/2)^p - ch^p = 0 2 p c ( h /2 ) p − c h p = 0 で消え、
A 1 ( h ) − A = 2 p r ( h / 2 ) − r ( h ) 2 p − 1 A_1(h) - A = \frac{2^pr(h/2) - r(h)}{2^p - 1} A 1 ( h ) − A = 2 p − 1 2 p r ( h /2 ) − r ( h ) です。∣ 2 p r ( h / 2 ) ∣ ≤ 2 p C 2 − q h q |2^pr(h/2)| \le 2^pC2^{-q}h^q ∣ 2 p r ( h /2 ) ∣ ≤ 2 p C 2 − q h q 、∣ r ( h ) ∣ ≤ C h q |r(h)| \le Ch^q ∣ r ( h ) ∣ ≤ C h q から主張を得ます。
∎
外挿の要点は、c c c を知らなくてよいことです。必要なのは誤差の次数 p p p だけです。次数を誤って仮定すると、主要項は消えずに残ります。外挿を繰り返すと、展開の項を順に消していけます。
次の系は、これを繰り返したときに何が消え、何が残るかを記録するものです。j j j 回外挿した値 T k , j T_{k,j} T k , j では、h k p 1 , … , h k p j h_k^{p_1}, \ldots, h_k^{p_j} h k p 1 , … , h k p j の項が消えて h k p j + 1 h_k^{p_{j+1}} h k p j + 1 以降が残ります。式の中の γ i , j \gamma_{i,j} γ i , j と積は、残った項の係数と剰余の大きさが、外挿のたびにどう変わるかを書いただけの記号です。
系 4.3 (外挿表の誤差 ) ✓
A ( h ) A(h) A ( h ) が指数 p 1 < ⋯ < p m p_1 \lt \cdots \lt p_m p 1 < ⋯ < p m 、剰余の次数 q q q の誤差の漸近展開(定義 4.1 。記号もそこでのもの)をもつとする。外挿表を T k , 0 = A ( h k ) T_{k,0} = A(h_k) T k , 0 = A ( h k ) 、1 ≤ j ≤ min ( k , m ) 1 \le j \le \min(k, m) 1 ≤ j ≤ min ( k , m ) について
T k , j = 2 p j T k , j − 1 − T k − 1 , j − 1 2 p j − 1 T_{k,j} = \frac{2^{p_j}T_{k,j-1} - T_{k-1,j-1}}{2^{p_j} - 1} T k , j = 2 p j − 1 2 p j T k , j − 1 − T k − 1 , j − 1 で定めると、
T k , j = A + ∑ i = j + 1 m c i γ i , j h k p i + r k , j , γ i , j = ∏ l = 1 j 2 p l − 2 p i 2 p l − 1 , ∣ r k , j ∣ ≤ C ∏ l = 1 j 2 p l + 2 q 2 p l − 1 h k q T_{k,j} = A + \sum_{i=j+1}^{m}c_i\gamma_{i,j}\,h_k^{p_i} + r_{k,j}, \qquad \gamma_{i,j} = \prod_{l=1}^{j}\frac{2^{p_l} - 2^{p_i}}{2^{p_l} - 1}, \qquad |r_{k,j}| \le C\prod_{l=1}^{j}\frac{2^{p_l} + 2^q}{2^{p_l} - 1}\,h_k^q T k , j = A + i = j + 1 ∑ m c i γ i , j h k p i + r k , j , γ i , j = l = 1 ∏ j 2 p l − 1 2 p l − 2 p i , ∣ r k , j ∣ ≤ C l = 1 ∏ j 2 p l − 1 2 p l + 2 q h k q が成り立つ。とくに T k , j − A = O ( h k p j + 1 ) T_{k,j} - A = O(h_k^{p_{j+1}}) T k , j − A = O ( h k p j + 1 ) (j < m j \lt m j < m )、T k , m − A = O ( h k q ) T_{k,m} - A = O(h_k^q) T k , m − A = O ( h k q ) である(k → ∞ k \to \infty k → ∞ 。定数は k k k によらない)。
証明(系 4.3) j j j についての帰納法です。j = 0 j = 0 j = 0 は仮定です(空の積は 1 1 1 )。j − 1 j - 1 j − 1 で成り立つとし、k ≥ j k \ge j k ≥ j とします。h k − 1 = 2 h k h_{k-1} = 2h_k h k − 1 = 2 h k なので、T k − 1 , j − 1 T_{k-1,j-1} T k − 1 , j − 1 の展開の h k − 1 p i h_{k-1}^{p_i} h k − 1 p i は 2 p i h k p i 2^{p_i}h_k^{p_i} 2 p i h k p i です。漸化式に代入すると、h k p i h_k^{p_i} h k p i の係数は
c i γ i , j − 1 ⋅ 2 p j − 2 p i 2 p j − 1 = c i γ i , j c_i\gamma_{i,j-1}\cdot\frac{2^{p_j} - 2^{p_i}}{2^{p_j} - 1} = c_i\gamma_{i,j} c i γ i , j − 1 ⋅ 2 p j − 1 2 p j − 2 p i = c i γ i , j で、i = j i = j i = j では 0 0 0 になります。剰余は r k , j = ( 2 p j r k , j − 1 − r k − 1 , j − 1 ) / ( 2 p j − 1 ) r_{k,j} = (2^{p_j}r_{k,j-1} - r_{k-1,j-1})/(2^{p_j} - 1) r k , j = ( 2 p j r k , j − 1 − r k − 1 , j − 1 ) / ( 2 p j − 1 ) で、帰納法の仮定の定数を C j − 1 C_{j-1} C j − 1 とすると ∣ r k − 1 , j − 1 ∣ ≤ C j − 1 h k − 1 q = C j − 1 2 q h k q |r_{k-1,j-1}| \le C_{j-1}h_{k-1}^q = C_{j-1}2^qh_k^q ∣ r k − 1 , j − 1 ∣ ≤ C j − 1 h k − 1 q = C j − 1 2 q h k q なので、∣ r k , j ∣ ≤ C j − 1 2 p j + 2 q 2 p j − 1 h k q |r_{k,j}| \le C_{j-1}\frac{2^{p_j} + 2^q}{2^{p_j} - 1}h_k^q ∣ r k , j ∣ ≤ C j − 1 2 p j − 1 2 p j + 2 q h k q です。最後の主張は、h k ≤ h 0 h_k \le h_0 h k ≤ h 0 から h k p i ≤ h 0 p i − p j + 1 h k p j + 1 h_k^{p_i} \le h_0^{p_i - p_{j+1}}h_k^{p_{j+1}} h k p i ≤ h 0 p i − p j + 1 h k p j + 1 (i ≥ j + 1 i \ge j+1 i ≥ j + 1 )、h k q ≤ h 0 q − p j + 1 h k p j + 1 h_k^q \le h_0^{q - p_{j+1}}h_k^{p_{j+1}} h k q ≤ h 0 q − p j + 1 h k p j + 1 であることによります。
∎
複合台形則に 系 4.3 を p j = 2 j p_j = 2j p j = 2 j で使うのが Romberg 法です。
定義 5.1 (Romberg 表 ) ↗
N 0 ≥ 1 N_0 \ge 1 N 0 ≥ 1 、H = ( b − a ) / N 0 H = (b-a)/N_0 H = ( b − a ) / N 0 、h k = H / 2 k h_k = H/2^k h k = H / 2 k とし、T k , 0 = T ( h k ) T_{k,0} = T(h_k) T k , 0 = T ( h k ) (複合台形則)、1 ≤ j ≤ k 1 \le j \le k 1 ≤ j ≤ k について
T k , j = 4 j T k , j − 1 − T k − 1 , j − 1 4 j − 1 T_{k,j} = \frac{4^jT_{k,j-1} - T_{k-1,j-1}}{4^j - 1} T k , j = 4 j − 1 4 j T k , j − 1 − T k − 1 , j − 1 と定める。三角形に並んだ T k , j T_{k,j} T k , j を Romberg 表 、j j j を固定した並びを第 j j j 列、T k , k T_{k,k} T k , k の並びを対角線という。
T ( h k ) T(h_k) T ( h k ) は、T ( h k − 1 ) / 2 T(h_{k-1})/2 T ( h k − 1 ) /2 に新しい中点での値の和 h k ∑ f h_k\sum f h k ∑ f を足せば計算でき、それまでの関数値を再利用できます。したがって T K , K T_{K,K} T K , K までの表全体の計算に要る関数値は N 0 2 K + 1 N_02^K + 1 N 0 2 K + 1 個で、最も細かい台形則と同じです。外挿の手間は表の大きさ K 2 / 2 K^2/2 K 2 /2 回の四則だけです。
定理 5.2 (Romberg 表の誤差 ) ✓
m ≥ 0 m \ge 0 m ≥ 0 、f ∈ C 2 m + 2 [ a , b ] f \in C^{2m+2}[a,b] f ∈ C 2 m + 2 [ a , b ] とする。0 ≤ j ≤ m 0 \le j \le m 0 ≤ j ≤ m について、k k k によらない定数 D j D_j D j があって、k ≥ j k \ge j k ≥ j で
∣ T k , j − I ∣ ≤ D j h k 2 j + 2 |T_{k,j} - I| \le D_j\,h_k^{2j+2} ∣ T k , j − I ∣ ≤ D j h k 2 j + 2 が成り立つ。すなわち Romberg 表の第 j j j 列(j ≤ m j \le m j ≤ m )の誤差は O ( h 2 j + 2 ) O(h^{2j+2}) O ( h 2 j + 2 ) である。
証明(定理 5.2) 定理 2.1 (p = m p = m p = m )から、すべての k k k で T ( h k ) = I + ∑ i = 1 m c i h k 2 i + R m ( h k ) T(h_k) = I + \sum_{i=1}^{m}c_ih_k^{2i} + R_m(h_k) T ( h k ) = I + ∑ i = 1 m c i h k 2 i + R m ( h k ) 、∣ R m ( h k ) ∣ ≤ K m h k 2 m + 2 |R_m(h_k)| \le K_mh_k^{2m+2} ∣ R m ( h k ) ∣ ≤ K m h k 2 m + 2 です。これは 系 4.3 の仮定(p i = 2 i p_i = 2i p i = 2 i 、q = 2 m + 2 q = 2m+2 q = 2 m + 2 、A = I A = I A = I )そのものなので、T k , j − I = O ( h k 2 j + 2 ) T_{k,j} - I = O(h_k^{2j+2}) T k , j − I = O ( h k 2 j + 2 ) (j < m j \lt m j < m )、T k , m − I = O ( h k 2 m + 2 ) T_{k,m} - I = O(h_k^{2m+2}) T k , m − I = O ( h k 2 m + 2 ) が、k k k によらない定数で成り立ちます。
∎
命題 5.3 (Romberg 表の第 1 列は複合 Simpson 則 ) ✓
k ≥ 1 k \ge 1 k ≥ 1 について、T k , 1 = 4 T ( h k ) − T ( h k − 1 ) 3 T_{k,1} = \frac{4T(h_k) - T(h_{k-1})}{3} T k , 1 = 3 4 T ( h k ) − T ( h k − 1 ) は刻み h k h_k h k の複合 Simpson 則 S h k S_{h_k} S h k に等しい。
証明(命題 5.3) h = h k h = h_k h = h k 、2 M = ( b − a ) / h 2M = (b-a)/h 2 M = ( b − a ) / h 、f i = f ( a + i h ) f_i = f(a + ih) f i = f ( a + ih ) とします。T ( h ) = h ( f 0 2 + f 1 + ⋯ + f 2 M − 1 + f 2 M 2 ) T(h) = h\bigl(\frac{f_0}{2} + f_1 + \cdots + f_{2M-1} + \frac{f_{2M}}{2}\bigr) T ( h ) = h ( 2 f 0 + f 1 + ⋯ + f 2 M − 1 + 2 f 2 M ) 、T ( 2 h ) = 2 h ( f 0 2 + f 2 + f 4 + ⋯ + f 2 M − 2 + f 2 M 2 ) T(2h) = 2h\bigl(\frac{f_0}{2} + f_2 + f_4 + \cdots + f_{2M-2} + \frac{f_{2M}}{2}\bigr) T ( 2 h ) = 2 h ( 2 f 0 + f 2 + f 4 + ⋯ + f 2 M − 2 + 2 f 2 M ) なので
4 T ( h ) − T ( 2 h ) = h ( f 0 + 4 ∑ i 奇数 f i + 2 ∑ 0 < i < 2 M , i 偶数 f i + f 2 M ) 4T(h) - T(2h) = h\Bigl(f_0 + 4\sum_{i\ \text{奇数}}f_i + 2\sum_{0 \lt i \lt 2M,\ i\ \text{偶数}}f_i + f_{2M}\Bigr) 4 T ( h ) − T ( 2 h ) = h ( f 0 + 4 i 奇数 ∑ f i + 2 0 < i < 2 M , i 偶数 ∑ f i + f 2 M ) で、3 3 3 で割ると複合 Simpson 則です。
∎
この命題と 定理 2.1 から、複合 Simpson 則の誤差の主要項は − 4 c 2 h 4 = h 4 180 ( f ′ ′ ′ ( b ) − f ′ ′ ′ ( a ) ) -4c_2h^4 = \frac{h^4}{180}\bigl(f'''(b) - f'''(a)\bigr) − 4 c 2 h 4 = 180 h 4 ( f ′′′ ( b ) − f ′′′ ( a ) ) (S h − I S_h - I S h − I )です。これは 前の章 の評価 S h − I = ( b − a ) h 4 180 f ( 4 ) ( ξ ) S_h - I = \frac{(b-a)h^4}{180}f^{(4)}(\xi) S h − I = 180 ( b − a ) h 4 f ( 4 ) ( ξ ) (系 4.3[数値積分 I] )と、f ′ ′ ′ ( b ) − f ′ ′ ′ ( a ) = ∫ a b f ( 4 ) f'''(b) - f'''(a) = \int_a^b f^{(4)} f ′′′ ( b ) − f ′′′ ( a ) = ∫ a b f ( 4 ) を通じて整合しています。第 2 列は Boole 則(5 点の Newton–Cotes 則)の複合則になります。
例 5.4 (∫₀¹ eˣ dx の Romberg 表 )
10 行余りの関数で Romberg 表を作り、各列の誤差の減り方を見ます。N 0 = 1 N_0 = 1 N 0 = 1 から 6 回刻みを半分にします。
# Python 3.12.10 / NumPy 2.5.2 / mpmath 1.3.0
from mpmath import mp, quad, exp as mexp
""" T[k][j]: 刻み (b-a)/2^k の台形則から j 回外挿した値 """
T = [[ (b - a) / 2 * ( f ( a ) + f ( b )) ]]
for k in range ( 1 , K + 1 ):
mid = f ( a + h * np. arange ( 1 , 2 ** k , 2 )). sum () # 新しい点だけ
row = [ T[ - 1 ] [ 0 ] / 2 + h * mid ]
for j in range ( 1 , k + 1 ):
row. append ( ( 4 ** j * row [ j - 1 ] - T [ - 1 ] [ j - 1 ] ) / ( 4 ** j - 1 ) )
fmt = lambda x : f " { x :.2e } " if x > 1e-13 else " <1e-13 "
T = romberg ( np.exp , 0.0 , 1.0 , 6 )
print ( " k 第0列 第1列 第2列 対角 " )
e = [ abs ( T [ k ] [ j ] - I ) for j in range ( min ( k , 2 ) + 1 ) ]
s = " " . join ( fmt ( x ) for x in e ). ljust ( 30 )
print ( f " {k :2d } {s} { fmt ( abs ( T [ k ] [ k ] - I )) } " )
d = float ( abs ( I - quad ( mexp , [ 0 , 1 ] )))
print ( f "e-1 と mpmath.quad の差: {d :.1e } " )
1 3.56e-02 5.79e-04 5.79e-04
2 8.94e-03 3.70e-05 8.59e-07 8.59e-07
3 2.24e-03 2.33e-06 1.38e-08 3.35e-10
4 5.59e-04 1.46e-07 2.16e-10 <1e-13
5 1.40e-04 9.10e-09 3.39e-12 <1e-13
6 3.50e-05 5.69e-10 <1e-13 <1e-13
e-1 と mpmath.quad の差: 1.4e-16
検算. (a) 真の値は e − 1 e - 1 e − 1 で、倍精度の e − 1 e - 1 e − 1 と mpmath の quad(30 桁)の差は 1.4 × 10 − 16 1.4 \times 10^{-16} 1.4 × 1 0 − 16 (倍精度の丸めの水準)です。(b) 第 1 列は 命題 5.3 のとおり複合 Simpson 則で、前の章 の例の Simpson 則の誤差(N = 4 , 8 , … , 64 N = 4, 8, \ldots, 64 N = 4 , 8 , … , 64 で 3.70 × 10 − 5 , … , 5.69 × 10 − 10 3.70 \times 10^{-5}, \ldots, 5.69 \times 10^{-10} 3.70 × 1 0 − 5 , … , 5.69 × 1 0 − 10 )と表示の桁まで一致します。(c) 第 0 列・第 1 列・第 2 列の誤差は k k k が 1 増えるごとにほぼ 4 4 4 、16 16 16 、64 64 64 分の 1(たとえば第 2 列で 1.38 × 10 − 8 / 2.16 × 10 − 10 ≈ 64 1.38 \times 10^{-8}/2.16 \times 10^{-10} \approx 64 1.38 × 1 0 − 8 /2.16 × 1 0 − 10 ≈ 64 )になり、定理 5.2 の次数 h 2 h^2 h 2 、h 4 h^4 h 4 、h 6 h^6 h 6 と合います。対角線は 17 点(k = 4 k = 4 k = 4 )で丸めの水準に達します。
例 5.5 (端点で滑らかでない関数では加速しない )
∫ 0 1 x d x = 2 / 3 \int_0^1\sqrt x\,dx = 2/3 ∫ 0 1 x d x = 2/3 では、f ′ ( x ) = 1 / ( 2 x ) f'(x) = 1/(2\sqrt x) f ′ ( x ) = 1/ ( 2 x ) が x = 0 x = 0 x = 0 で発散し、定理 2.1 の仮定 f ∈ C 2 [ 0 , 1 ] f \in C^2[0,1] f ∈ C 2 [ 0 , 1 ] すら満たされません。Romberg 表の対角線と、二重指数型(tanh–sinh)求積(注意 6.3 )を使う mpmath の quad を比べます。
# Python 3.12.10 / NumPy 2.5.2 / mpmath 1.3.0
from mpmath import mp, mpf, quad, sqrt as msqrt
def romberg ( f , a , b , K ) : # 前の例と同じ Romberg 表
T = [[ (b - a) / 2 * ( f ( a ) + f ( b )) ]]
for k in range ( 1 , K + 1 ):
mid = f ( a + h * np. arange ( 1 , 2 ** k , 2 )). sum ()
row = [ T[ - 1 ] [ 0 ] / 2 + h * mid ]
for j in range ( 1 , k + 1 ):
row. append ( ( 4 ** j * row [ j - 1 ] - T [ - 1 ] [ j - 1 ] ) / ( 4 ** j - 1 ) )
T = romberg ( np.sqrt , 0.0 , 1.0 , 10 )
print ( " k 点の数 台形の誤差 対角の誤差 比(台形) " )
for k in range ( 0 , 11 , 2 ):
et, ed = abs ( T [ k ] [ 0 ] - 2 / 3 ), abs ( T [ k ] [ k ] - 2 / 3 )
r = f " { prev / et :.2f } " if prev else " - "
print ( f " {k :3d } { 2 ** k + 1 :5d } {et :.2e } {ed :.2e } {r} " )
v = quad ( msqrt , [ 0 , 1 ] ) # tanh-sinh(二重指数型)
print ( f "mpmath.quad(30 桁)の誤差: { float ( abs ( v - mpf ( 2 ) / 3 )) :.1e } " )
print ( f "理論の比 4^1.5 = { 4 ** 1.5 :.2f } " )
2 5 2.34e-02 8.91e-03 7.13
4 17 3.09e-03 1.07e-03 7.58
6 65 3.96e-04 1.34e-04 7.79
8 257 5.01e-05 1.67e-05 7.90
10 1025 6.30e-06 2.09e-06 7.95
mpmath.quad(30 桁)の誤差: 0.0e+00
検算. (a) 真の値は 2 / 3 2/3 2/3 です。(b) mpmath の quad は端点の特異性を変数変換で吸収し、30 桁の計算で 2 / 3 2/3 2/3 に一致します(差は 30 桁の作業精度で 0 0 0 )。(c) 台形則の誤差は刻みを 1 / 4 1/4 1/4 にするごとに約 8 = 4 1.5 8 = 4^{1.5} 8 = 4 1.5 分の 1 で、O ( h 3 / 2 ) O(h^{3/2}) O ( h 3/2 ) の速さです。Euler–Maclaurin 展開が h 2 , h 4 , … h^2, h^4, \ldots h 2 , h 4 , … を仮定して消そうとしても、実際の主要項は h 3 / 2 h^{3/2} h 3/2 なので消えず、対角線も同じ O ( h 3 / 2 ) O(h^{3/2}) O ( h 3/2 ) の速さでしか減りません(定数が 3 分の 1 程度に縮むだけです)。端点に x α x^{\alpha} x α 型の特異性がある関数では、誤差の展開に h 1 + α , h 2 + α , … h^{1+\alpha}, h^{2+\alpha}, \ldots h 1 + α , h 2 + α , … の項が加わることが知られており(I. Navot, J. Math. and Phys. 40 (1961) の Euler–Maclaurin 公式の拡張)、その指数を使って外挿すれば加速を取り戻せます。
外挿の式は、誤差を消すだけでなく、誤差の大きさを推定するのにも使えます。研究で数値を報告するとき「何桁正しいか」を示す根拠として最もよく使われる方法です。
命題 6.1 (2 つの刻みによる誤差の推定 ) ✓
定理 4.2 の仮定のもとで、
∣ ( A − A ( h / 2 ) ) − A ( h / 2 ) − A ( h ) 2 p − 1 ∣ ≤ ( 2 − q + 1 + 2 − q 2 p − 1 ) C h q \Bigl|\bigl(A - A(h/2)\bigr) - \frac{A(h/2) - A(h)}{2^p - 1}\Bigr| \le \Bigl(2^{-q} + \frac{1 + 2^{-q}}{2^p - 1}\Bigr)Ch^q ( A − A ( h /2 ) ) − 2 p − 1 A ( h /2 ) − A ( h ) ≤ ( 2 − q + 2 p − 1 1 + 2 − q ) C h q が成り立つ。とくに c ≠ 0 c \ne 0 c = 0 で、仮定がすべての十分小さい h = h 0 / 2 k h = h_0/2^k h = h 0 / 2 k について同じ c c c 、C C C で成り立つならば、k → ∞ k \to \infty k → ∞ で
( A ( h / 2 ) − A ( h ) ) / ( 2 p − 1 ) A − A ( h / 2 ) → 1 \frac{\bigl(A(h/2) - A(h)\bigr)/(2^p - 1)}{A - A(h/2)} \to 1 A − A ( h /2 ) ( A ( h /2 ) − A ( h ) ) / ( 2 p − 1 ) → 1 である。
証明(命題 6.1) 仮定から A − A ( h / 2 ) = − c ( h / 2 ) p − r ( h / 2 ) A - A(h/2) = -c(h/2)^p - r(h/2) A − A ( h /2 ) = − c ( h /2 ) p − r ( h /2 ) 、A ( h / 2 ) − A ( h ) = c h p ( 2 − p − 1 ) + r ( h / 2 ) − r ( h ) A(h/2) - A(h) = c h^p(2^{-p} - 1) + r(h/2) - r(h) A ( h /2 ) − A ( h ) = c h p ( 2 − p − 1 ) + r ( h /2 ) − r ( h ) なので
A ( h / 2 ) − A ( h ) 2 p − 1 = − c ( h 2 ) p + r ( h / 2 ) − r ( h ) 2 p − 1 \frac{A(h/2) - A(h)}{2^p - 1} = -c\Bigl(\frac h2\Bigr)^p + \frac{r(h/2) - r(h)}{2^p - 1} 2 p − 1 A ( h /2 ) − A ( h ) = − c ( 2 h ) p + 2 p − 1 r ( h /2 ) − r ( h ) です。差は − r ( h / 2 ) − r ( h / 2 ) − r ( h ) 2 p − 1 -r(h/2) - \frac{r(h/2) - r(h)}{2^p - 1} − r ( h /2 ) − 2 p − 1 r ( h /2 ) − r ( h ) で、∣ r ( h / 2 ) ∣ ≤ C 2 − q h q |r(h/2)| \le C2^{-q}h^q ∣ r ( h /2 ) ∣ ≤ C 2 − q h q 、∣ r ( h ) ∣ ≤ C h q |r(h)| \le Ch^q ∣ r ( h ) ∣ ≤ C h q から最初の評価を得ます。後半は、分子と分母がともに − c ( h / 2 ) p + O ( h q ) -c(h/2)^p + O(h^q) − c ( h /2 ) p + O ( h q ) で、q > p q \gt p q > p 、c ≠ 0 c \ne 0 c = 0 から比が 1 1 1 に近づくことによります。
∎
台形則(p = 2 p = 2 p = 2 )なら、( T ( h / 2 ) − T ( h ) ) / 3 \bigl(T(h/2) - T(h)\bigr)/3 ( T ( h /2 ) − T ( h ) ) /3 が T ( h / 2 ) T(h/2) T ( h /2 ) の誤差の推定値です。これは誤差の上界ではなく近似値 で、h h h が十分小さく、展開の仮定が成り立っているときにだけ信頼できます。推定値を使う前に、刻みを変えた 3 つ以上の値で比 ( A ( h ) − A ( h / 2 ) ) / ( A ( h / 2 ) − A ( h / 4 ) ) \bigl(A(h) - A(h/2)\bigr)/\bigl(A(h/2) - A(h/4)\bigr) ( A ( h ) − A ( h /2 ) ) / ( A ( h /2 ) − A ( h /4 ) ) が 2 p 2^p 2 p に近いことを確かめるのがよいと思います。例 5.5 の x \sqrt x x では、この比が 4 4 4 ではなく 2 1.5 ≈ 2.8 2^{1.5} \approx 2.8 2 1.5 ≈ 2.8 に近づくので、p = 2 p = 2 p = 2 を仮定した推定が誤っていることを見抜けます。
刻みを小さくするほど打ち切り誤差は減りますが、浮動小数で計算すると、近い 2 つの値の差に含まれる丸め誤差が刻みで割られて拡大されます。中心差分 D ( h ) = f ( x + h ) − f ( x − h ) 2 h D(h) = \frac{f(x+h) - f(x-h)}{2h} D ( h ) = 2 h f ( x + h ) − f ( x − h ) でこの釣り合いを定量的に調べます。u u u は単位丸め(倍精度で 2 − 53 2^{-53} 2 − 53 )で、浮動小数の四則は標準モデル(系 3.1[浮動小数点数と丸め誤差] )に従うとします。標準モデルとは、浮動小数の 1 回の四則演算の結果が、真の値の ( 1 + δ ) (1 + \delta) ( 1 + δ ) 倍(∣ δ ∣ ≤ u |\delta| \le u ∣ δ ∣ ≤ u )になる、という取り決めです。
次の図は、後の例の数値を使って、刻みを小さくしたときの全体の誤差が V 字になる様子を描いたものです。
1e-2 1e-6 1e-10 1e-14 2^-4 2^-12 2^-20 2^-28 2^-36 h(右ほど小さい) 中心差分の誤差(後の例 x³ の表の値)。横軸は h = 2^-k、縦軸は誤差で、どちらも対数目盛。実線が全体の誤差、破線が打ち切り誤差 h²、点線が丸めの評価。
命題 7.1 (中心差分の打ち切り誤差と丸め誤差 ) ✓
f f f は [ x − h 0 , x + h 0 ] [x - h_0, x + h_0] [ x − h 0 , x + h 0 ] を含む開区間で C 3 C^3 C 3 級とし、M j = max [ x − h 0 , x + h 0 ] ∣ f ( j ) ∣ M_j = \max_{[x-h_0, x+h_0]}|f^{(j)}| M j = max [ x − h 0 , x + h 0 ] ∣ f ( j ) ∣ (j = 0 , 1 , 3 j = 0, 1, 3 j = 0 , 1 , 3 )とおく。0 < h ≤ h 0 0 \lt h \le h_0 0 < h ≤ h 0 で x ± h x \pm h x ± h と 2 h 2h 2 h が浮動小数で正確に表され、計算された関数値が f ^ ± = f ( x ± h ) ( 1 + ε ± ) \hat f_{\pm} = f(x \pm h)(1 + \varepsilon_{\pm}) f ^ ± = f ( x ± h ) ( 1 + ε ± ) 、∣ ε ± ∣ ≤ ε |\varepsilon_{\pm}| \le \varepsilon ∣ ε ± ∣ ≤ ε を満たすとする。D ^ = f l ( f l ( f ^ + − f ^ − ) / ( 2 h ) ) \hat D = \mathrm{fl}\bigl(\mathrm{fl}(\hat f_+ - \hat f_-)/(2h)\bigr) D ^ = fl ( fl ( f ^ + − f ^ − ) / ( 2 h ) ) の計算でオーバーフローとアンダーフローが起きなければ
∣ D ^ − f ′ ( x ) ∣ ≤ M 3 6 h 2 + ( 1 + u ) 2 ε M 0 h + ( 2 u + u 2 ) M 1 |\hat D - f'(x)| \le \frac{M_3}{6}h^2 + \frac{(1+u)^2\varepsilon M_0}{h} + (2u + u^2)M_1 ∣ D ^ − f ′ ( x ) ∣ ≤ 6 M 3 h 2 + h ( 1 + u ) 2 ε M 0 + ( 2 u + u 2 ) M 1 である。さらに M 3 > 0 M_3 \gt 0 M 3 > 0 、E = ( 1 + u ) 2 ε M 0 > 0 E = (1+u)^2\varepsilon M_0 \gt 0 E = ( 1 + u ) 2 ε M 0 > 0 のとき、右辺の最初の 2 項の和は h ∗ = ( 3 E / M 3 ) 1 / 3 h^* = (3E/M_3)^{1/3} h ∗ = ( 3 E / M 3 ) 1/3 で最小になり、最小値は 3 2 / 3 2 E 2 / 3 M 3 1 / 3 \frac{3^{2/3}}{2}E^{2/3}M_3^{1/3} 2 3 2/3 E 2/3 M 3 1/3 である。
証明(命題 7.1) 打ち切り誤差. Taylor の定理(定理 5.3[平均値の定理とテイラーの定理] 。a = x a = x a = x 、n = 2 n = 2 n = 2 )から f ( x ± h ) = f ( x ) ± h f ′ ( x ) + h 2 2 f ′ ′ ( x ) ± h 3 6 f ′ ′ ′ ( ξ ± ) f(x \pm h) = f(x) \pm hf'(x) + \frac{h^2}{2}f''(x) \pm \frac{h^3}{6}f'''(\xi_\pm) f ( x ± h ) = f ( x ) ± h f ′ ( x ) + 2 h 2 f ′′ ( x ) ± 6 h 3 f ′′′ ( ξ ± ) となる ξ ± \xi_\pm ξ ± があり、
D ( h ) − f ′ ( x ) = h 2 12 ( f ′ ′ ′ ( ξ + ) + f ′ ′ ′ ( ξ − ) ) , ∣ D ( h ) − f ′ ( x ) ∣ ≤ M 3 6 h 2 D(h) - f'(x) = \frac{h^2}{12}\bigl(f'''(\xi_+) + f'''(\xi_-)\bigr), \qquad |D(h) - f'(x)| \le \frac{M_3}{6}h^2 D ( h ) − f ′ ( x ) = 12 h 2 ( f ′′′ ( ξ + ) + f ′′′ ( ξ − ) ) , ∣ D ( h ) − f ′ ( x ) ∣ ≤ 6 M 3 h 2 です。
丸め誤差. 標準モデル(系 3.1[浮動小数点数と丸め誤差] )から ∣ δ 1 ∣ , ∣ δ 2 ∣ ≤ u |\delta_1|, |\delta_2| \le u ∣ δ 1 ∣ , ∣ δ 2 ∣ ≤ u があって D ^ = ( f ^ + − f ^ − ) ( 1 + δ 1 ) ( 1 + δ 2 ) / ( 2 h ) \hat D = (\hat f_+ - \hat f_-)(1 + \delta_1)(1 + \delta_2)/(2h) D ^ = ( f ^ + − f ^ − ) ( 1 + δ 1 ) ( 1 + δ 2 ) / ( 2 h ) です(2 h 2h 2 h は正確なので割り算の丸めは 1 回)。f ± = f ( x ± h ) f_\pm = f(x \pm h) f ± = f ( x ± h ) と書くと
D ^ − D ( h ) = ( f + − f − ) ( ( 1 + δ 1 ) ( 1 + δ 2 ) − 1 ) + ( f + ε + − f − ε − ) ( 1 + δ 1 ) ( 1 + δ 2 ) 2 h \hat D - D(h) = \frac{(f_+ - f_-)\bigl((1+\delta_1)(1+\delta_2) - 1\bigr) + (f_+\varepsilon_+ - f_-\varepsilon_-)(1+\delta_1)(1+\delta_2)}{2h} D ^ − D ( h ) = 2 h ( f + − f − ) ( ( 1 + δ 1 ) ( 1 + δ 2 ) − 1 ) + ( f + ε + − f − ε − ) ( 1 + δ 1 ) ( 1 + δ 2 ) です。平均値の定理(定理 3.3[平均値の定理とテイラーの定理] )から ∣ f + − f − ∣ ≤ 2 h M 1 |f_+ - f_-| \le 2hM_1 ∣ f + − f − ∣ ≤ 2 h M 1 、また ∣ ( 1 + δ 1 ) ( 1 + δ 2 ) − 1 ∣ ≤ 2 u + u 2 |(1+\delta_1)(1+\delta_2) - 1| \le 2u + u^2 ∣ ( 1 + δ 1 ) ( 1 + δ 2 ) − 1∣ ≤ 2 u + u 2 、∣ f + ε + − f − ε − ∣ ≤ 2 ε M 0 |f_+\varepsilon_+ - f_-\varepsilon_-| \le 2\varepsilon M_0 ∣ f + ε + − f − ε − ∣ ≤ 2 ε M 0 なので、∣ D ^ − D ( h ) ∣ ≤ ( 2 u + u 2 ) M 1 + ( 1 + u ) 2 ε M 0 / h |\hat D - D(h)| \le (2u + u^2)M_1 + (1+u)^2\varepsilon M_0/h ∣ D ^ − D ( h ) ∣ ≤ ( 2 u + u 2 ) M 1 + ( 1 + u ) 2 ε M 0 / h です。三角不等式で 2 つを合わせます。
最適な刻み. g ( h ) = M 3 6 h 2 + E h g(h) = \frac{M_3}{6}h^2 + \frac Eh g ( h ) = 6 M 3 h 2 + h E は h > 0 h \gt 0 h > 0 で微分可能で g ′ ( h ) = M 3 3 h − E h 2 g'(h) = \frac{M_3}{3}h - \frac{E}{h^2} g ′ ( h ) = 3 M 3 h − h 2 E は h < h ∗ h \lt h^* h < h ∗ で負、h > h ∗ h \gt h^* h > h ∗ で正なので、g g g は ( 0 , h ∗ ] (0, h^*] ( 0 , h ∗ ] で減少、[ h ∗ , ∞ ) [h^*, \infty) [ h ∗ , ∞ ) で増加し(系 3.4[平均値の定理とテイラーの定理] )、h ∗ h^* h ∗ で最小です。E = M 3 ( h ∗ ) 3 / 3 E = M_3(h^*)^3/3 E = M 3 ( h ∗ ) 3 /3 を代入すると g ( h ∗ ) = M 3 6 ( h ∗ ) 2 + M 3 3 ( h ∗ ) 2 = M 3 2 ( h ∗ ) 2 = 3 2 / 3 2 E 2 / 3 M 3 1 / 3 g(h^*) = \frac{M_3}{6}(h^*)^2 + \frac{M_3}{3}(h^*)^2 = \frac{M_3}{2}(h^*)^2 = \frac{3^{2/3}}{2}E^{2/3}M_3^{1/3} g ( h ∗ ) = 6 M 3 ( h ∗ ) 2 + 3 M 3 ( h ∗ ) 2 = 2 M 3 ( h ∗ ) 2 = 2 3 2/3 E 2/3 M 3 1/3 です。
∎
ε \varepsilon ε が u u u の数倍なら、最適な刻みは h ∗ ∝ u 1 / 3 ≈ 5 × 10 − 6 h^* \propto u^{1/3} \approx 5 \times 10^{-6} h ∗ ∝ u 1/3 ≈ 5 × 1 0 − 6 の程度で、得られる精度は u 2 / 3 ≈ 10 − 11 u^{2/3} \approx 10^{-11} u 2/3 ≈ 1 0 − 11 の程度です。倍精度の 16 桁のうち、中心差分で得られる微分係数は 10〜11 桁にとどまります。前進差分 ( f ( x + h ) − f ( x ) ) / h \bigl(f(x+h) - f(x)\bigr)/h ( f ( x + h ) − f ( x ) ) / h では打ち切り誤差が O ( h ) O(h) O ( h ) なので、同じ議論で h ∗ ∝ u 1 / 2 h^* \propto u^{1/2} h ∗ ∝ u 1/2 、精度は u 1 / 2 ≈ 10 − 8 u^{1/2} \approx 10^{-8} u 1/2 ≈ 1 0 − 8 になります(演習 8.4 )。刻みを小さくしすぎるのは、大きすぎるのと同じくらい有害です。
例 7.2 (中心差分の誤差の V 字 )
f ( x ) = x 3 f(x) = x^3 f ( x ) = x 3 を x = 0.7 x = 0.7 x = 0.7 (に最も近い倍精度数)で中心差分します。x 3 x^3 x 3 は掛け算 2 回で計算するので ε ≤ 2 u + u 2 \varepsilon \le 2u + u^2 ε ≤ 2 u + u 2 で、刻みは 2 − k 2^{-k} 2 − k にして x ± h x \pm h x ± h 、2 h 2h 2 h を正確にします。この関数では打ち切り誤差がちょうど h 2 h^2 h 2 になるので、mpmath(50 桁)で同じ点の差分を厳密に計算し、全体の誤差を打ち切りと丸めに分けます。
# Python 3.12.10 / mpmath 1.3.0
from mpmath import mp, mpf
f = lambda x : x * x * x # f(x) = x^3
x, u = 0.7 , 2.0 **- 53 # x は 0.7 に最も近い倍精度数
d = 3 * mpf ( x ) ** 2 # f'(x) の厳密な値
print ( " h 全体の誤差 打ち切り 丸めの寄与 丸めの評価 " )
for k in [ 4 , 8 , 12 , 14 , 16 , 18 , 20 , 24 , 28 , 32 , 36 , 40 ] :
h = 2.0 **- k # x±h と 2h は浮動小数で正確
D = ( f ( x + h ) - f ( x - h )) / ( 2 * h) # 倍精度の中心差分
Dm = ( mpf ( x + h ) ** 3 - mpf ( x - h ) ** 3 ) / ( 2 * mpf ( h )) # 厳密
trunc = float ( Dm - d ) # 打ち切り(= h^2)
rnd = abs ( float ( mpf ( D ) - Dm )) # 丸めによる差
M0, M1 = (x + h) ** 3 , 3 * (x + h) ** 2
eps = 2 * u + u * u # 掛け算 2 回の誤差
rb = ( 1 + u) ** 2 * eps * M0 / h + ( 2 * u + u * u) * M1
print ( f "2^- {k :<2d } { float ( abs ( mpf ( D ) - d )) :.2e } {trunc :.2e } "
print ( f "最適な刻みの予測 (3 eps M0/M3)^(1/3) = "
f " {( 3 * 2 * u * x ** 3 / 6 ) ** ( 1 / 3 ) :.1e } " )
2^-4 3.91e-03 3.91e-03 5.06e-16 1.96e-15
2^-8 1.53e-05 1.53e-05 6.16e-15 2.02e-14
2^-12 5.96e-08 5.96e-08 2.75e-14 3.13e-13
2^-14 3.73e-09 3.73e-09 2.00e-13 1.25e-12
2^-16 2.34e-10 2.33e-10 1.16e-12 4.99e-12
2^-18 8.44e-12 1.46e-11 6.11e-12 2.00e-11
2^-20 1.16e-12 9.09e-13 2.55e-13 7.99e-11
2^-24 2.05e-10 3.55e-15 2.05e-10 1.28e-09
2^-28 1.19e-09 1.39e-17 1.19e-09 2.04e-08
2^-32 2.86e-08 5.42e-20 2.86e-08 3.27e-07
2^-36 1.22e-06 2.12e-22 1.22e-06 5.23e-06
2^-40 1.22e-06 8.27e-25 1.22e-06 8.37e-05
最適な刻みの予測 (3 eps M0/M3)^(1/3) = 3.4e-06
検算. (a) x 3 x^3 x 3 の中心差分は厳密には 3 x 2 + h 2 3x^2 + h^2 3 x 2 + h 2 なので、打ち切りの列は h 2 h^2 h 2 (2 − 8 2^{-8} 2 − 8 で 1.53 × 10 − 5 1.53 \times 10^{-5} 1.53 × 1 0 − 5 など)に一致します。(b) 丸めの寄与は倍精度の値と mpmath の 50 桁の値の差で、すべての行で 命題 7.1 の丸めの評価(( 1 + u ) 2 ε M 0 / h + ( 2 u + u 2 ) M 1 (1+u)^2\varepsilon M_0/h + (2u+u^2)M_1 ( 1 + u ) 2 ε M 0 / h + ( 2 u + u 2 ) M 1 )以下です。(c) 全体の誤差は h h h が大きいうちは h 2 h^2 h 2 に比例して減り(h h h を 1 / 4 1/4 1/4 にするごとに 1 / 16 1/16 1/16 )、h ≈ 2 − 18 h \approx 2^{-18} h ≈ 2 − 18 〜2 − 20 2^{-20} 2 − 20 (4 × 10 − 6 4 \times 10^{-6} 4 × 1 0 − 6 〜10 − 6 10^{-6} 1 0 − 6 )で最小になって、その後は丸めの寄与が 1 / h 1/h 1/ h に比例して増えます。最小の位置は予測 h ∗ ≈ 3.4 × 10 − 6 h^* \approx 3.4 \times 10^{-6} h ∗ ≈ 3.4 × 1 0 − 6 の近くです。2 − 20 2^{-20} 2 − 20 で丸めの寄与が評価より 2 桁以上小さいのは、丸めがたまたま打ち消し合ったためで、評価は最悪の場合の上界です。
演習 8.1 易
f ∈ C 5 f \in C^5 f ∈ C 5 のとき中心差分 D ( h ) D(h) D ( h ) は D ( h ) = f ′ ( x ) + f ′ ′ ′ ( x ) 6 h 2 + O ( h 4 ) D(h) = f'(x) + \frac{f'''(x)}{6}h^2 + O(h^4) D ( h ) = f ′ ( x ) + 6 f ′′′ ( x ) h 2 + O ( h 4 ) を満たします(Taylor の定理を 4 次まで使えば確かめられます)。定理 4.2 (p = 2 p = 2 p = 2 )の外挿 ( 4 D ( h / 2 ) − D ( h ) ) / 3 \bigl(4D(h/2) - D(h)\bigr)/3 ( 4 D ( h /2 ) − D ( h ) ) /3 を f f f の値で書き下し、誤差が O ( h 4 ) O(h^4) O ( h 4 ) であることを確かめてください。
解答 4 D ( h / 2 ) − D ( h ) 3 = 1 3 ( 4 ( f ( x + h 2 ) − f ( x − h 2 ) ) h − f ( x + h ) − f ( x − h ) 2 h ) = 8 ( f ( x + h 2 ) − f ( x − h 2 ) ) − ( f ( x + h ) − f ( x − h ) ) 6 h \frac{4D(h/2) - D(h)}{3} = \frac13\Bigl(\frac{4\bigl(f(x+\frac h2) - f(x-\frac h2)\bigr)}{h} - \frac{f(x+h) - f(x-h)}{2h}\Bigr) = \frac{8\bigl(f(x+\frac h2) - f(x-\frac h2)\bigr) - \bigl(f(x+h) - f(x-h)\bigr)}{6h} 3 4 D ( h /2 ) − D ( h ) = 3 1 ( h 4 ( f ( x + 2 h ) − f ( x − 2 h ) ) − 2 h f ( x + h ) − f ( x − h ) ) = 6 h 8 ( f ( x + 2 h ) − f ( x − 2 h ) ) − ( f ( x + h ) − f ( x − h ) ) です。D ( h ) = f ′ ( x ) + c h 2 + r ( h ) D(h) = f'(x) + ch^2 + r(h) D ( h ) = f ′ ( x ) + c h 2 + r ( h ) 、c = f ′ ′ ′ ( x ) / 6 c = f'''(x)/6 c = f ′′′ ( x ) /6 、∣ r ( h ) ∣ ≤ C h 4 |r(h)| \le Ch^4 ∣ r ( h ) ∣ ≤ C h 4 なので、定理 4.2 から誤差は 1 + 2 − 2 3 C h 4 = 5 12 C h 4 \frac{1 + 2^{-2}}{3}Ch^4 = \frac{5}{12}Ch^4 3 1 + 2 − 2 C h 4 = 12 5 C h 4 以下です。刻みを h / 2 h/2 h /2 に読み替えれば、よく使われる 5 点公式 − f ( x + 2 k ) + 8 f ( x + k ) − 8 f ( x − k ) + f ( x − 2 k ) 12 k \frac{-f(x+2k) + 8f(x+k) - 8f(x-k) + f(x-2k)}{12k} 12 k − f ( x + 2 k ) + 8 f ( x + k ) − 8 f ( x − k ) + f ( x − 2 k ) (k = h / 2 k = h/2 k = h /2 )です。
演習 8.2 標準
∫ 0 1 x 4 d x = 1 / 5 \int_0^1 x^4\,dx = 1/5 ∫ 0 1 x 4 d x = 1/5 について、N 0 = 1 N_0 = 1 N 0 = 1 の Romberg 表の T 0 , 0 , T 1 , 0 , T 2 , 0 , T 1 , 1 , T 2 , 1 , T 2 , 2 T_{0,0}, T_{1,0}, T_{2,0}, T_{1,1}, T_{2,1}, T_{2,2} T 0 , 0 , T 1 , 0 , T 2 , 0 , T 1 , 1 , T 2 , 1 , T 2 , 2 を有理数で求め、T 2 , 2 T_{2,2} T 2 , 2 が正確に 1 / 5 1/5 1/5 になる理由を 定理 2.1 から説明してください。
解答 T 0 , 0 = 1 2 ( 0 + 1 ) = 1 2 T_{0,0} = \frac12(0 + 1) = \frac12 T 0 , 0 = 2 1 ( 0 + 1 ) = 2 1 、T 1 , 0 = 1 2 ( 0 + 1 16 + 1 2 ) = 9 32 T_{1,0} = \frac12\bigl(0 + \frac1{16} + \frac12\bigr) = \frac{9}{32} T 1 , 0 = 2 1 ( 0 + 16 1 + 2 1 ) = 32 9 、T 2 , 0 = 1 4 ( 1 256 + 16 256 + 81 256 + 128 256 ) = 113 512 T_{2,0} = \frac14\bigl(\frac{1}{256} + \frac{16}{256} + \frac{81}{256} + \frac{128}{256}\bigr) = \frac{113}{512} T 2 , 0 = 4 1 ( 256 1 + 256 16 + 256 81 + 256 128 ) = 512 113 です。T 1 , 1 = ( 4 ⋅ 9 32 − 1 2 ) / 3 = 5 24 T_{1,1} = (4 \cdot \frac{9}{32} - \frac12)/3 = \frac{5}{24} T 1 , 1 = ( 4 ⋅ 32 9 − 2 1 ) /3 = 24 5 (Simpson 則)、T 2 , 1 = ( 4 ⋅ 113 512 − 9 32 ) / 3 = 77 384 T_{2,1} = (4 \cdot \frac{113}{512} - \frac{9}{32})/3 = \frac{77}{384} T 2 , 1 = ( 4 ⋅ 512 113 − 32 9 ) /3 = 384 77 、T 2 , 2 = ( 16 ⋅ 77 384 − 5 24 ) / 15 = 1152 / 384 15 = 1 5 T_{2,2} = (16 \cdot \frac{77}{384} - \frac{5}{24})/15 = \frac{1152/384}{15} = \frac15 T 2 , 2 = ( 16 ⋅ 384 77 − 24 5 ) /15 = 15 1152/384 = 5 1 です。f = x 4 f = x^4 f = x 4 では f ( 5 ) = 0 f^{(5)} = 0 f ( 5 ) = 0 なので、定理 2.1 を p = 2 p = 2 p = 2 で使うと c 3 = 0 c_3 = 0 c 3 = 0 、剰余の積分も f ( 6 ) = 0 f^{(6)} = 0 f ( 6 ) = 0 で 0 0 0 となり、T ( h ) − I = c 1 h 2 + c 2 h 4 T(h) - I = c_1h^2 + c_2h^4 T ( h ) − I = c 1 h 2 + c 2 h 4 が正確に成り立ちます。2 回の外挿で h 2 h^2 h 2 と h 4 h^4 h 4 の項が消えるので(系 4.3 で r k = 0 r_k = 0 r k = 0 )、T 2 , 2 = I T_{2,2} = I T 2 , 2 = I です。
演習 8.3 標準
f ( θ ) = 1 / ( 2 − cos θ ) f(\theta) = 1/(2 - \cos\theta) f ( θ ) = 1/ ( 2 − cos θ ) について ∫ 0 2 π f = 2 π / 3 \int_0^{2\pi}f = 2\pi/\sqrt3 ∫ 0 2 π f = 2 π / 3 です。(i) ∣ I m z ∣ < a |\mathrm{Im}\,z| \lt a ∣ Im z ∣ < a で ∣ 2 − cos z ∣ ≥ 2 − cosh a |2 - \cos z| \ge 2 - \cosh a ∣2 − cos z ∣ ≥ 2 − cosh a を示し、a = 1 a = 1 a = 1 として 定理 3.2 の 2 から N = 20 N = 20 N = 20 の台形則の誤差の上界を求めてください。(ii) f ^ ( n ) = r ∣ n ∣ / 3 \hat f(n) = r^{|n|}/\sqrt3 f ^ ( n ) = r ∣ n ∣ / 3 (r = 2 − 3 r = 2 - \sqrt3 r = 2 − 3 )を使って、実際の誤差を求めてください。
解答 (i) z = x + i y z = x + iy z = x + i y で ∣ cos z ∣ 2 = cos 2 x + sinh 2 y ≤ cosh 2 y |\cos z|^2 = \cos^2x + \sinh^2y \le \cosh^2y ∣ cos z ∣ 2 = cos 2 x + sinh 2 y ≤ cosh 2 y なので ∣ 2 − cos z ∣ ≥ 2 − ∣ cos z ∣ ≥ 2 − cosh a |2 - \cos z| \ge 2 - |\cos z| \ge 2 - \cosh a ∣2 − cos z ∣ ≥ 2 − ∣ cos z ∣ ≥ 2 − cosh a です。a = 1 a = 1 a = 1 では cosh 1 ≈ 1.543 < 2 \cosh 1 \approx 1.543 \lt 2 cosh 1 ≈ 1.543 < 2 なので f f f は帯状領域で正則で、M = 1 / ( 2 − cosh 1 ) ≈ 2.19 M = 1/(2 - \cosh 1) \approx 2.19 M = 1/ ( 2 − cosh 1 ) ≈ 2.19 です。上界は 4 π M / ( e 20 − 1 ) ≈ 5.7 × 10 − 8 4\pi M/(e^{20} - 1) \approx 5.7 \times 10^{-8} 4 π M / ( e 20 − 1 ) ≈ 5.7 × 1 0 − 8 です。
(ii) 定理 3.2 の等式から、誤差は 2 π ∑ m ≠ 0 f ^ ( 20 m ) = 4 π 3 ⋅ r 20 1 − r 20 ≈ 2.6 × 10 − 11 2\pi\sum_{m \ne 0}\hat f(20m) = \frac{4\pi}{\sqrt3}\cdot\frac{r^{20}}{1 - r^{20}} \approx 2.6 \times 10^{-11} 2 π ∑ m = 0 f ^ ( 20 m ) = 3 4 π ⋅ 1 − r 20 r 20 ≈ 2.6 × 1 0 − 11 です。(i) の上界は 3 桁大きめです。f f f の極は cos z = 2 \cos z = 2 cos z = 2 、すなわち z = ± i log ( 2 + 3 ) ≈ ± 1.317 i z = \pm i\log(2 + \sqrt3) \approx \pm1.317i z = ± i log ( 2 + 3 ) ≈ ± 1.317 i にあるので、a a a をこの値に近づけるほど上界は真の誤差の減り方 r N = e − 1.317 N r^N = e^{-1.317N} r N = e − 1.317 N に近づきます(ただし M M M は大きくなります)。
演習 8.4 難
前進差分 D + ( h ) = ( f ( x + h ) − f ( x ) ) / h D_+(h) = \bigl(f(x+h) - f(x)\bigr)/h D + ( h ) = ( f ( x + h ) − f ( x ) ) / h について、命題 7.1 と同じ仮定(f ∈ C 2 f \in C^2 f ∈ C 2 、M 2 = max ∣ f ′ ′ ∣ M_2 = \max|f''| M 2 = max ∣ f ′′ ∣ 、関数値の相対誤差 ε \varepsilon ε 、x + h x + h x + h と h h h は正確)のもとで誤差の上界を導き、最適な刻みが u 1 / 2 u^{1/2} u 1/2 の程度、得られる精度も u 1 / 2 u^{1/2} u 1/2 の程度であることを示してください。
解答 Taylor の定理(n = 1 n = 1 n = 1 )から D + ( h ) − f ′ ( x ) = h 2 f ′ ′ ( ξ ) D_+(h) - f'(x) = \frac h2f''(\xi) D + ( h ) − f ′ ( x ) = 2 h f ′′ ( ξ ) で、打ち切り誤差は M 2 2 h \frac{M_2}{2}h 2 M 2 h 以下です。丸めは中心差分と同じ計算で ( 1 + u ) 2 ⋅ 2 ε M 0 / h + ( 2 u + u 2 ) M 1 (1+u)^2\cdot 2\varepsilon M_0/h + (2u + u^2)M_1 ( 1 + u ) 2 ⋅ 2 ε M 0 / h + ( 2 u + u 2 ) M 1 以下です(分母が 2 h 2h 2 h ではなく h h h なので ε \varepsilon ε の項が 2 倍)。g ( h ) = M 2 2 h + E ′ h g(h) = \frac{M_2}{2}h + \frac{E'}{h} g ( h ) = 2 M 2 h + h E ′ (E ′ = 2 ( 1 + u ) 2 ε M 0 E' = 2(1+u)^2\varepsilon M_0 E ′ = 2 ( 1 + u ) 2 ε M 0 )は g ′ ( h ) = M 2 2 − E ′ h 2 g'(h) = \frac{M_2}{2} - \frac{E'}{h^2} g ′ ( h ) = 2 M 2 − h 2 E ′ の符号から h ∗ = 2 E ′ / M 2 h^* = \sqrt{2E'/M_2} h ∗ = 2 E ′ / M 2 で最小になり、最小値は 2 M 2 E ′ \sqrt{2M_2E'} 2 M 2 E ′ です。ε \varepsilon ε が u u u の数倍なら h ∗ ∝ u 1 / 2 ≈ 10 − 8 h^* \propto u^{1/2} \approx 10^{-8} h ∗ ∝ u 1/2 ≈ 1 0 − 8 、誤差も u 1 / 2 ≈ 10 − 8 u^{1/2} \approx 10^{-8} u 1/2 ≈ 1 0 − 8 の程度で、中心差分(u 2 / 3 u^{2/3} u 2/3 )より 3 桁ほど悪くなります。
K. E. Atkinson, An Introduction to Numerical Analysis , 2nd ed., Wiley, 1989 — Chapter 5(Euler–Maclaurin 公式、Richardson 外挿、Romberg 法)。
L. N. Trefethen, J. A. C. Weideman, “The exponentially convergent trapezoidal rule”, SIAM Review 56 (2014), 385–458. doi:10.1137/130932132
P. J. Davis, P. Rabinowitz, Methods of Numerical Integration , 2nd ed., Academic Press, 1984。
R. Piessens, E. de Doncker-Kapenga, C. W. Überhuber, D. K. Kahaner, QUADPACK: A Subroutine Package for Automatic Integration , Springer, 1983。
H. Takahasi, M. Mori, “Double exponential formulas for numerical integration”, Publ. RIMS Kyoto Univ. 9 (1974), 721–741.
執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12