コンテンツにスキップ

準 Monte Carlo 法:食い違い量・Koksma–Hlawka の不等式・格子則

対象読者: 本テーマ第 3 章までの内容と、フーリエ級数(Parseval の等式など)、直積測度と Fubini の定理を学んだ人。食い違い量や格子則は仮定しません。

前提となる記事:Monte Carlo 積分と分散低減:重点サンプリング・制御変量・層別、フーリエ級数:Dirichlet–Jordan の収束定理・Fejér の定理・Parseval の等式・Gibbs 現象、直積測度と Fubini–Tonelli の定理:積分の順序交換と無限直積

生 Markdown

コンピュータで積分の近似値を求めるとき、乱数を使うと「たまたま偏った点が出る」ことで誤差が残ります。それなら、はじめから偏りが出ないように点を並べておけばよいのではないか、というのがこの記事の出発点です。点がどれだけ均等に並んでいるかを数で測り、その数が小さい並べ方を使うと、乱数より速く誤差が小さくなることを、証明つきで示します。読み終えると、どんな点の並べ方を選べばよいか、なぜそれで誤差が抑えられるか、実際の計算で誤差をどう見積もるかが分かります。

  • 点集合が一様分布からどれだけずれているかを星型食い違い量 DN∗D_N^* で測ります。1 次元では DN∗≥1/(2N)D_N^* \ge 1/(2N) で、閉じた式で計算できます(命題 2.3)。
  • 列が一様分布することは、すべての非零の整数ベクトル hh について指数和の平均 N−1∑ne2πih⋅xnN^{-1}\sum_n e^{2\pi i h\cdot x_n} が 00 に収束することと同値です(定理 3.2)。
  • 混合偏導関数が連続な被積分関数について、等重みの求積の誤差は「関数の変動 ×\times 点集合の食い違い量」で抑えられます(定理 4.4)。関数の性質と点の性質が分かれるのが要点です。
  • Halton 列は NDN∗≤∏j((bj−1)⌈log⁡bjN⌉+1)=O((log⁡N)d)N D_N^* \le \prod_j((b_j - 1)\lceil\log_{b_j}N\rceil + 1) = O((\log N)^d) を満たします(定理 5.4)。誤差は O(N−1(log⁡N)d)O(N^{-1}(\log N)^d) で、Monte Carlo 法の N−1/2N^{-1/2} より速く減ります。
  • 周期関数には格子則が向いています。誤差は双対格子(h⋅gh\cdot g が NN の倍数になる整数ベクトル hh の全体)の上の Fourier 係数の和に等しく、素数 NN について最悪誤差が O(N−α(log⁡N)αd)O(N^{-\alpha}(\log N)^{\alpha d}) になる生成ベクトル(格子の点 {ng/N}\{ng/N\} を決める整数ベクトル gg)があります(定理 6.3)。
  • 決定的な点集合に一様な無作為の平行移動を施すと、推定量が不偏になり、標準誤差を推定できます(命題 7.2)。高次元で準 Monte Carlo 法が効くのは、被積分関数の分散が少数の変数の成分に集中している(有効次元が小さい。分散の大部分が何変数までの成分に収まるかを表す数)ときです(命題 7.4)。

Monte Carlo 積分の誤差は σ/N\sigma/\sqrt N です。この N−1/2N^{-1/2} は、独立な乱数が「偶然の偏り」をもつことから来ます。NN 個の独立な一様乱数は、ある区間に期待より N\sqrt N 個程度多く(または少なく)入ります。一方、積型の求積則は点を規則的に並べるので偏りはありませんが、dd 次元では 1 方向に N1/dN^{1/d} 点しか置けず、誤差が N−r/dN^{-r/d} になります(定理 3.1[Monte Carlo 積分と分散低減])。

準 Monte Carlo 法(quasi-Monte Carlo)は、この中間を狙います。乱数の代わりに、どの箱にも体積にほぼ比例した個数が入るように設計した決定的な点列を使い、Monte Carlo 法と同じ等重みの平均 N−1∑nf(xn)N^{-1}\sum_n f(x_n) で積分を近似します。点の「むらのなさ」を測る量が食い違い量で、良い点列では O(N−1(log⁡N)d)O(N^{-1}(\log N)^d) です。dd を固定して NN を増やせば N−1/2N^{-1/2} より速く、次元への依存は積型則の N−r/dN^{-r/d} よりずっと穏やかです。

代償は 2 つあります。第 1 に、誤差評価が被積分関数の滑らかさ(混合偏導関数)を要求すること。第 2 に、決定的な方法なので、そのままでは標準誤差が付かないこと。後者は無作為化(§7)で解決します。このテーマの物差しである「推定量の偏りと分散を定理として評価し、報告する数値に誤差を付ける」ことは、準 Monte Carlo 法でも保てます。

d≥1d \ge 1 とし、[0,1)d[0,1)^d の NN 個の点 x1,…,xNx_1, \ldots, x_N(重複があってもよい)の組を点集合 PP と呼びます。[0,1]d[0,1]^d の部分集合 JJ について、JJ に入る点の個数を A(J;P)=#{n:xn∈J}A(J; P) = \#\{n : x_n \in J\} と書きます。t∈[0,1]dt \in [0,1]^d について [0,t)=∏j=1d[0,tj)[0, t) = \prod_{j=1}^d[0, t_j) とします。

定義 2.1(局所食い違い関数・食い違い量)↗

点集合 PP の局所食い違い関数を

δP(t)=A([0,t);P)N−∏j=1dtj(t∈[0,1]d)\delta_P(t) = \frac{A([0,t); P)}{N} - \prod_{j=1}^dt_j \qquad (t \in [0,1]^d)

と定め、

DN∗(P)=sup⁡t∈[0,1]d∣δP(t)∣,DN(P)=sup⁡0≤aj<bj≤1∣A(∏j[aj,bj);P)N−∏j=1d(bj−aj)∣D_N^*(P) = \sup_{t\in[0,1]^d}|\delta_P(t)|, \qquad D_N(P) = \sup_{0 \le a_j < b_j \le 1}\Bigl|\frac{A(\prod_j[a_j, b_j); P)}{N} - \prod_{j=1}^d(b_j - a_j)\Bigr|

を星型食い違い量(star discrepancy)、食い違い量(extreme discrepancy)という。無限列 (xn)(x_n) については、最初の NN 項のなす点集合の値を DN∗D_N^*、DND_N と書く。

DN∗D_N^* は、原点を頂点とする箱について「入っている点の割合」と「体積」の差の最大値です。NN 個の独立な一様乱数では DN∗D_N^* は N−1/2N^{-1/2} の大きさです。

補題 2.2(2 つの食い違い量の関係)✓

DN∗(P)≤DN(P)≤2dDN∗(P)D_N^*(P) \le D_N(P) \le 2^dD_N^*(P)。

証明(補題 2.2)

原点を頂点とする箱は a=0a = 0 の箱なので DN∗≤DND_N^* \le D_N です(tj=0t_j = 0 の成分があるときは箱が空で、差は 00 です)。逆向きを示します。箱 J=∏j[aj,bj)J = \prod_j[a_j, b_j) の定義関数は

1J(x)=∏j=1d(1[0,bj)(xj)−1[0,aj)(xj))=∑v⊆{1,…,d}(−1)∣v∣1[0,cv)(x)\mathbf{1}_J(x) = \prod_{j=1}^d\bigl(\mathbf{1}_{[0,b_j)}(x_j) - \mathbf{1}_{[0,a_j)}(x_j)\bigr) = \sum_{v\subseteq\{1,\ldots,d\}}(-1)^{|v|}\mathbf{1}_{[0, c^v)}(x)

と展開できます。ここで cvc^v は、j∈vj \in v で cjv=ajc^v_j = a_j、j∉vj \notin v で cjv=bjc^v_j = b_j とした点です。点の個数 A(⋅;P)A(\cdot; P) も体積も、定義関数について線形なので、

A(J;P)N−∏j(bj−aj)=∑v(−1)∣v∣δP(cv)\frac{A(J; P)}{N} - \prod_j(b_j - a_j) = \sum_v(-1)^{|v|}\delta_P(c^v)

です。右辺は 2d2^d 項で、各項の絶対値は DN∗D_N^* 以下です。

1 次元では DN∗D_N^* が閉じた形で求まります。

命題 2.3(1 次元の星型食い違い量)✓

[0,1)[0,1) の NN 個の点を小さい順に並べて x(1)≤⋯≤x(N)x_{(1)} \le \cdots \le x_{(N)} とすると

DN∗=12N+max⁡1≤i≤N∣x(i)−2i−12N∣.D_N^* = \frac{1}{2N} + \max_{1\le i\le N}\Bigl|x_{(i)} - \frac{2i-1}{2N}\Bigr|.

特に DN∗≥1/(2N)D_N^* \ge 1/(2N) で、等号は x(i)=(2i−1)/(2N)x_{(i)} = (2i-1)/(2N)(区間を NN 等分したときの中点)のときに限る。

証明(命題 2.3)

x(0)=0x_{(0)} = 0、x(N+1)=1x_{(N+1)} = 1 とおきます。[0,t)[0, t) に入る点は xn<tx_n < t を満たすものなので、x(i)<t≤x(i+1)x_{(i)} < t \le x_{(i+1)} のとき A([0,t))=iA([0,t)) = i です(i=0,…,Ni = 0, \ldots, N。t=0t = 0 では A=0A = 0)。この範囲で δP(t)=i/N−t\delta_P(t) = i/N - t は tt の 1 次関数なので、∣δP∣|\delta_P| の上限は区間の両端での値 ∣i/N−x(i)∣|i/N - x_{(i)}|、∣i/N−x(i+1)∣|i/N - x_{(i+1)}| の大きいほうです(左端は区間に含まれませんが、上限は変わりません)。x(i)=x(i+1)x_{(i)} = x_{(i+1)} で区間が空のときは寄与がありません。

まず点がすべて異なる場合を考えます。i=0i = 0 の区間からは ∣0−x(1)∣|0 - x_{(1)}|、i=Ni = N の区間からは ∣1−x(N)∣|1 - x_{(N)}| が出るので、まとめると

DN∗=max⁡1≤i≤Nmax⁡(∣x(i)−iN∣, ∣x(i)−i−1N∣)D_N^* = \max_{1\le i\le N}\max\Bigl(\Bigl|x_{(i)} - \frac iN\Bigr|,\ \Bigl|x_{(i)} - \frac{i-1}{N}\Bigr|\Bigr)

です(x(i)x_{(i)} は、ii 番目の区間の左端と i−1i-1 番目の区間の右端として 2 回現れます)。実数 xx と α<β\alpha < \beta について max⁡(∣x−α∣,∣x−β∣)=∣x−(α+β)/2∣+(β−α)/2\max(|x - \alpha|, |x - \beta|) = |x - (\alpha+\beta)/2| + (\beta - \alpha)/2 なので、α=(i−1)/N\alpha = (i-1)/N、β=i/N\beta = i/N として主張の式になります。

点に重複がある場合。x(p)<x(p+1)=⋯=x(q)<x(q+1)x_{(p)} < x_{(p+1)} = \cdots = x_{(q)} < x_{(q+1)} とし、共通の値を xx とします。上の議論で実際に現れるのは ∣x−p/N∣|x - p/N|(pp 番目の区間の右端)と ∣x−q/N∣|x - q/N|(qq 番目の区間の左端)です。p<i≤qp < i \le q について (i−1)/N(i-1)/N と i/Ni/N は p/Np/N と q/Nq/N の間にあるので、∣x−(i−1)/N∣|x - (i-1)/N| と ∣x−i/N∣|x - i/N| はこの 2 つの大きいほう以下です。したがって、空の区間に対応する項を最大に加えても値は変わらず、同じ式が成り立ちます。

最後の主張は、第 2 項が非負で、00 になるのがすべての ii で x(i)=(2i−1)/(2N)x_{(i)} = (2i-1)/(2N) のときだけであることから従います。

NN 点の集合としては 1/(2N)1/(2N) が限界です。ただし中点の集合は NN を決めないと作れません。NN を増やしながら点を足していける無限列で、どの NN でも DN∗D_N^* が小さいものを作るのが §5 の主題です。

定義 3.1(一様分布列)↗

[0,1)d[0,1)^d の点列 (xn)n≥1(x_n)_{n\ge1} が一様分布する(uniformly distributed modulo 1)とは、すべての箱 J=∏j[aj,bj)J = \prod_j[a_j, b_j)(0≤aj<bj≤10 \le a_j < b_j \le 1)について

lim⁡N→∞A(J;x1,…,xN)N=∏j=1d(bj−aj)\lim_{N\to\infty}\frac{A(J; x_1, \ldots, x_N)}{N} = \prod_{j=1}^d(b_j - a_j)

が成り立つことをいう。

箱ごとの条件を、関数についての条件に言い換えます。h∈Zdh \in \mathbb{Z}^d と x∈Rdx \in \mathbb{R}^d について h⋅x=∑jhjxjh\cdot x = \sum_jh_jx_j、e(s)=e2πise(s) = e^{2\pi is} と書きます。

定理 3.2(Weyl の判定法)✓

[0,1)d[0,1)^d の点列 (xn)n≥1(x_n)_{n\ge1} について、次は同値である。

  1. (xn)(x_n) は一様分布する。
  2. すべての連続関数 f:[0,1]d→Cf : [0,1]^d \to \mathbb{C} について lim⁡N→∞1N∑n=1Nf(xn)=∫[0,1]df(x) dx\displaystyle\lim_{N\to\infty}\frac1N\sum_{n=1}^Nf(x_n) = \int_{[0,1]^d}f(x)\,dx。
  3. すべての h∈Zd∖{0}h \in \mathbb{Z}^d \setminus \{0\} について lim⁡N→∞1N∑n=1Ne(h⋅xn)=0\displaystyle\lim_{N\to\infty}\frac1N\sum_{n=1}^Ne(h\cdot x_n) = 0。

証明は 1 ⇒ 2 ⇒ 3 ⇒ 1 の順に進みます。1 ⇒ 2 は、連続関数を階段関数ではさんで箱の条件に帰着させます。2 ⇒ 3 は指数関数が連続であることを使うだけです。3 ⇒ 1 では、指数関数の有限和(三角多項式)で周期的な連続関数を近似し、さらに箱を周期的な連続関数ではさみます。一番長いのは 3 ⇒ 1 です。

証明(定理 3.2)

MN(f)=N−1∑n≤Nf(xn)M_N(f) = N^{-1}\sum_{n\le N}f(x_n)、I(f)=∫[0,1]dfI(f) = \int_{[0,1]^d}f と書きます。

1 ⇒ 2. 実部と虚部に分ければよいので、ff は実数値とします。箱の定義関数の有限な一次結合(階段関数)ss については、1 と線形性から MN(s)→I(s)M_N(s) \to I(s) です。ε>0\varepsilon > 0 を取ります。ff はコンパクト集合 [0,1]d[0,1]^d 上で一様連続なので(補題 2.2[Arzelà–Ascoli と Stone–Weierstrass])、自然数 mm を大きく取れば、1 辺 1/m1/m の各立方体 Jc=∏j[cj/m,(cj+1)/m)J_c = \prod_j[c_j/m, (c_j+1)/m)(c∈{0,…,m−1}dc \in \{0, \ldots, m-1\}^d)の閉包の上で ff の上限と下限の差が ε\varepsilon 以下になります。JcJ_c の上で、その閉包での ff の上限(下限)を値とする階段関数を s+s_+(s−s_-)とすると、[0,1)d[0,1)^d 上で s−≤f≤s+s_- \le f \le s_+、s+−s−≤εs_+ - s_- \le \varepsilon です。点はすべて [0,1)d[0,1)^d にあるので

lim sup⁡NMN(f)≤lim⁡NMN(s+)=I(s+)≤I(f)+ε,lim inf⁡NMN(f)≥I(s−)≥I(f)−ε\limsup_N M_N(f) \le \lim_N M_N(s_+) = I(s_+) \le I(f) + \varepsilon, \qquad \liminf_N M_N(f) \ge I(s_-) \ge I(f) - \varepsilon

です。ε\varepsilon は任意なので MN(f)→I(f)M_N(f) \to I(f) です。

2 ⇒ 3. f(x)=e(h⋅x)f(x) = e(h\cdot x) は連続で、h≠0h \ne 0 なら、hj≠0h_j \ne 0 である座標 xjx_j について先に積分すると ∫01e(hjxj) dxj=0\int_0^1e(h_jx_j)\,dx_j = 0 なので I(f)=0I(f) = 0 です。

3 ⇒ 1. まず、Rd\mathbb{R}^d 上の連続関数 gg で各変数について周期 11 をもつものについて MN(g)→I(g)M_N(g) \to I(g) を示します。K={z∈Cd:∣zj∣=1}K = \{z \in \mathbb{C}^d : |z_j| = 1\} はコンパクト Hausdorff 空間で、g(x)=G(e(x1),…,e(xd))g(x) = G(e(x_1), \ldots, e(x_d)) となる KK 上の関数 GG が定まります。x↦(e(xj))jx \mapsto (e(x_j))_j はコンパクト集合 [0,1]d[0,1]^d から KK への連続な全射なので閉写像で、GG は連続です。zh=∏jzjhjz^h = \prod_jz_j^{h_j}(h∈Zdh \in \mathbb{Z}^d)の有限な一次結合の全体は、積で閉じ、定数 1=z01 = z^0 を含み、zh‾=z−h\overline{z^h} = z^{-h} から複素共役で閉じ、座標関数 zjz_j を含むので点を分離します。Stone–Weierstrass の定理(定理 4.7[Arzelà–Ascoli と Stone–Weierstrass])から、ε>0\varepsilon > 0 に対して三角多項式 p(x)=∑h∈Hche(h⋅x)p(x) = \sum_{h\in H}c_he(h\cdot x)(HH は有限集合)で sup⁡x∣g(x)−p(x)∣≤ε\sup_x|g(x) - p(x)| \le \varepsilon となるものがあります。3 から、h≠0h \ne 0 の各項で MN(e(h⋅))→0=I(e(h⋅))M_N(e(h\cdot{})) \to 0 = I(e(h\cdot{}))、h=0h = 0 の項では MN=I=c0M_N = I = c_0 なので MN(p)→I(p)M_N(p) \to I(p) です。∣MN(g)−MN(p)∣≤ε|M_N(g) - M_N(p)| \le \varepsilon、∣I(g)−I(p)∣≤ε|I(g) - I(p)| \le \varepsilon から lim sup⁡N∣MN(g)−I(g)∣≤2ε\limsup_N|M_N(g) - I(g)| \le 2\varepsilon で、ε\varepsilon は任意なので MN(g)→I(g)M_N(g) \to I(g) です。

次に箱 J=∏j[aj,bj)J = \prod_j[a_j, b_j) を周期的な連続関数ではさみます。円周 R/Z\mathbb{R}/\mathbb{Z} 上の距離を dist\mathrm{dist} と書き、0<η<1/20 < \eta < 1/2 について

ψj+(x)=max⁡(0, 1−dist(x,[aj,bj])η),ψj−(x)=min⁡(1, dist(x,(R/Z)∖(aj,bj))η)\psi_j^+(x) = \max\Bigl(0,\ 1 - \frac{\mathrm{dist}(x, [a_j, b_j])}{\eta}\Bigr), \qquad \psi_j^-(x) = \min\Bigl(1,\ \frac{\mathrm{dist}(x, (\mathbb{R}/\mathbb{Z})\setminus(a_j, b_j))}{\eta}\Bigr)

とおきます。どちらも周期 11 の連続関数で、0≤ψj−≤1[aj,bj)≤ψj+≤10 \le \psi_j^- \le \mathbf{1}_{[a_j, b_j)} \le \psi_j^+ \le 1 です。ψj+\psi_j^+ は [aj,bj][a_j, b_j] から距離 η\eta 以上で 00、ψj−\psi_j^- は (aj,bj)(a_j, b_j) の端から距離 η\eta 以上内側で 11 なので、∫01(ψj+−ψj−)≤4η\int_0^1(\psi_j^+ - \psi_j^-) \le 4\eta です(両端の幅 η\eta ずつの範囲で差が 11 以下)。g±(x)=∏jψj±(xj)g^\pm(x) = \prod_j\psi_j^\pm(x_j) とおくと g−≤1J≤g+g^- \le \mathbf{1}_J \le g^+ で、[0,1][0,1] の数 uj,vju_j, v_j について ∣∏juj−∏jvj∣≤∑j∣uj−vj∣|\prod_ju_j - \prod_jv_j| \le \sum_j|u_j - v_j| が成り立つこと(1 因子ずつ取り替える)から

I(g+)−I(g−)=∏j∫01ψj+−∏j∫01ψj−≤4dηI(g^+) - I(g^-) = \prod_j\int_0^1\psi_j^+ - \prod_j\int_0^1\psi_j^- \le 4d\eta

です。前半から MN(g±)→I(g±)M_N(g^\pm) \to I(g^\pm) なので

lim sup⁡NA(J)N≤I(g+)≤I(g−)+4dη≤∏j(bj−aj)+4dη,lim inf⁡NA(J)N≥I(g−)≥∏j(bj−aj)−4dη\limsup_N\frac{A(J)}{N} \le I(g^+) \le I(g^-) + 4d\eta \le \prod_j(b_j - a_j) + 4d\eta, \qquad \liminf_N\frac{A(J)}{N} \ge I(g^-) \ge \prod_j(b_j - a_j) - 4d\eta

です(I(g−)≤vol(J)≤I(g+)I(g^-) \le \mathrm{vol}(J) \le I(g^+) を使いました)。η→0\eta \to 0 として 1 を得ます。

この判定法の利点は、箱という扱いにくい集合の代わりに、指数関数という計算しやすい関数を調べればよいことです。最初の応用が次の系です。

系 3.3(Kronecker 列の一様分布)✓

実数 α1,…,αd\alpha_1, \ldots, \alpha_d について、1,α1,…,αd1, \alpha_1, \ldots, \alpha_d が有理数体上一次独立ならば、xn=({nα1},…,{nαd})x_n = (\{n\alpha_1\}, \ldots, \{n\alpha_d\})({⋅}\{\cdot\} は小数部分)は一様分布する。特に α\alpha が無理数なら ({nα})(\{n\alpha\}) は [0,1)[0,1) で一様分布する。

証明(系 3.3)

h∈Zd∖{0}h \in \mathbb{Z}^d \setminus \{0\} とし、θ=h⋅α=∑jhjαj\theta = h\cdot\alpha = \sum_jh_j\alpha_j とおきます。θ\theta が整数 kk なら k⋅1−∑jhjαj=0k\cdot1 - \sum_jh_j\alpha_j = 0 が自明でない有理係数の一次関係になり、仮定に反します。よって θ∉Z\theta \notin \mathbb{Z} で e(θ)≠1e(\theta) \ne 1 です。e(h⋅xn)=e(nθ)e(h\cdot x_n) = e(n\theta)(小数部分を取っても整数の差しかないため)なので、等比数列の和から

∣1N∑n=1Ne(nθ)∣=1N∣e(θ)(e(Nθ)−1)e(θ)−1∣≤2N∣e(θ)−1∣=1N∣sin⁡πθ∣→0\Bigl|\frac1N\sum_{n=1}^Ne(n\theta)\Bigr| = \frac1N\Bigl|\frac{e(\theta)(e(N\theta) - 1)}{e(\theta) - 1}\Bigr| \le \frac{2}{N|e(\theta) - 1|} = \frac{1}{N|\sin\pi\theta|} \to 0

です。定理 3.2 の 3 が成り立つので、一様分布します。

例 3.4(黄金比の Kronecker 列)

α=(5−1)/2=0.618…\alpha = (\sqrt5 - 1)/2 = 0.618\ldots は無理数なので、xn={nα}x_n = \{n\alpha\} は一様分布します。最初の数項は 0.618,0.236,0.854,0.472,0.090,0.708,0.326,0.9440.618, 0.236, 0.854, 0.472, 0.090, 0.708, 0.326, 0.944 で、新しい点が既にある点の間の広い隙間に入っていきます。無理数回転がエルゴード的であること(定理 3.7[エルゴード定理])は「ほとんどすべての出発点で時間平均が空間平均に一致する」ことを言いますが、系 3.3 は出発点を 00 に固定した列についての主張で、例外集合がありません。黄金比は連分数展開の部分商がすべて 11 で、有理数で最も近似しにくい無理数です。この列は DN∗=O(N−1log⁡N)D_N^* = O(N^{-1}\log N) を満たすことが、連分数を使って証明できます(Kuipers–Niederreiter の第 2 章)。

一様分布は N→∞N \to \infty の定性的な性質です。数値計算に必要なのは、有限の NN での誤差の大きさです。次節で、誤差を DN∗D_N^* で抑えます。

定理 4.1(Koksma の不等式(C¹ 級の場合))✓

f:[0,1]→Rf : [0,1] \to \mathbb{R} を C1C^1 級、P={x1,…,xN}⊂[0,1)P = \{x_1, \ldots, x_N\} \subset [0,1) とする。このとき

1N∑n=1Nf(xn)−∫01f(x) dx=−∫01δP(t)f′(t) dt\frac1N\sum_{n=1}^Nf(x_n) - \int_0^1f(x)\,dx = -\int_0^1\delta_P(t)f'(t)\,dt

(Zaremba の恒等式)が成り立ち、したがって

∣1N∑n=1Nf(xn)−∫01f(x) dx∣≤DN∗(P)∫01∣f′(t)∣ dt.\Bigl|\frac1N\sum_{n=1}^Nf(x_n) - \int_0^1f(x)\,dx\Bigr| \le D_N^*(P)\int_0^1|f'(t)|\,dt.
証明(定理 4.1)

微分積分学の基本定理(定理 5.4[積分の基本定理と定積分])から、各点 xnx_n について

f(xn)=f(1)−∫xn1f′(t) dt=f(1)−∫011[0,t)(xn)f′(t) dtf(x_n) = f(1) - \int_{x_n}^1f'(t)\,dt = f(1) - \int_0^1\mathbf{1}_{[0,t)}(x_n)f'(t)\,dt

です(1[0,t)(xn)=1\mathbf{1}_{[0,t)}(x_n) = 1 は xn<tx_n < t と同値)。nn について平均すると、N−1∑n1[0,t)(xn)=A([0,t);P)/NN^{-1}\sum_n\mathbf{1}_{[0,t)}(x_n) = A([0,t); P)/N なので

1N∑nf(xn)=f(1)−∫01A([0,t);P)Nf′(t) dt\frac1N\sum_nf(x_n) = f(1) - \int_0^1\frac{A([0,t); P)}{N}f'(t)\,dt

です。一方、部分積分(定理 6.2[積分の基本定理と定積分])を u(t)=f(t)u(t) = f(t)、v(t)=tv(t) = t で使うと ∫01f(t) dt=f(1)−∫01tf′(t) dt\int_0^1f(t)\,dt = f(1) - \int_0^1tf'(t)\,dt です。差を取ると −∫01(A([0,t);P)/N−t)f′(t) dt=−∫01δP(t)f′(t) dt-\int_0^1(A([0,t);P)/N - t)f'(t)\,dt = -\int_0^1\delta_P(t)f'(t)\,dt で、恒等式を得ます。不等式は ∣δP(t)∣≤DN∗(P)|\delta_P(t)| \le D_N^*(P) から従います。

誤差の上界は、関数だけで決まる量 ∫∣f′∣\int|f'|(ff の全変動)と、点だけで決まる量 DN∗D_N^* の積です。命題 2.3 と合わせると、中点則の誤差が ∫∣f′∣/(2N)\int|f'|/(2N) 以下であることになります。

多次元では、導関数の役を混合偏導関数が果たします。u⊆{1,…,d}u \subseteq \{1, \ldots, d\} について、uu に属する各変数で 1 回ずつ偏微分したものを ∂uf=(∏j∈u∂/∂xj)f\partial_uf = \bigl(\prod_{j\in u}\partial/\partial x_j\bigr)f と書きます(∂∅f=f\partial_\emptyset f = f)。ff が [0,1]d[0,1]^d を含む開集合の上で CdC^d 級なら、∂uf\partial_uf は微分の順序によらず定まり連続です(定理 9.9[多変数関数の微分と偏微分] を繰り返し使います)。tu=(tj)j∈u∈[0,1]ut_u = (t_j)_{j\in u} \in [0,1]^u について、uu の座標を tjt_j、それ以外の座標を 11 とした [0,1]d[0,1]^d の点を (tu,1)(t_u, 1) と書きます。

次の定義の直観を d=2d = 2 で述べます。このとき uu は {1}\{1\}、{2}\{2\}、{1,2}\{1,2\} の 3 通りで、変動は ∫01∣∂1f(t1,1)∣ dt1+∫01∣∂2f(1,t2)∣ dt2+∬∣∂1∂2f(t1,t2)∣ dt1dt2\int_0^1|\partial_1f(t_1,1)|\,dt_1 + \int_0^1|\partial_2f(1,t_2)|\,dt_2 + \iint|\partial_1\partial_2f(t_1,t_2)|\,dt_1dt_2 です。はじめの 2 項は正方形の辺(x2=1x_2 = 1 の辺と x1=1x_1 = 1 の辺)に沿った関数の変化の大きさ、最後の項は正方形の内部での「ねじれ」の大きさです。1 次元の全変動の多次元版だと考えてください。

定義 4.2(Hardy–Krause の意味の変動(滑らかな関数の場合))↗

[0,1]d[0,1]^d を含む開集合の上で CdC^d 級の関数 ff について

VHK(f)=∑∅≠u⊆{1,…,d}∫[0,1]u∣∂uf(tu,1)∣ dtuV_{\mathrm{HK}}(f) = \sum_{\emptyset\ne u\subseteq\{1,\ldots,d\}}\int_{[0,1]^u}\bigl|\partial_uf(t_u, 1)\bigr|\,dt_u

を ff の Hardy–Krause の意味の変動という。

和は 2d−12^d - 1 項です。uu の項は、ff を面 {xj=1 (j∉u)}\{x_j = 1\ (j \notin u)\} に制限した ∣u∣|u| 変数の関数の、最高階の混合偏導関数の L1L^1 ノルムです。d=1d = 1 では ∫01∣f′∣\int_0^1|f'| です。

補題 4.3(頂点 (1, …, 1) を基点とする展開)✓

ff を [0,1]d[0,1]^d を含む開集合の上で CdC^d 級の関数とする。すべての x∈[0,1]dx \in [0,1]^d について

f(x)=∑u⊆{1,…,d}(−1)∣u∣∫[0,1]u∏j∈u1[0,tj)(xj) ∂uf(tu,1) dtuf(x) = \sum_{u\subseteq\{1,\ldots,d\}}(-1)^{|u|}\int_{[0,1]^u}\prod_{j\in u}\mathbf{1}_{[0,t_j)}(x_j)\,\partial_uf(t_u, 1)\,dt_u

が成り立つ(u=∅u = \emptyset の項は f(1,…,1)f(1, \ldots, 1))。

証明(補題 4.3)

dd についての帰納法で示します。d=1d = 1 は 定理 4.1 の証明のはじめの式 f(x)=f(1)−∫011[0,t)(x)f′(t) dtf(x) = f(1) - \int_0^1\mathbf{1}_{[0,t)}(x)f'(t)\,dt です。

d−1d - 1 変数で成り立つとし、x=(x′,xd)x = (x', x_d) と書きます。x′x' を固定して xdx_d について d=1d = 1 の場合を使うと

f(x′,xd)=f(x′,1)−∫011[0,td)(xd) ∂df(x′,td) dtdf(x', x_d) = f(x', 1) - \int_0^1\mathbf{1}_{[0,t_d)}(x_d)\,\partial_df(x', t_d)\,dt_d

です。x′↦f(x′,1)x' \mapsto f(x', 1) と、各 tdt_d についての x′↦∂df(x′,td)x' \mapsto \partial_df(x', t_d) は、[0,1]d−1[0,1]^{d-1} を含む開集合の上で Cd−1C^{d-1} 級です。帰納法の仮定をこの 2 つに使います。u′⊆{1,…,d−1}u' \subseteq \{1, \ldots, d-1\} について、前者の ∂u′\partial_{u'} を (tu′,1)(t_{u'}, 1) で取った値は ∂u′f(tu′,1)\partial_{u'}f(t_{u'}, 1)(dd 番目の座標も 11)、後者は ∂u′∪{d}f\partial_{u'\cup\{d\}}f を「u′u' の座標が tjt_j、dd 番目が tdt_d、残りが 11」の点で取った値です。したがって

f(x)=∑u′(−1)∣u′∣∫∏j∈u′1[0,tj)(xj) ∂u′f(tu′,1) dtu′+∑u′(−1)∣u′∣+1∫01 ⁣ ⁣∫∏j∈u′∪{d}1[0,tj)(xj) ∂u′∪{d}f(tu′∪{d},1) dtu′ dtdf(x) = \sum_{u'}(-1)^{|u'|}\int\prod_{j\in u'}\mathbf{1}_{[0,t_j)}(x_j)\,\partial_{u'}f(t_{u'}, 1)\,dt_{u'} + \sum_{u'}(-1)^{|u'|+1}\int_0^1\!\!\int\prod_{j\in u'\cup\{d\}}\mathbf{1}_{[0,t_j)}(x_j)\,\partial_{u'\cup\{d\}}f(t_{u'\cup\{d\}}, 1)\,dt_{u'}\,dt_d

です。第 2 の和の被積分関数は立方体の上の有界な可測関数なので、累次積分は [0,1]u′∪{d}[0,1]^{u'\cup\{d\}} 上の重積分に等しくなります(定理 3.4[直積測度と Fubini–Tonelli の定理])。第 1 の和は d∉ud \notin u である u=u′u = u' の項、第 2 の和は d∈ud \in u である u=u′∪{d}u = u'\cup\{d\} の項で、合わせて {1,…,d}\{1, \ldots, d\} のすべての部分集合にわたる和になります。

定理 4.4(Koksma–Hlawka の不等式)✓

ff を [0,1]d[0,1]^d を含む開集合の上で CdC^d 級の実数値関数、P={x1,…,xN}⊂[0,1)dP = \{x_1, \ldots, x_N\} \subset [0,1)^d とする。このとき

1N∑n=1Nf(xn)−∫[0,1]df(x) dx=∑∅≠u⊆{1,…,d}(−1)∣u∣∫[0,1]uδP(tu,1) ∂uf(tu,1) dtu\frac1N\sum_{n=1}^Nf(x_n) - \int_{[0,1]^d}f(x)\,dx = \sum_{\emptyset\ne u\subseteq\{1,\ldots,d\}}(-1)^{|u|}\int_{[0,1]^u}\delta_P(t_u, 1)\,\partial_uf(t_u, 1)\,dt_u

(Hlawka–Zaremba の恒等式)が成り立ち、したがって

∣1N∑n=1Nf(xn)−∫[0,1]df(x) dx∣≤VHK(f) DN∗(P).\Bigl|\frac1N\sum_{n=1}^Nf(x_n) - \int_{[0,1]^d}f(x)\,dx\Bigr| \le V_{\mathrm{HK}}(f)\,D_N^*(P).
証明(定理 4.4)

補題 4.3 の式で x=xnx = x_n とし、nn について平均します。xn∈[0,1)dx_n \in [0,1)^d なので、j∉uj \notin u の座標は自動的に xn,j<1x_{n,j} < 1 を満たし、

1N∑n=1N∏j∈u1[0,tj)(xn,j)=A([0,(tu,1));P)N\frac1N\sum_{n=1}^N\prod_{j\in u}\mathbf{1}_{[0,t_j)}(x_{n,j}) = \frac{A([0, (t_u, 1)); P)}{N}

です。次に同じ式を x∈[0,1]dx \in [0,1]^d について積分します。右辺の各項は有界な可測関数の積分なので、Fubini の定理(定理 3.4[直積測度と Fubini–Tonelli の定理])で xx についての積分を先に行うと、∫[0,1]d∏j∈u1[0,tj)(xj) dx=∏j∈utj\int_{[0,1]^d}\prod_{j\in u}\mathbf{1}_{[0,t_j)}(x_j)\,dx = \prod_{j\in u}t_j で、これは箱 [0,(tu,1))[0, (t_u, 1)) の体積です。2 つの式の差を取ると、u=∅u = \emptyset の項 f(1,…,1)f(1, \ldots, 1) は打ち消し合い、u≠∅u \ne \emptyset の項には

A([0,(tu,1));P)N−∏j∈utj=δP(tu,1)\frac{A([0,(t_u,1));P)}{N} - \prod_{j\in u}t_j = \delta_P(t_u, 1)

が現れて、恒等式を得ます。不等式は ∣δP(tu,1)∣≤DN∗(P)|\delta_P(t_u, 1)| \le D_N^*(P) と 定義 4.2 から従います。

注意 4.5(有界変動関数への拡張と、不等式の読み方)

不等式は、Hardy–Krause の意味で有界変動な関数(滑らかとは限らない)について同じ形で成り立ちます。そのときの VHKV_{\mathrm{HK}} は、箱への分割についての交代和の上限(Vitali の変動)を各面について足したものです。この一般の場合の証明は Riemann–Stieltjes 積分についての部分積分によるもので、Kuipers–Niederreiter の第 2 章にあります。この記事では CdC^d 級の場合だけを定理にしました。

実用上の注意が 2 つあります。第 1 に、座標軸に平行でない境界をもつ集合の定義関数(d≥2d \ge 2)や、max⁡(x1+x2+x3−1,0)\max(x_1 + x_2 + x_3 - 1, 0) のような座標軸に平行でない折れ目のある関数(d≥3d \ge 3)は VHK=∞V_{\mathrm{HK}} = \infty になり、この不等式は何も言いません(準 Monte Carlo 法が使えないという意味ではなく、保証がないという意味です)。折れ目のある関数では、1 辺 hh の小さな立方体のうち折れ目と交わる約 h−(d−1)h^{-(d-1)} 個のそれぞれで交代和が hh の大きさになるので、変動は h−(d−2)h^{-(d-2)} の大きさで、d=2d = 2 では有限にとどまり、d≥3d \ge 3 で発散します。第 2 に、上界は最悪の場合の評価で、個々の ff では大きく過大です。VHKV_{\mathrm{HK}} も DN∗D_N^* も計算が難しいので、この不等式は誤差の見積もりには使わず、収束の次数の根拠として使います。実際の誤差の見積もりは §7 の無作為化で行います。

定義 5.1(逆進関数・van der Corput 列・Halton 列・Hammersley 点集合)↗

b≥2b \ge 2 を整数とする。非負整数 nn の bb 進展開を n=∑k≥0ak(n)bkn = \sum_{k\ge0}a_k(n)b^k(ak(n)∈{0,…,b−1}a_k(n) \in \{0, \ldots, b-1\}、有限個を除いて 00)とするとき

φb(n)=∑k≥0ak(n) b−k−1∈[0,1)\varphi_b(n) = \sum_{k\ge0}a_k(n)\,b^{-k-1} \in [0, 1)

を基数 bb の逆進関数(radical inverse)という。bb 進展開の桁を小数点について折り返したものである。

  • 列 (φb(n))n≥0(\varphi_b(n))_{n\ge0} を基数 bb の van der Corput 列という。
  • 整数 b1,…,bd≥2b_1, \ldots, b_d \ge 2 について、[0,1)d[0,1)^d の列 xn=(φb1(n),…,φbd(n))x_n = (\varphi_{b_1}(n), \ldots, \varphi_{b_d}(n))(n≥0n \ge 0)を Halton 列という。
  • N≥1N \ge 1 について、[0,1)d[0,1)^d の NN 点 (n/N,φb1(n),…,φbd−1(n))(n/N, \varphi_{b_1}(n), \ldots, \varphi_{b_{d-1}}(n))(n=0,…,N−1n = 0, \ldots, N-1)を Hammersley 点集合という。

以下、これらの列の「最初の NN 項」は n=0,…,N−1n = 0, \ldots, N-1 の項を指す。

基数 22 では 0,12,14,34,18,58,38,78,…0, \tfrac12, \tfrac14, \tfrac34, \tfrac18, \tfrac58, \tfrac38, \tfrac78, \ldots です。区間を半分、そのまた半分と、粗いほうから順に埋めていきます。この「どの段階で止めても均等」という性質を、次の補題が表します。c b−mc\,b^{-m} を左端とする長さ b−mb^{-m} の区間 [c b−m,(c+1)b−m)[c\,b^{-m}, (c+1)b^{-m})(0≤c<bm0 \le c < b^m)を、基数 bb の階数 mm の基本区間と呼びます。

補題 5.2(基本区間に入る条件は合同式)✓

b≥2b \ge 2、m≥0m \ge 0 とする。{0,…,bm−1}\{0, \ldots, b^m - 1\} からそれ自身への全単射 c↦r(c)c \mapsto r(c) があって、すべての n≥0n \ge 0 と 0≤c<bm0 \le c < b^m について

φb(n)∈[c b−m,(c+1)b−m)  ⟺  n≡r(c)(modbm)\varphi_b(n) \in [c\,b^{-m}, (c+1)b^{-m}) \iff n \equiv r(c) \pmod{b^m}

が成り立つ。

証明(補題 5.2)

n=r+bmqn = r + b^mq(0≤r<bm0 \le r < b^m、q≥0q \ge 0)と書きます。nn の bb 進展開の下位 mm 桁は rr の桁 a0,…,am−1a_0, \ldots, a_{m-1}、それより上は qq の桁なので

φb(n)=∑k=0m−1akb−k−1+b−mφb(q)=ρ(r)bm+φb(q)bm,ρ(r)=∑k=0m−1akbm−1−k\varphi_b(n) = \sum_{k=0}^{m-1}a_kb^{-k-1} + b^{-m}\varphi_b(q) = \frac{\rho(r)}{b^m} + \frac{\varphi_b(q)}{b^m}, \qquad \rho(r) = \sum_{k=0}^{m-1}a_kb^{m-1-k}

です。ρ(r)\rho(r) は rr の mm 桁を逆順に読んだ整数で、ρ\rho は {0,…,bm−1}\{0, \ldots, b^m-1\} の全単射です(2 回行うと元に戻ります)。φb(q)\varphi_b(q) は有限個の桁の和なので 0≤φb(q)<∑k≥0(b−1)b−k−1=10 \le \varphi_b(q) < \sum_{k\ge0}(b-1)b^{-k-1} = 1 です。したがって φb(n)∈[ρ(r)b−m,(ρ(r)+1)b−m)\varphi_b(n) \in [\rho(r)b^{-m}, (\rho(r)+1)b^{-m}) で、φb(n)\varphi_b(n) が cc 番目の基本区間に入ることは ρ(r)=c\rho(r) = c、すなわち n≡ρ−1(c)(modbm)n \equiv \rho^{-1}(c) \pmod{b^m} と同値です。r(c)=ρ−1(c)r(c) = \rho^{-1}(c) とすればよい。

定理 5.3(van der Corput 列の食い違い量)✓

基数 b≥2b \ge 2 の van der Corput 列の最初の NN 項(N≥1N \ge 1)について

N DN∗≤(b−1)(⌊log⁡bN⌋+1)≤(b−1)log⁡Nlog⁡b+b−1.N\,D_N^* \le (b-1)\bigl(\lfloor\log_bN\rfloor + 1\bigr) \le (b-1)\frac{\log N}{\log b} + b - 1.
証明(定理 5.3)

ブロックの評価。 m≥0m \ge 0、k≥0k \ge 0 とし、連続する bmb^m 個の添字 n=kbm,…,(k+1)bm−1n = kb^m, \ldots, (k+1)b^m - 1 の項からなる点集合を QQ とします。この添字は bmb^m を法とする各剰余類をちょうど 1 回ずつ通るので、補題 5.2 から、階数 mm の各基本区間に QQ の点がちょうど 1 個ずつ入ります。t∈[0,1]t \in [0,1] とし c=⌊tbm⌋c = \lfloor tb^m\rfloor とおくと、[0,t)[0, t) は cc 個の基本区間 [0,cb−m)[0, cb^{-m}) を含み、c+1c+1 個の基本区間 [0,(c+1)b−m)[0, (c+1)b^{-m})(c=bmc = b^m のときは [0,1)[0,1))に含まれます。よって c≤A([0,t);Q)≤c+1c \le A([0,t); Q) \le c+1 で、c≤tbm<c+1c \le tb^m < c + 1 と合わせて

∣A([0,t);Q)−bmt∣≤1\bigl|A([0,t); Q) - b^mt\bigr| \le 1

です。

分割。 L=⌊log⁡bN⌋L = \lfloor\log_bN\rfloor とし、N=∑m=0LambmN = \sum_{m=0}^La_mb^m を bb 進展開とします。添字の集合 {0,…,N−1}\{0, \ldots, N-1\} を、先頭から順に、長さ bLb^L のブロック aLa_L 個、長さ bL−1b^{L-1} のブロック aL−1a_{L-1} 個、…、長さ 11 のブロック a0a_0 個に分けます。長さ bmb^m のブロックが始まる位置は ∑i>maibi+jbm\sum_{i>m}a_ib^i + jb^m(0≤j<am0 \le j < a_m)で、bmb^m の倍数です。したがって各ブロックは上の QQ の形で、ブロックごとに ∣A([0,t);Q)−bmt∣≤1|A([0,t); Q) - b^mt| \le 1 です。全部で ∑mam≤(b−1)(L+1)\sum_ma_m \le (b-1)(L+1) 個のブロックについて足すと

∣A([0,t);PN)−Nt∣≤(b−1)(L+1)\bigl|A([0,t); P_N) - Nt\bigr| \le (b-1)(L+1)

がすべての tt で成り立ちます。NN で割って上限を取れば主張の式です。第 2 の不等式は ⌊log⁡bN⌋≤log⁡N/log⁡b\lfloor\log_bN\rfloor \le \log N/\log b です。

独立な乱数の DN∗∼N−1/2D_N^* \sim N^{-1/2} に対し、O(N−1log⁡N)O(N^{-1}\log N) です。定理 4.1 と合わせると、C1C^1 級の関数の積分誤差が O(N−1log⁡N)O(N^{-1}\log N) になります。

多次元では、座標ごとに異なる基数を使います。基数が互いに素であることが、座標どうしの「独立性」の代わりをします。

定理 5.4(Halton 列の食い違い量)✓

b1,…,bd≥2b_1, \ldots, b_d \ge 2 をどの 2 つも互いに素な整数とする。基数 b1,…,bdb_1, \ldots, b_d の Halton 列の最初の NN 項(N≥2N \ge 2)について

N DN∗≤∏j=1d((bj−1)⌈log⁡bjN⌉+1).N\,D_N^* \le \prod_{j=1}^d\Bigl((b_j - 1)\lceil\log_{b_j}N\rceil + 1\Bigr).

特に DN∗=O(N−1(log⁡N)d)D_N^* = O(N^{-1}(\log N)^d) である。

証明の方針は van der Corput 列と同じ数え方です。[0,t)[0, t) を、基本区間の積である箱と、はみ出す小さな箱に分け、どの箱でも点の個数が体積の NN 倍から高々 11 しかずれないことを示します。箱の数が上界の右辺の積になります。基数が互いに素であることは、各座標の条件をまとめて 1 つの合同式に直す中国剰余定理を使うために要ります。

証明(定理 5.4)

最初の NN 項を PNP_N と書きます。

基本的な箱。 各 jj について基数 bjb_j の階数 mjm_j の基本区間 EjE_j を取り、E=∏jEjE = \prod_jE_j、Q=∏jbjmjQ = \prod_jb_j^{m_j} とします(vol(E)=1/Q\mathrm{vol}(E) = 1/Q)。補題 5.2 から、xn∈Ex_n \in E は連立合同式 n≡rj(modbjmj)n \equiv r_j \pmod{b_j^{m_j}}(j=1,…,dj = 1, \ldots, d)と同値です。bjb_j がどの 2 つも互いに素なので、法 bjmjb_j^{m_j} もそうです。中国剰余定理(系 6.3[整除と素因数分解])から、この連立合同式は QQ を法としてただ 1 つの解をもちます。したがって、連続する QQ 個の整数の中に xn∈Ex_n \in E となる nn がちょうど 1 個あり、{0,…,N−1}\{0, \ldots, N-1\} の中には ⌊N/Q⌋\lfloor N/Q\rfloor 個または ⌈N/Q⌉\lceil N/Q\rceil 個あります。よって

∣A(E;PN)−N vol(E)∣≤1,Q≥N ならば A(E;PN)≤1.\bigl|A(E; P_N) - N\,\mathrm{vol}(E)\bigr| \le 1, \qquad Q \ge N \text{ ならば } A(E; P_N) \le 1.

区間の分解。 t∈[0,1]dt \in [0,1]^d とし、Lj=⌈log⁡bjN⌉L_j = \lceil\log_{b_j}N\rceil(bjLj≥Nb_j^{L_j} \ge N)とおきます。各 jj で、cj=⌊tjbjLj⌋c_j = \lfloor t_jb_j^{L_j}\rfloor、sj=cjbj−Lj≤tjs_j = c_jb_j^{-L_j} \le t_j とします。cjc_j を cj=∑k=0LjτkbjLj−kc_j = \sum_{k=0}^{L_j}\tau_kb_j^{L_j-k}(τ0∈{0,1}\tau_0 \in \{0, 1\}、k≥1k \ge 1 で τk∈{0,…,bj−1}\tau_k \in \{0, \ldots, b_j-1\}。τ0=1\tau_0 = 1 は cj=bjLjc_j = b_j^{L_j} のときだけで、そのとき他の桁は 00)と展開すると、[0,sj)[0, s_j) は左から順に、階数 kk の基本区間 τk\tau_k 個(k=0,1,…,Ljk = 0, 1, \ldots, L_j)の交わりのない和に分かれます。階数 kk の区間の左端は ∑i<kτibj−i+abj−k\sum_{i<k}\tau_ib_j^{-i} + ab_j^{-k}(0≤a<τk0 \le a < \tau_k)で bj−kb_j^{-k} の倍数なので、確かに基本区間です。個数は (bj−1)Lj(b_j - 1)L_j 以下です(τ0=1\tau_0 = 1 のときは 11 個)。残りの [sj,tj)[s_j, t_j) は長さが bj−Ljb_j^{-L_j} 未満で、階数 LjL_j の 1 つの基本区間 RjR_j に含まれます(sj=tjs_j = t_j なら空)。こうして [0,tj)[0, t_j) は、高々 (bj−1)Lj+1(b_j-1)L_j + 1 個の交わりのない区間(基本区間と、高々 1 個の「端切れ」[sj,tj)[s_j, t_j))に分かれます。

箱の分解。 各座標の区間の積を取ると、[0,t)[0, t) は高々 ∏j((bj−1)Lj+1)\prod_j((b_j-1)L_j + 1) 個の交わりのない箱 BB に分かれます。各 BB で ∣A(B;PN)−N vol(B)∣≤1|A(B; P_N) - N\,\mathrm{vol}(B)| \le 1 を示します。

  • BB の因子がすべて基本区間のとき。BB は基本的な箱なので、はじめの評価そのものです。
  • BB の因子に端切れがあるとき。端切れを、それを含む階数 LjL_j の基本区間 RjR_j で置き換えた箱を E′E' とすると B⊆E′B \subseteq E' で、E′E' は基本的な箱です。端切れのある座標 j0j_0 について Q′≥bj0Lj0≥NQ' \ge b_{j_0}^{L_{j_0}} \ge N なので A(B;PN)≤A(E′;PN)≤1A(B; P_N) \le A(E'; P_N) \le 1、また N vol(B)≤N vol(E′)=N/Q′≤1N\,\mathrm{vol}(B) \le N\,\mathrm{vol}(E') = N/Q' \le 1 です。A(B;PN)A(B; P_N) と N vol(B)N\,\mathrm{vol}(B) はどちらも [0,1][0,1] にあるので、差は 11 以下です。

点の個数も体積も交わりのない和について加法的なので、

∣A([0,t);PN)−N∏jtj∣≤∑B∣A(B;PN)−N vol(B)∣≤∏j=1d((bj−1)Lj+1)\bigl|A([0,t); P_N) - N\textstyle\prod_jt_j\bigr| \le \sum_B\bigl|A(B; P_N) - N\,\mathrm{vol}(B)\bigr| \le \prod_{j=1}^d\bigl((b_j-1)L_j + 1\bigr)

です。tt について上限を取れば主張を得ます。

定理 4.4 と合わせると、CdC^d 級の関数の積分誤差は O(N−1(log⁡N)d)O(N^{-1}(\log N)^d) です。基数は、小さいほうから dd 個の素数 2,3,5,…2, 3, 5, \ldots を使うのが普通です。Hammersley 点集合は、第 1 座標を n/Nn/N にすることで対数の指数が 1 つ下がり、DN∗=O(N−1(log⁡N)d−1)D_N^* = O(N^{-1}(\log N)^{d-1}) になります(証明は上と同じ数え方です。NN を先に決める必要があります)。

注意 5.5(下界と、ほかの構成)

食い違い量はどこまで小さくできるか。d≥2d \ge 2 の任意の NN 点集合について DN∗≥cd N−1(log⁡N)(d−1)/2D_N^* \ge c_d\,N^{-1}(\log N)^{(d-1)/2} が成り立ちます(K. F. Roth, Mathematika 1 (1954))。d=2d = 2 では DN∗≥c N−1log⁡ND_N^* \ge c\,N^{-1}\log N、したがって 1 次元の無限列では無限個の NN で DN∗≥c N−1log⁡ND_N^* \ge c\,N^{-1}\log N です(W. M. Schmidt, Acta Arith. 21 (1972))。van der Corput 列は 1 次元の列として次数が最良です。d≥3d \ge 3 の点集合で N−1(log⁡N)d−1N^{-1}(\log N)^{d-1} が最良かどうかは未解決です。これらの下界の証明は直交関数系を使う本格的な議論で、この記事では定理にしません。

Halton 列の定数 ∏j(bj−1)/log⁡bj\prod_j(b_j - 1)/\log b_j は次元とともに急激に大きくなります。定数が次元について良い構成に、基数 22 の Sobol’ 列と、その一般化である (t,m,s)(t, m, s) ネット・(t,s)(t, s) 列(Niederreiter の本の第 4 章)があります。これらに桁ごとの無作為な置換を施す Owen のスクランブルは、滑らかな被積分関数に対して分散を O(N−3(log⁡N)d−1)O(N^{-3}(\log N)^{d-1}) まで下げます(A. B. Owen, Ann. Statist. 25 (1997))。

例 5.6(大きな基数の Halton 列の相関)

基数 1717 と 1919 の Halton 列の 2 次元の射影を考えます。n<17n < 17 では φ17(n)=n/17\varphi_{17}(n) = n/17、φ19(n)=n/19\varphi_{19}(n) = n/19 なので、最初の 17 点はすべて直線 x2=(17/19)x1x_2 = (17/19)x_1 の上に並びます。箱 J=[0,1/2)×[1/2,1)J = [0, 1/2) \times [1/2, 1) に入るには n/19≥1/2n/19 \ge 1/2、すなわち n≥10n \ge 10 が要りますが、そのとき n/17≥10/17>1/2n/17 \ge 10/17 > 1/2 なので、JJ には 1 点も入りません。体積は 1/41/4 なので D17≥1/4D_{17} \ge 1/4 です。定理 5.4 の上界は N=17N = 17 で (16+1)(18+1)/17=19(16 + 1)(18 + 1)/17 = 19 となり、何も言っていません。上界が意味をもつのは NN が 17×19=32317 \times 19 = 323 よりずっと大きくなってからです。

高次元の Halton 列では、後ろのほうの座標(大きな素数を基数とする座標)の組にこの種の相関が残ります。対策は、桁に置換を施すこと(スクランブルした Halton 列)や、Sobol’ 列のように全座標で基数 22 を使う構成に替えることです。「準 Monte Carlo 法は高次元で効かない」と言われるときの原因の 1 つがこれで、もう 1 つの面は §7.2 で扱います。

独立な一様乱数Halton 列(基数 2, 3)Fibonacci 格子 g = (1, 55)
[0,1)² の 89 点。左から、独立な一様乱数(種 20261008)、基数 2・3 の Halton 列の最初の 89 項、N = 89・生成ベクトル (1, 55) の Fibonacci 格子。乱数には塊と隙間があり、Halton 列と格子では点が互いを避けて並ぶ。

Halton 列の誤差 O(N−1(log⁡N)d)O(N^{-1}(\log N)^d) は、関数が CdC^d 級より滑らかでも改善しません。周期的で滑らかな関数に対しては、滑らかさに応じて速く収束する点集合があります。1 次元の周期関数に対する台形則が代数的な次数を超えて速く収束すること(定理 3.2[数値積分 II])の多次元版です。

定義 6.1(階数 1 の格子則・双対格子)↗

N≥1N \ge 1、g=(g1,…,gd)∈Zdg = (g_1, \ldots, g_d) \in \mathbb{Z}^d とする。点集合 xn={ng/N}=({ng1/N},…,{ngd/N})x_n = \{ng/N\} = (\{ng_1/N\}, \ldots, \{ng_d/N\})(n=0,…,N−1n = 0, \ldots, N-1)による求積

QN(f)=1N∑n=0N−1f({ngN})Q_N(f) = \frac1N\sum_{n=0}^{N-1}f\Bigl(\Bigl\{\frac{ng}{N}\Bigr\}\Bigr)

を、生成ベクトル gg の階数 1 の格子則という。

L⊥=L⊥(g,N)={h∈Zd:h⋅g≡0(modN)}L^\perp = L^\perp(g, N) = \{h \in \mathbb{Z}^d : h\cdot g \equiv 0 \pmod N\}

をその双対格子という。

d=1d = 1、g=1g = 1 は等間隔の点での平均(周期関数に対する台形則)です。d≥2d \ge 2 では、NN 点が 1 本の「巻きついた直線」の上に等間隔に並びます。双対格子の直観は次の定理の 1 で分かります。格子則の誤差は、双対格子の点 hh に対応する Fourier 係数だけの和で決まるので、双対格子に 00 に近い点(r(h)r(h) の小さい点)が無いほど誤差は小さくなります。生成ベクトル gg を選ぶことは、この双対格子の形を選ぶことです。関数は Rd\mathbb{R}^d 上で各変数について周期 11 とし、Fourier 係数を f^(h)=∫[0,1]df(x)e(−h⋅x) dx\hat f(h) = \int_{[0,1]^d}f(x)e(-h\cdot x)\,dx(h∈Zdh \in \mathbb{Z}^d)と書きます。r(h)=∏j=1dmax⁡(1,∣hj∣)r(h) = \prod_{j=1}^d\max(1, |h_j|) とおきます。

補題 6.2(指標の直交性)✓

整数 kk と N≥1N \ge 1 について、1N∑n=0N−1e(nkN)\dfrac1N\displaystyle\sum_{n=0}^{N-1}e\Bigl(\frac{nk}{N}\Bigr) は N∣kN \mid k のとき 11、そうでないとき 00 である。

証明(補題 6.2)

N∣kN \mid k なら各項が 11 です。そうでなければ w=e(k/N)≠1w = e(k/N) \ne 1、wN=e(k)=1w^N = e(k) = 1 で、等比数列の和は (wN−1)/(w−1)=0(w^N - 1)/(w - 1) = 0 です。

定理 6.3(格子則の誤差と、良い生成ベクトルの存在)✓

定義 6.1 の記号で次が成り立つ。

  1. ff が各変数について周期 11 の連続関数で ∑h∈Zd∣f^(h)∣<∞\sum_{h\in\mathbb{Z}^d}|\hat f(h)| < \infty ならば QN(f)−∫[0,1]df(x) dx=∑h∈L⊥∖{0}f^(h).Q_N(f) - \int_{[0,1]^d}f(x)\,dx = \sum_{h\in L^\perp\setminus\{0\}}\hat f(h).
  2. α>1\alpha > 1、C>0C > 0 とし、周期 11 の連続関数で ∣f^(h)∣≤C r(h)−α|\hat f(h)| \le C\,r(h)^{-\alpha}(すべての hh)を満たすものの全体を Eα(C)E_\alpha(C) とする。このとき sup⁡f∈Eα(C)∣QN(f)−∫[0,1]df∣=C Pα(g,N),Pα(g,N)=∑h∈L⊥∖{0}r(h)−α.\sup_{f\in E_\alpha(C)}\Bigl|Q_N(f) - \int_{[0,1]^d}f\Bigr| = C\,P_\alpha(g, N), \qquad P_\alpha(g, N) = \sum_{h\in L^\perp\setminus\{0\}}r(h)^{-\alpha}.
  3. NN を素数で N≥3N \ge 3 かつ 1+1/ln⁡N≤α1 + 1/\ln N \le \alpha を満たすものとする。このとき g∈{0,1,…,N−1}dg \in \{0, 1, \ldots, N-1\}^d で Pα(g,N)≤(2e)α (3+2ln⁡N)αdNαP_\alpha(g, N) \le (2e)^\alpha\,\frac{(3 + 2\ln N)^{\alpha d}}{N^\alpha} を満たすものが存在する。

1 と 2 は Fourier 級数と指標の直交性(補題 6.2)から直接出ます。3 は「良い gg を具体的に作る」のではなく、「すべての gg について PβP_\beta を平均すると十分小さい。最小値は平均以下なので、平均以下の gg が少なくとも 1 つある」という論法で存在を示します。まず β\beta で平均を評価し、次に不等式で β\beta から α\alpha に移ります。

証明(定理 6.3)

1. S(x)=∑hf^(h)e(h⋅x)S(x) = \sum_h\hat f(h)e(h\cdot x) とおきます。∣f^(h)e(h⋅x)∣=∣f^(h)∣|\hat f(h)e(h\cdot x)| = |\hat f(h)| の和が有限なので、この級数は一様に絶対収束し、SS は周期 11 の連続関数です。一様収束する級数は項別に積分できるので、SS の Fourier 係数は f^(h)\hat f(h) です。f−Sf - S は Fourier 係数がすべて 00 の連続関数なので、f=Sf = S です(命題 7.1[フーリエ級数]。変数を θ=2πx\theta = 2\pi x と取り替えて使います)。xn={ng/N}x_n = \{ng/N\} を代入すると e(h⋅xn)=e(n(h⋅g)/N)e(h\cdot x_n) = e(n(h\cdot g)/N) で、絶対収束から和の順序を入れ替えて

QN(f)=∑h∈Zdf^(h)⋅1N∑n=0N−1e(n(h⋅g)N)=∑h∈L⊥f^(h)Q_N(f) = \sum_{h\in\mathbb{Z}^d}\hat f(h)\cdot\frac1N\sum_{n=0}^{N-1}e\Bigl(\frac{n(h\cdot g)}{N}\Bigr) = \sum_{h\in L^\perp}\hat f(h)

です(補題 6.2 を k=h⋅gk = h\cdot g で使いました)。h=0h = 0 の項は f^(0)=∫f\hat f(0) = \int f です。

2. ∑h∈Zdr(h)−α=∏j=1d∑hj∈Zmax⁡(1,∣hj∣)−α=(1+2ζ(α))d<∞\sum_{h\in\mathbb{Z}^d}r(h)^{-\alpha} = \prod_{j=1}^d\sum_{h_j\in\mathbb{Z}}\max(1, |h_j|)^{-\alpha} = (1 + 2\zeta(\alpha))^d < \infty です(ζ(α)=∑k≥1k−α\zeta(\alpha) = \sum_{k\ge1}k^{-\alpha})。したがって f∈Eα(C)f \in E_\alpha(C) は 1 の仮定を満たし、∣QN(f)−∫f∣≤∑h∈L⊥∖{0}∣f^(h)∣≤C Pα(g,N)|Q_N(f) - \int f| \le \sum_{h\in L^\perp\setminus\{0\}}|\hat f(h)| \le C\,P_\alpha(g, N) です。等号は f∗(x)=C∑hr(h)−αe(h⋅x)f^*(x) = C\sum_hr(h)^{-\alpha}e(h\cdot x) で成り立ちます。この級数は一様収束するので f∗f^* は周期 11 の連続関数で、Fourier 係数は C r(h)−αC\,r(h)^{-\alpha} です。f∗∈Eα(C)f^* \in E_\alpha(C) で、1 から誤差はちょうど C Pα(g,N)C\,P_\alpha(g, N) です。

3. まず 1<β≤α1 < \beta \le \alpha である β\beta について、gg を {0,…,N−1}d\{0, \ldots, N-1\}^d の全体で動かした Pβ(g,N)P_\beta(g, N) の平均 MβM_\beta を評価します。

Mβ=1Nd∑g∑h≠01[h⋅g≡0] r(h)−β=∑h≠0r(h)−β⋅#{g:h⋅g≡0(modN)}NdM_\beta = \frac{1}{N^d}\sum_g\sum_{h\ne0}\mathbf{1}[h\cdot g \equiv 0]\,r(h)^{-\beta} = \sum_{h\ne0}r(h)^{-\beta}\cdot\frac{\#\{g : h\cdot g \equiv 0 \pmod N\}}{N^d}

です。hh の成分のうちに NN で割り切れないもの hjh_{j} があるとき、NN が素数なので hjh_j は NN を法として逆元をもち、他の成分 gig_i(i≠ji \ne j)を任意に決めると gjg_j が NN を法としてただ 1 つ決まります。解は Nd−1N^{d-1} 個で、割合は 1/N1/N です。すべての成分が NN で割り切れるときは、すべての gg が解で、割合は 11 です。後者の hh は h=Nkh = Nk(k∈Zd∖{0}k \in \mathbb{Z}^d\setminus\{0\})と書け、kj≠0k_j \ne 0 の成分で max⁡(1,N∣kj∣)=N∣kj∣\max(1, N|k_j|) = N|k_j|、その他の成分で 11 なので r(Nk)≥N r(k)r(Nk) \ge N\,r(k) です。よって

Mβ≤1N∑h≠0r(h)−β+∑k≠0(N r(k))−β≤2N(1+2ζ(β))dM_\beta \le \frac1N\sum_{h\ne0}r(h)^{-\beta} + \sum_{k\ne0}\bigl(N\,r(k)\bigr)^{-\beta} \le \frac{2}{N}\bigl(1 + 2\zeta(\beta)\bigr)^d

です(N−β≤N−1N^{-\beta} \le N^{-1})。最小値は平均以下なので、Pβ(g,N)≤MβP_\beta(g, N) \le M_\beta を満たす gg があります。

次に β\beta から α\alpha へ移ります。非負の数 aia_i と p≥1p \ge 1 について ∑iaip≤(∑iai)p\sum_ia_i^p \le (\sum_ia_i)^p です(S=∑iai>0S = \sum_ia_i > 0 として ai/S≤1a_i/S \le 1 から (ai/S)p≤ai/S(a_i/S)^p \le a_i/S を足します)。ah=r(h)−βa_h = r(h)^{-\beta}、p=α/βp = \alpha/\beta とすると、同じ gg について

Pα(g,N)=∑h∈L⊥∖{0}(r(h)−β)α/β≤Pβ(g,N)α/β≤Mβα/βP_\alpha(g, N) = \sum_{h\in L^\perp\setminus\{0\}}\bigl(r(h)^{-\beta}\bigr)^{\alpha/\beta} \le P_\beta(g, N)^{\alpha/\beta} \le M_\beta^{\alpha/\beta}

です。ここで β=1+1/ln⁡N\beta = 1 + 1/\ln N と選びます(仮定から β≤α\beta \le \alpha)。ζ(β)≤1+∫1∞x−βdx=1+1/(β−1)=1+ln⁡N\zeta(\beta) \le 1 + \int_1^\infty x^{-\beta}dx = 1 + 1/(\beta - 1) = 1 + \ln N なので

Mβ≤y,y=2(3+2ln⁡N)dN≥1NM_\beta \le y, \qquad y = \frac{2(3 + 2\ln N)^d}{N} \ge \frac1N

です。yα/β≤eαyαy^{\alpha/\beta} \le e^\alpha y^\alpha を示します。y≥1y \ge 1 なら α/β≤α\alpha/\beta \le \alpha から yα/β≤yαy^{\alpha/\beta} \le y^\alpha です。y<1y < 1 なら yα/β=yα⋅y−α(1−1/β)y^{\alpha/\beta} = y^\alpha\cdot y^{-\alpha(1 - 1/\beta)} で、1−1/β=(β−1)/β≤β−1=1/ln⁡N1 - 1/\beta = (\beta-1)/\beta \le \beta - 1 = 1/\ln N と y≥1/Ny \ge 1/N から y−α(1−1/β)≤Nα/ln⁡N=eαy^{-\alpha(1-1/\beta)} \le N^{\alpha/\ln N} = e^\alpha です。以上から

Pα(g,N)≤eαyα=(2e)α(3+2ln⁡N)αdNα.P_\alpha(g, N) \le e^\alpha y^\alpha = (2e)^\alpha\frac{(3 + 2\ln N)^{\alpha d}}{N^\alpha}.

3 の主張は「良い gg がある」という存在定理で、平均が小さいことから導いています。ほとんどの gg が悪くないということでもあります。実際に gg を見つけるには、PαP_\alpha を計算して探します。α\alpha が偶数のとき PαP_\alpha は Bernoulli 多項式で閉じた形に書け(次の例)、1 つの gg について O(Nd)O(Nd) の手間で計算できます。成分を 1 つずつ決めていく構成法(component-by-component 構成)は、Dick–Kuo–Sloan の総説にあります。

収束の次数は α\alpha、すなわち関数の滑らかさで決まります。ff の混合偏導関数が各変数について α\alpha 階まで連続かつ周期的なら、部分積分から ∣f^(h)∣≤C r(h)−α|\hat f(h)| \le C\,r(h)^{-\alpha} です。滑らかな周期関数ほど速く収束し、Halton 列のような N−1N^{-1} の壁がありません。周期的でない関数に格子則をそのまま使うと、境界での跳びが Fourier 係数の減衰を r(h)−1r(h)^{-1} に落とし、利点が消えます。

次の例は、2 次元で具体的に良い gg の一つを挙げるものです。g=(1,Fm−1)g = (1, F_{m-1}) の比 Fm−1/FmF_{m-1}/F_m は黄金比に近く、§3 で見たとおり黄金比は有理数で最も近似しにくい無理数です。そのため双対格子の点で r(h)r(h) が小さいものが現れにくくなる、というのがこの選び方の動機で、例ではそれを実際に確かめます。

例 6.4(Fibonacci 格子(d = 2))

Fibonacci 数を F1=F2=1F_1 = F_2 = 1、Fk+1=Fk+Fk−1F_{k+1} = F_k + F_{k-1} とし、N=FmN = F_m、g=(1,Fm−1)g = (1, F_{m-1}) とします。双対格子は {h:h1+Fm−1h2≡0(modFm)}\{h : h_1 + F_{m-1}h_2 \equiv 0 \pmod{F_m}\} です。恒等式 Fm−1Fk−FmFk−1=(−1)k−1Fm−kF_{m-1}F_k - F_mF_{k-1} = (-1)^{k-1}F_{m-k}(1≤k≤m−11 \le k \le m-1。kk についての帰納法で確かめられます)から、

h(k)=((−1)kFm−k, Fk)∈L⊥,r(h(k))=FkFm−kh^{(k)} = \bigl((-1)^kF_{m-k},\ F_k\bigr) \in L^\perp, \qquad r(h^{(k)}) = F_kF_{m-k}

です。FkFm−k+Fk−1Fm−k−1=Fm−1F_kF_{m-k} + F_{k-1}F_{m-k-1} = F_{m-1} から r(h(k))≥Fm−1/2r(h^{(k)}) \ge F_{m-1}/2 で、これらの双対格子の点はどれも r(h)r(h) が NN に比例する大きさです。双対格子の 00 でない点すべてについて r(h)≥cNr(h) \ge cN(c>0c > 0 は mm によらない定数)が成り立つことが連分数の理論から分かり、それを使うと Pα=O(N−αlog⁡N)P_\alpha = O(N^{-\alpha}\log N) が出ます(Niederreiter の本の第 5 章、Sloan–Joe の本)。2 次元では対数が 1 個で済みます。

α=2\alpha = 2 では、∑h∈Zmax⁡(1,∣h∣)−2e(hx)=1+2π2B2({x})\sum_{h\in\mathbb{Z}}\max(1,|h|)^{-2}e(hx) = 1 + 2\pi^2B_2(\{x\})(B2(x)=x2−x+1/6B_2(x) = x^2 - x + 1/6 は Bernoulli 多項式)なので、定理 6.3 の 2 の f∗f^*(C=1C = 1)は ∏j(1+2π2B2({xj}))\prod_j(1 + 2\pi^2B_2(\{x_j\})) で、

P2(g,N)=1N∑n=0N−1∏j=1d(1+2π2B2({ngjN}))−1P_2(g, N) = \frac1N\sum_{n=0}^{N-1}\prod_{j=1}^d\Bigl(1 + 2\pi^2B_2\Bigl(\Bigl\{\frac{ng_j}{N}\Bigr\}\Bigr)\Bigr) - 1

と有限和で計算できます。§8 で Fibonacci 格子についてこの値を計算し、N2P2/ln⁡NN^2P_2/\ln N がほぼ一定であることを確かめます。

準 Monte Carlo 法の点集合は決定的なので、1 回の計算では誤差の大きさが分かりません。定理 4.4 の上界は計算できないうえに過大です。点集合全体を無作為にずらすと、統計的な誤差評価が戻ってきます。

定義 7.1(無作為な平行移動(Cranley–Patterson))↗

点集合 P={x1,…,xN}⊂[0,1)dP = \{x_1, \ldots, x_N\} \subset [0,1)^d と、[0,1)d[0,1)^d 上の一様分布に従う確率変数 UU について、点集合 {xn+U}\{x_n + U\}(成分ごとに小数部分を取る)を PP の無作為な平行移動といい、

QU(f)=1N∑n=1Nf({xn+U})Q_U(f) = \frac1N\sum_{n=1}^Nf(\{x_n + U\})

をそれによる推定量という。

命題 7.2(無作為な平行移動による推定量は不偏)✓

f:[0,1)d→Rf : [0,1)^d \to \mathbb{R} を可積分な関数とし、I=∫[0,1)dfI = \int_{[0,1)^d}f とする。

  1. 各 x∈[0,1)dx \in [0,1)^d について {x+U}\{x + U\} は [0,1)d[0,1)^d 上の一様分布に従う。したがって E[QU(f)]=I\mathbb{E}[Q_U(f)] = I。
  2. ff が 2 乗可積分とする。独立な平行移動 U1,…,UMU_1, \ldots, U_M(M≥2M \ge 2)について、Qˉ=M−1∑kQUk(f)\bar Q = M^{-1}\sum_kQ_{U_k}(f) は E[Qˉ]=I\mathbb{E}[\bar Q] = I、Var(Qˉ)=Var(QU(f))/M\mathrm{Var}(\bar Q) = \mathrm{Var}(Q_U(f))/M を満たし、標本分散 s2=(M−1)−1∑k(QUk(f)−Qˉ)2s^2 = (M-1)^{-1}\sum_k(Q_{U_k}(f) - \bar Q)^2 について E[s2/M]=Var(Qˉ)\mathbb{E}[s^2/M] = \mathrm{Var}(\bar Q) である。
証明(命題 7.2)

1. [0,1)d[0,1)^d 上の有界な可測関数 ϕ\phi を、各変数について周期 11 に延長した関数も ϕ\phi と書きます。ϕ({x+u})=ϕ(x+u)\phi(\{x + u\}) = \phi(x + u) です。1 変数では、周期 11 の関数の長さ 11 の区間での積分は区間の位置によらないので ∫01ϕ(x+u) du=∫xx+1ϕ(v) dv=∫01ϕ(v) dv\int_0^1\phi(x + u)\,du = \int_x^{x+1}\phi(v)\,dv = \int_0^1\phi(v)\,dv です。dd 変数では、Fubini の定理(定理 3.4[直積測度と Fubini–Tonelli の定理])で座標ごとにこの置き換えを行って

E[ϕ({x+U})]=∫[0,1)dϕ(x+u) du=∫[0,1)dϕ(v) dv\mathbb{E}[\phi(\{x + U\})] = \int_{[0,1)^d}\phi(x + u)\,du = \int_{[0,1)^d}\phi(v)\,dv

です。ϕ\phi を可測集合の定義関数にすれば、{x+U}\{x + U\} の分布が一様分布であることになります。したがって可積分な ff について E[f({xn+U})]=I\mathbb{E}[f(\{x_n + U\})] = I で、nn について平均して E[QU(f)]=I\mathbb{E}[Q_U(f)] = I です。

2. Yk=QUk(f)Y_k = Q_{U_k}(f) は独立同分布です。(N−1∑nan)2≤N−1∑nan2(N^{-1}\sum_na_n)^2 \le N^{-1}\sum_na_n^2 と 1 から E[Yk2]≤N−1∑nE[f({xn+U})2]=∫f2<∞\mathbb{E}[Y_k^2] \le N^{-1}\sum_n\mathbb{E}[f(\{x_n + U\})^2] = \int f^2 < \infty なので分散は有限です。独立同分布な標本の平均と標本分散についての主張(定理 2.2[Monte Carlo 積分と分散低減] の 1〜3)から結論を得ます。

平行移動しても、格子則の点集合は格子のままです(双対格子は変わりません)。一般の点集合でも、箱を平行移動すると高々 2d2^d 個の箱に分かれるので、食い違い量は定数倍しか悪くなりません。つまり、点集合の良さを保ったまま無作為性が入ります。使い方は次のとおりです。全部で NMNM 回の関数評価を、MM 個(10〜50 個)の独立な平行移動に分け、MM 個の値の平均を答え、s/Ms/\sqrt M を標準誤差とします。MM を大きくしすぎると NN が小さくなって準 Monte Carlo 法の利点が減るので、MM は誤差の推定に必要な最小限にします。

定理 5.4 の上界 (log⁡N)d/N(\log N)^d/N が N−1/2N^{-1/2} より小さくなるのは、NN が dd について指数的に大きくなってからです。それでも、金融の経路依存型の積分のような数百次元の問題で、準 Monte Carlo 法は実際に Monte Carlo 法より良い結果を出します。その理由は、被積分関数が「見かけの次元」ほど高次元でないことにあります。これを分散の分解で表します。

考え方は次のとおりです。多変数の関数 ff を、「x1x_1 だけに依存する部分」「x2x_2 だけに依存する部分」「x1,x2x_1, x_2 の組に依存する部分」…というように、依存する変数の組ごとの部分に分けます。各部分の分散を足すと全体の分散になるようにできます。そのとき、依存する変数の数が少ない部分に分散のほとんどがあるなら、見かけの次元が高くても実質的には低次元の積分とみなせます。次の定義と命題はこれを正確に述べたものです。

D={1,…,d}D = \{1, \ldots, d\} とし、f∈L2([0,1]d)f \in L^2([0,1]^d)、u⊆Du \subseteq D について、uu に属さない変数で積分した関数を

(Πuf)(xu)=∫[0,1]D∖uf(x) dxD∖u(\Pi_uf)(x_u) = \int_{[0,1]^{D\setminus u}}f(x)\,dx_{D\setminus u}

と書きます(Π∅f=I=∫f\Pi_\emptyset f = I = \int f、ΠDf=f\Pi_Df = f)。

定義 7.3(ANOVA 分解・有効次元)↗

f∈L2([0,1]d)f \in L^2([0,1]^d) について、∣u∣|u| の小さい順に

fu=Πuf−∑v⊊ufvf_u = \Pi_uf - \sum_{v\subsetneq u}f_v

と定め、f=∑u⊆Dfuf = \sum_{u\subseteq D}f_u を ff の ANOVA 分解という。σu2=∫[0,1]dfu2\sigma_u^2 = \int_{[0,1]^d}f_u^2(u≠∅u \ne \emptyset)、σ2=∫(f−I)2\sigma^2 = \int(f - I)^2 とする。0<p<10 < p < 1 について、∑0<∣u∣≤sσu2≥p σ2\sum_{0<|u|\le s}\sigma_u^2 \ge p\,\sigma^2 となる最小の ss を、ff の(重ね合わせの意味の)有効次元という(p=0.99p = 0.99 がよく使われる)。

命題 7.4(ANOVA 分解の直交性と、無作為化した準 Monte Carlo 法の誤差)✓

f∈L2([0,1]d)f \in L^2([0,1]^d) とし、定義 7.3 の記号を使う。

  1. fuf_u は xux_u だけの関数で、j∈uj \in u ならば ∫01fu dxj=0\int_0^1f_u\,dx_j = 0。
  2. u≠vu \ne v ならば ∫[0,1]dfufv dx=0\int_{[0,1]^d}f_uf_v\,dx = 0。したがって σ2=∑∅≠u⊆Dσu2\sigma^2 = \sum_{\emptyset\ne u\subseteq D}\sigma_u^2。
  3. 1≤s≤d1 \le s \le d とし、f≤s=∑∣u∣≤sfuf_{\le s} = \sum_{|u|\le s}f_u とおく。点集合 P⊂[0,1)dP \subset [0,1)^d の無作為な平行移動による推定量 QUQ_U について E[(QU(f)−I)2]≤E[(QU(f≤s)−I)2]+(∑∣u∣>sσu2)1/2.\sqrt{\mathbb{E}\bigl[(Q_U(f) - I)^2\bigr]} \le \sqrt{\mathbb{E}\bigl[(Q_U(f_{\le s}) - I)^2\bigr]} + \Bigl(\sum_{|u|>s}\sigma_u^2\Bigr)^{1/2}.
証明(命題 7.4)

1. Πuf\Pi_uf は xux_u だけの関数で、∣u∣|u| についての帰納法から fuf_u もそうです(v⊊uv \subsetneq u の fvf_v は xvx_v だけの関数)。2 乗可積分性も同様です(Πu\Pi_u は平均を取る操作で、Cauchy–Schwarz の不等式から ∫(Πuf)2≤∫f2\int(\Pi_uf)^2 \le \int f^2)。積分が 00 になることを ∣u∣|u| についての帰納法で示します。j∈uj \in u とします。Fubini の定理(定理 3.4[直積測度と Fubini–Tonelli の定理])から ∫01Πuf dxj=Πu∖{j}f\int_0^1\Pi_uf\,dx_j = \Pi_{u\setminus\{j\}}f です。v⊊uv \subsetneq u について、j∉vj \notin v なら fvf_v は xjx_j によらないので ∫01fv dxj=fv\int_0^1f_v\,dx_j = f_v、j∈vj \in v なら帰納法の仮定(∣v∣<∣u∣|v| < |u|)から ∫01fv dxj=0\int_0^1f_v\,dx_j = 0 です。j∉vj \notin v かつ v⊊uv \subsetneq u となる vv は、u∖{j}u\setminus\{j\} の部分集合の全体なので

∫01fu dxj=Πu∖{j}f−∑v⊆u∖{j}fv=Πu∖{j}f−fu∖{j}−∑v⊊u∖{j}fv=0\int_0^1f_u\,dx_j = \Pi_{u\setminus\{j\}}f - \sum_{v\subseteq u\setminus\{j\}}f_v = \Pi_{u\setminus\{j\}}f - f_{u\setminus\{j\}} - \sum_{v\subsetneq u\setminus\{j\}}f_v = 0

です。最後の等号は fu∖{j}f_{u\setminus\{j\}} の定義です。

2. u≠vu \ne v なら、一方だけに属する添字があります。j∈u∖vj \in u\setminus v とします(逆の場合も同じです)。fufvf_uf_v は可積分で、fvf_v は xjx_j によらないので、Fubini の定理で xjx_j について先に積分すると、1 から

∫fufv dx=∫(∫01fu dxj)fv dxD∖{j}=0\int f_uf_v\,dx = \int\Bigl(\int_0^1f_u\,dx_j\Bigr)f_v\,dx_{D\setminus\{j\}} = 0

です。fDf_D の定義から f=∑u⊆Dfuf = \sum_{u\subseteq D}f_u、f∅=If_\emptyset = I なので f−I=∑u≠∅fuf - I = \sum_{u\ne\emptyset}f_u で、直交性から σ2=∑u≠∅σu2\sigma^2 = \sum_{u\ne\emptyset}\sigma_u^2 です。

3. g=f−f≤s=∑∣u∣>sfug = f - f_{\le s} = \sum_{|u|>s}f_u とおくと、2 から ∫g2=∑∣u∣>sσu2\int g^2 = \sum_{|u|>s}\sigma_u^2 です。QUQ_U は線形なので QU(f)−I=(QU(f≤s)−I)+QU(g)Q_U(f) - I = (Q_U(f_{\le s}) - I) + Q_U(g) で、2 乗平均のノルムについての三角不等式(Minkowski の不等式、定理 4.5[L^p 空間と関数解析への導入])から

E[(QU(f)−I)2]≤E[(QU(f≤s)−I)2]+E[QU(g)2]\sqrt{\mathbb{E}[(Q_U(f) - I)^2]} \le \sqrt{\mathbb{E}[(Q_U(f_{\le s}) - I)^2]} + \sqrt{\mathbb{E}[Q_U(g)^2]}

です。(N−1∑nan)2≤N−1∑nan2(N^{-1}\sum_na_n)^2 \le N^{-1}\sum_na_n^2 と、{xn+U}\{x_n + U\} が一様分布に従うこと(命題 7.2 の 1)から

E[QU(g)2]≤1N∑n=1NE[g({xn+U})2]=∫g2=∑∣u∣>sσu2\mathbb{E}[Q_U(g)^2] \le \frac1N\sum_{n=1}^N\mathbb{E}\bigl[g(\{x_n + U\})^2\bigr] = \int g^2 = \sum_{|u|>s}\sigma_u^2

です。

3 の右辺の第 1 項は、高々 ss 個の変数の関数の和 f≤sf_{\le s} に対する誤差です。fuf_u の積分には点集合の uu 座標への射影しか効かず、射影の食い違い量は ∣u∣|u| 次元のものなので、fuf_u が滑らかなら誤差は 定理 4.4 から O(N−1(log⁡N)∣u∣)O(N^{-1}(\log N)^{|u|}) です。第 2 項は高次の成分の大きさで、NN によらず、しかも Monte Carlo 法の誤差 σ/N\sigma/\sqrt N と違って NN で減りませんが、有効次元が小さければはじめから小さい量です。つまり、準 Monte Carlo 法が高次元で効く条件は「dd が小さいこと」ではなく、「分散の大部分が少数の変数の成分にあり、点集合の低次元の射影が良いこと」です。変数の順序や取り方を変えて有効次元を下げる工夫(Brown 運動を Brown 橋で構成して、重要な変動をはじめの座標に集めるなど)が効くのもこのためです。

例 7.5(積の形の関数の ANOVA 分解)

f(x)=∏j=1d(1+aj(xj−1/2))f(x) = \prod_{j=1}^d(1 + a_j(x_j - 1/2)) とします。∫01(xj−1/2) dxj=0\int_0^1(x_j - 1/2)\,dx_j = 0 なので、積を展開した各項 ∏j∈uaj(xj−1/2)\prod_{j\in u}a_j(x_j - 1/2) は 命題 7.4 の 1 の性質をもち、これが fuf_u です(分解の一意性は 演習 9.4 と同じ計算で確かめられます)。I=1I = 1 で、

σu2=∏j∈uaj212,σ2=∏j=1d(1+aj212)−1\sigma_u^2 = \prod_{j\in u}\frac{a_j^2}{12}, \qquad \sigma^2 = \prod_{j=1}^d\Bigl(1 + \frac{a_j^2}{12}\Bigr) - 1

です。d=5d = 5、aj=1/ja_j = 1/j では σ2=0.12570\sigma^2 = 0.12570、1 変数の成分の和は ∑jaj2/12=0.12197\sum_ja_j^2/12 = 0.12197 で全体の 97.0%97.0\%、2 変数の成分まで入れると 99.97%99.97\% です。見かけは 5 次元でも、有効次元は 22(p=0.99p = 0.99)です。aj=1a_j = 1 で d=100d = 100 とすると、σ2=(13/12)100−1≈2.99×103\sigma^2 = (13/12)^{100} - 1 \approx 2.99\times10^3 に対し 1 変数の成分の和は 100/12=8.3100/12 = 8.3 で、分散のほとんどが高次の成分にあります。同じ形の関数でも、係数の減り方で難しさがまったく違います。

コードは Python 3.9.6・NumPy 2.0.2・SciPy 1.13.1 で実行し、出力をそのまま載せています。乱数は numpy.random.default_rng(20261008) です。

1 次元は 命題 2.3 の式で計算します。2 次元では、点の座標の作る格子の各長方形の内部で A([0,t);P)A([0,t); P) が一定で、δP(t)=定数−t1t2\delta_P(t) = \text{定数} - t_1t_2 は各変数について単調なので、上限は長方形の頂点(格子点)での極限値、すなわち格子点での値(境界の点を含める数え方と含めない数え方の両方)の最大です。これを全格子点について計算します。

import numpy as np
def radical_inverse(n, b):
x, f = 0.0, 1.0 / b
while n > 0:
n, a = divmod(n, b)
x += a * f
f /= b
return x
def star_disc_1d(x):
x = np.sort(x); n = len(x)
return 0.5 / n + np.abs(x - (2 * np.arange(1, n + 1) - 1) / (2 * n)).max()
def star_disc_2d(p):
# 格子 (X ∪ {1}) × (Y ∪ {1}) の全点で、閉じた箱と開いた箱の点の個数を数える
n = len(p)
xs, ys = np.append(np.sort(p[:, 0]), 1.0), np.append(np.sort(p[:, 1]), 1.0)
ix = np.searchsorted(xs[:-1], p[:, 0]); iy = np.searchsorted(ys[:-1], p[:, 1])
cnt = np.zeros((n + 1, n + 1)); np.add.at(cnt, (ix, iy), 1.0)
closed = cnt.cumsum(axis=0).cumsum(axis=1) # #{x <= xs[i], y <= ys[j]}
opened = np.zeros_like(closed); opened[1:, 1:] = closed[:-1, :-1] # #{x < xs[i], y < ys[j]}
vol = np.outer(xs, ys)
return max((closed / n - vol).max(), (vol - opened / n).max())
print(" N N*D(vdC,b=2) bound N*D(vdC,b=3) bound N*D(Halton 2,3) bound")
for N in (10, 100, 1000, 4000):
v2 = np.array([radical_inverse(n, 2) for n in range(N)])
v3 = np.array([radical_inverse(n, 3) for n in range(N)])
ilog = lambda N, b: len(np.base_repr(N, b)) - 1 # floor(log_b N)
clog = lambda N, b: len(np.base_repr(N - 1, b)) # ceil(log_b N) (N >= 2)
b2, b3 = (ilog(N, 2) + 1), 2 * (ilog(N, 3) + 1)
bh = (clog(N, 2) + 1) * (2 * clog(N, 3) + 1)
print(f"{N:6d} {N * star_disc_1d(v2):8.3f} {b2:4d} {N * star_disc_1d(v3):8.3f} {b3:4d} "
f"{N * star_disc_2d(np.column_stack([v2, v3])):8.3f} {bh:5d}")
N N*D(vdC,b=2) bound N*D(vdC,b=3) bound N*D(Halton 2,3) bound
10 1.750 4 1.889 6 2.667 35
100 2.313 7 2.951 10 5.024 88
1000 2.453 10 3.476 14 6.848 165
4000 2.453 12 4.749 16 9.136 221

bound は 定理 5.3 の (b−1)(⌊log⁡bN⌋+1)(b-1)(\lfloor\log_bN\rfloor + 1) と 定理 5.4 の ∏j((bj−1)⌈log⁡bjN⌉+1)\prod_j((b_j-1)\lceil\log_{b_j}N\rceil + 1) です。NDN∗N D_N^* は上界の中にあり、NN とともにゆっくり(対数的に)増えています。独立な乱数なら NDN∗ND_N^* は N\sqrt N の大きさ(N=4000N = 4000 で N≈63\sqrt N \approx 63)です。2 次元の上界は実際の値の 1313〜2424 倍で、上界の定数が粗いことも分かります。

d=5d = 5 で、2 つの被積分関数(どちらも積分は 11)を使います。

  • fA(x)=∏j(1+(xj−1/2)/j)f_A(x) = \prod_j(1 + (x_j - 1/2)/j)。滑らかですが周期的ではありません(例 7.5 の関数)。
  • fB(x)=∏j(1+2π2γjB2(xj))f_B(x) = \prod_j(1 + 2\pi^2\gamma_jB_2(x_j))、γj=1/j2\gamma_j = 1/j^2。周期的で、Fourier 係数は ∏hj≠0γj∣hj∣−2\prod_{h_j\ne0}\gamma_j|h_j|^{-2} です(例 6.4 の関数に重みを付けたもの)。

Monte Carlo 法、Halton 列(基数 2,3,5,7,112, 3, 5, 7, 11)、Sobol’ 列(scipy.stats.qmc)、格子則を N=26,28,…,216N = 2^6, 2^8, \ldots, 2^{16} で比べます。格子則の生成ベクトルは Korobov 型 g=(1,a,a2,a3,a4) mod Ng = (1, a, a^2, a^3, a^4) \bmod N とし、aa は無作為に選んだ高々 200 個の奇数の候補のうち、fBf_B に対する誤差(定理 6.3 の 2 から、重みつきの P2P_2 に等しい)が最小のものにします。

import numpy as np
from scipy.stats import qmc
d = 5
a = 1.0 / np.arange(1, d + 1)
f_a = lambda x: np.prod(1.0 + a * (x - 0.5), axis=1) # 非周期。積分 1
b2 = lambda x: x * x - x + 1.0 / 6.0
gam = 1.0 / np.arange(1, d + 1) ** 2
f_b = lambda x: np.prod(1.0 + gam * 2 * np.pi**2 * b2(x), axis=1) # 周期的。積分 1
def lattice(N, g):
return (np.arange(N)[:, None] * g[None, :] % N) / N
def korobov(N, rng, tries=200):
# g = (1, a, a^2, ...) mod N のうち P_2 が最小のもの(a は奇数の候補から探す)
best = None
for a_ in np.unique(rng.integers(1, N // 2, size=tries) * 2 + 1):
g = np.array([pow(int(a_), j, N) for j in range(d)])
p2 = f_b(lattice(N, g)).mean() - 1.0
if best is None or p2 < best[0]:
best = (p2, g)
return best[1]
rng = np.random.default_rng(20261008)
halton = qmc.Halton(d=d, scramble=False).random(2**16)
sobol = qmc.Sobol(d=d, scramble=False).random_base2(16)
for f, label in ((f_a, "f_A"), (f_b, "f_B")):
print(label)
print(" log2N MC err (MC se) Halton Sobol lattice gen. a")
errs = []
for k in range(6, 17, 2):
N = 2**k
y = f(rng.random((N, d)))
g = korobov(N, rng)
e = [abs(y.mean() - 1), abs(f(halton[:N]).mean() - 1), abs(f(sobol[:N]).mean() - 1), abs(f(lattice(N, g)).mean() - 1)]
errs.append(e)
print(f" {k:3d} {e[0]:.2e} ({y.std(ddof=1) / np.sqrt(N):.2e}) {e[1]:.2e} {e[2]:.2e} {e[3]:.2e} {g[1]:6d}")
ks = np.arange(6, 17, 2)
sl = [np.polyfit(ks, np.log2(np.array(errs)[:, j]), 1)[0] for j in range(4)]
print(" slope %.2f %.2f %.2f %.2f" % tuple(sl))
f_A
log2N MC err (MC se) Halton Sobol lattice gen. a
6 4.46e-02 (3.93e-02) 4.12e-02 1.79e-02 4.67e-03 23
8 6.70e-03 (2.23e-02) 1.24e-02 4.60e-03 3.68e-03 69
10 7.76e-03 (1.15e-02) 3.22e-03 1.10e-03 1.87e-03 469
12 5.85e-03 (5.58e-03) 1.01e-03 2.81e-04 7.42e-04 3739
14 1.83e-03 (2.77e-03) 2.88e-04 6.81e-05 9.76e-05 7185
16 1.20e-03 (1.39e-03) 7.51e-05 1.74e-05 2.08e-05 10759
slope -0.46 -0.91 -1.00 -0.80
f_B
log2N MC err (MC se) Halton Sobol lattice gen. a
6 4.68e-01 (2.42e-01) 8.31e-02 7.22e-02 7.42e-02 23
8 2.20e-01 (9.33e-02) 2.27e-02 1.30e-02 1.02e-02 69
10 1.17e-02 (5.12e-02) 2.81e-03 2.45e-03 1.27e-03 555
12 2.37e-02 (2.57e-02) 7.60e-06 5.34e-04 1.68e-04 3543
14 1.16e-02 (1.31e-02) 1.55e-05 1.39e-04 1.82e-05 8603
16 2.29e-03 (6.46e-03) 1.52e-05 3.73e-05 2.29e-06 7531
slope -0.72 -1.46 -1.09 -1.50

slope は log⁡2(誤差)\log_2(\text{誤差}) を log⁡2N\log_2N に最小二乗であてはめた傾きです。6 点からの値で、決定的な方法の誤差は NN について滑らかに減るとは限らないので、目安として読んでください。

  • Monte Carlo 法の誤差は標準誤差 (MC se) の 0.20.2〜2.42.4 倍の範囲にあり、標準誤差は NN が 4 倍になるごとに半分になっています(傾き −1/2-1/2)。
  • Halton 列と Sobol’ 列は fAf_A で傾きがほぼ −1-1 で、定理 4.4 と 定理 5.4 の O(N−1(log⁡N)d)O(N^{-1}(\log N)^d) と整合します。N=216N = 2^{16} での誤差は Monte Carlo 法の標準誤差の約 1/201/20(Halton 列)と 1/801/80(Sobol’ 列)です。fBf_B での Halton 列の誤差は N=212N = 2^{12} で偶然小さくなっていて、傾きの値はこの 1 点に引きずられています。
  • 格子則は、周期的な fBf_B では N=216N = 2^{16} で誤差 2.3×10−62.3\times10^{-6} と最も良く、傾きは −1.5-1.5 です。定理 6.3 の 3 の上界 N−2(log⁡N)10N^{-2}(\log N)^{10} の、この範囲での見かけの傾きは −2+10/ln⁡N-2 + 10/\ln N(N=216N = 2^{16} で −1.1-1.1)なので、−2-2 より緩いのは対数の因子の分です。周期的でない fAf_A では格子則に特別な利点はなく、Sobol’ 列と同程度かそれ以下です。

8.3. Fibonacci 格子と無作為な平行移動

Section titled “8.3. Fibonacci 格子と無作為な平行移動”
import numpy as np
b2 = lambda x: x * x - x + 1.0 / 6.0
print("Fibonacci lattice (d = 2): P_2 = (1/N) sum prod (1 + 2 pi^2 B_2) - 1")
print(" N P_2 N^2 P_2 / ln N")
F = [1, 1]
while F[-1] < 200000:
F.append(F[-1] + F[-2])
for m in range(10, len(F), 3):
N, g = F[m], np.array([1, F[m - 1]])
x = (np.arange(N)[:, None] * g[None, :] % N) / N
p2 = np.prod(1.0 + 2 * np.pi**2 * b2(x), axis=1).mean() - 1.0
print(f"{N:7d} {p2:.3e} {N * N * p2 / np.log(N):8.2f}")
# 無作為な平行移動: d = 5, N = 4096, 生成ベクトル (1, a, a^2, a^3, a^4) mod N, a = 3543
d, N, a_gen, M = 5, 4096, 3543, 32
g = np.array([pow(a_gen, j, N) for j in range(d)])
pts = (np.arange(N)[:, None] * g[None, :] % N) / N
a = 1.0 / np.arange(1, d + 1)
gam = 1.0 / np.arange(1, d + 1) ** 2
f_a = lambda x: np.prod(1.0 + a * (x - 0.5), axis=1)
f_b = lambda x: np.prod(1.0 + gam * 2 * np.pi**2 * b2(x), axis=1)
rng = np.random.default_rng(20261008)
print("random shifts (M = 32, N = 4096)")
print(" mean - 1 std.err |mean - 1|/se rms of single-shift error")
for f, label in ((f_a, "f_A"), (f_b, "f_B")):
q = np.array([f((pts + rng.random(d)) % 1.0).mean() for _ in range(M)])
se = q.std(ddof=1) / np.sqrt(M)
print(f" {label} {q.mean() - 1:+.3e} {se:.3e} {abs(q.mean() - 1) / se:6.2f} {np.sqrt(np.mean((q - 1) ** 2)):.3e}")
Fibonacci lattice (d = 2): P_2 = (1/N) sum prod (1 + 2 pi^2 B_2) - 1
N P_2 N^2 P_2 / ln N
89 1.603e-02 28.29
377 1.139e-03 27.28
1597 7.713e-05 26.67
6765 5.060e-06 26.25
28657 3.244e-07 25.96
121393 2.044e-08 25.73
random shifts (M = 32, N = 4096)
mean - 1 std.err |mean - 1|/se rms of single-shift error
f_A +3.797e-06 2.195e-05 0.17 1.223e-04
f_B +2.932e-07 4.140e-06 0.07 2.305e-05

Fibonacci 格子では N2P2/ln⁡NN^2P_2/\ln N が 2626〜2828 でほぼ一定で、P2=O(N−2log⁡N)P_2 = O(N^{-2}\log N) が見えます(例 6.4)。NN を 13641364 倍にすると誤差は 8×1058\times10^5 分の 1 になります。

無作為な平行移動では、32 個の平均の真値からのずれが、32 個のばらつきから求めた標準誤差の 0.170.17 倍と 0.070.07 倍でした(どちらも 1 倍以内です。2 例だけなので、標準誤差が正しい大きさであることの確認としては弱く、矛盾がないことを見たにとどまります)。真値を知らなくても誤差の大きさが分かるというのが、命題 7.2 の内容です。全体の関数評価は 32×4096≈1.3×10532 \times 4096 \approx 1.3\times10^5 回で、同じ回数の Monte Carlo 法の標準誤差は fAf_A で約 9.8×10−49.8\times10^{-4}(§8.2 の N=216N = 2^{16} の値の 1/21/\sqrt2)なので、fAf_A でも約 4545 分の 1 です。fBf_B では、平行移動しない格子則の誤差 1.68×10−41.68\times10^{-4}(§8.2 の N=212N = 2^{12})より、平行移動 1 個あたりの誤差の 2 乗平均の平方根 2.3×10−52.3\times10^{-5} のほうが小さくなっています。fBf_B の Fourier 係数がすべて正なので、平行移動なし(U=0U = 0)が双対格子の上の係数の位相がそろう最悪の場合に当たるためです。

演習 9.1易

[0,1)[0,1) の NN 点 {0,1/N,…,(N−1)/N}\{0, 1/N, \ldots, (N-1)/N\} の DN∗D_N^* を求めよ。これから、基数 22 の van der Corput 列の最初の N=2mN = 2^m 項について NDN∗=1ND_N^* = 1 であることを示せ。

解答

x(i)=(i−1)/Nx_{(i)} = (i-1)/N なので ∣x(i)−(2i−1)/(2N)∣=1/(2N)|x_{(i)} - (2i-1)/(2N)| = 1/(2N) で、命題 2.3 から DN∗=1/(2N)+1/(2N)=1/ND_N^* = 1/(2N) + 1/(2N) = 1/N です。van der Corput 列の最初の 2m2^m 項は、補題 5.2 の証明の式で q=0q = 0 とした φ2(r)=ρ(r)/2m\varphi_2(r) = \rho(r)/2^m(0≤r<2m0 \le r < 2^m)で、ρ\rho が全単射なので集合として {c/2m:0≤c<2m}\{c/2^m : 0 \le c < 2^m\} に等しく、NDN∗=1ND_N^* = 1 です。§8.1 の表で NN が 22 の冪でないときの値が 11 より大きいのは、最後のブロックが途中で切れているためです。

演習 9.2標準

f(x)=x2f(x) = x^2 と点集合 P={0,1/N,…,(N−1)/N}P = \{0, 1/N, \ldots, (N-1)/N\} について、定理 4.1 の恒等式の両辺を直接計算して一致を確かめ、不等式の上界と比べよ。

解答

左辺は N−1∑i=0N−1(i/N)2−1/3=(N−1)(2N−1)6N2−13=−12N+16N2N^{-1}\sum_{i=0}^{N-1}(i/N)^2 - 1/3 = \dfrac{(N-1)(2N-1)}{6N^2} - \dfrac13 = -\dfrac{1}{2N} + \dfrac{1}{6N^2} です。右辺について、i/N<t≤(i+1)/Ni/N < t \le (i+1)/N で A([0,t))=i+1A([0,t)) = i + 1 なので δP(t)=(i+1)/N−t\delta_P(t) = (i+1)/N - t で、

−∫01δP(t) 2t dt=−∑i=0N−1∫i/N(i+1)/N2t(i+1N−t)dt-\int_0^1\delta_P(t)\,2t\,dt = -\sum_{i=0}^{N-1}\int_{i/N}^{(i+1)/N}2t\Bigl(\frac{i+1}{N} - t\Bigr)dt

です。t=i/N+st = i/N + s とおくと、被積分関数は 2(i/N+s)(1/N−s)2(i/N + s)(1/N - s) で、∫01/N(1/N−s) ds=1/(2N2)\int_0^{1/N}(1/N - s)\,ds = 1/(2N^2)、∫01/Ns(1/N−s) ds=1/(6N3)\int_0^{1/N}s(1/N - s)\,ds = 1/(6N^3) から、各区間の積分は i/N3+1/(3N3)i/N^3 + 1/(3N^3) です。ii について足すと (N−1)/(2N2)+1/(3N2)=1/(2N)−1/(6N2)(N-1)/(2N^2) + 1/(3N^2) = 1/(2N) - 1/(6N^2) で、符号を付けると左辺に一致します。上界は DN∗∫01∣f′∣=(1/N)⋅1=1/ND_N^*\int_0^1|f'| = (1/N)\cdot1 = 1/N で、実際の誤差の約 2 倍です。δP≥0\delta_P \ge 0 で f′≥0f' \ge 0 なので打ち消しがなく、上界に近い値になっています。

演習 9.3標準

d=2d = 2、N=5N = 5、g=(1,2)g = (1, 2) の格子則について、双対格子の 00 でない点のうち r(h)r(h) が最小のものを求めよ。f1(x)=cos⁡(2π(x1+x2))f_1(x) = \cos(2\pi(x_1 + x_2)) と f2(x)=cos⁡(2π(x1+2x2))f_2(x) = \cos(2\pi(x_1 + 2x_2)) のそれぞれについて Q5(f)Q_5(f) を求めよ。

解答

双対格子は h1+2h2≡0(mod5)h_1 + 2h_2 \equiv 0 \pmod 5 です。r(h)=1r(h) = 1 の点 (±1,0)(\pm1, 0)、(0,±1)(0, \pm1)、(±1,±1)(\pm1, \pm1) は h⋅g=±1,±2,±3,±1h\cdot g = \pm1, \pm2, \pm3, \pm1 で条件を満たしません。r(h)=2r(h) = 2 の点のうち (1,2)(1, 2) は 1+4=51 + 4 = 5、(2,−1)(2, -1) は 2−2=02 - 2 = 0 で条件を満たします(符号を反転した点も)。よって最小値は 22 です。

f1=(e(h⋅x)+e(−h⋅x))/2f_1 = (e(h\cdot x) + e(-h\cdot x))/2、h=(1,1)h = (1, 1) で、±h∉L⊥\pm h \notin L^\perp なので 定理 6.3 の 1 から Q5(f1)=∫f1=0Q_5(f_1) = \int f_1 = 0(厳密)です。f2f_2 は h=(1,2)∈L⊥h = (1, 2) \in L^\perp で、Q5(f2)=f^2(h)+f^2(−h)=1/2+1/2=1Q_5(f_2) = \hat f_2(h) + \hat f_2(-h) = 1/2 + 1/2 = 1 です。実際、点 xn=(n/5,{2n/5})x_n = (n/5, \{2n/5\}) では x1+2x2≡5n/5=n≡0(mod1)x_1 + 2x_2 \equiv 5n/5 = n \equiv 0 \pmod 1 なので、f2f_2 はすべての点で 11 です。積分は 00 なので誤差は 11 で、格子則は双対格子の上の振動数を定数と区別できません。

演習 9.4標準

f(x1,x2)=x1x2f(x_1, x_2) = x_1x_2 の ANOVA 分解を定義に従って求め、σ2=σ{1}2+σ{2}2+σ{1,2}2\sigma^2 = \sigma_{\{1\}}^2 + \sigma_{\{2\}}^2 + \sigma_{\{1,2\}}^2 を確かめよ。

解答

f∅=I=1/4f_\emptyset = I = 1/4。Π{1}f=x1/2\Pi_{\{1\}}f = x_1/2 から f{1}=x1/2−1/4=(x1−1/2)/2f_{\{1\}} = x_1/2 - 1/4 = (x_1 - 1/2)/2、同様に f{2}=(x2−1/2)/2f_{\{2\}} = (x_2 - 1/2)/2。

f{1,2}=x1x2−14−x1−1/22−x2−1/22=(x1−12)(x2−12)f_{\{1,2\}} = x_1x_2 - \frac14 - \frac{x_1 - 1/2}{2} - \frac{x_2 - 1/2}{2} = \Bigl(x_1 - \frac12\Bigr)\Bigl(x_2 - \frac12\Bigr)

です。∫01(x−1/2)2dx=1/12\int_0^1(x - 1/2)^2dx = 1/12 から σ{1}2=σ{2}2=1/48\sigma_{\{1\}}^2 = \sigma_{\{2\}}^2 = 1/48、σ{1,2}2=1/144\sigma_{\{1,2\}}^2 = 1/144 です。一方 σ2=∫x12x22−1/16=1/9−1/16=7/144\sigma^2 = \int x_1^2x_2^2 - 1/16 = 1/9 - 1/16 = 7/144 で、3/144+3/144+1/144=7/1443/144 + 3/144 + 1/144 = 7/144 と一致します。1 変数の成分が分散の 6/7≈86%6/7 \approx 86\% を占めます。x1x2=(1/2+(x1−1/2))(1/2+(x2−1/2))x_1x_2 = (1/2 + (x_1 - 1/2))(1/2 + (x_2 - 1/2)) と書いて展開しても同じ分解が得られます。例 7.5 はこの形の一般化です。

  1. L. Kuipers, H. Niederreiter, Uniform Distribution of Sequences, Wiley, 1974 — 第 1 章(Weyl の判定法)、第 2 章(食い違い量、Koksma–Hlawka の不等式、van der Corput 列・Halton 列)。
  2. H. Niederreiter, Random Number Generation and Quasi-Monte Carlo Methods, SIAM, 1992 — 第 2〜5 章(食い違い量、低食い違い量列、ネット、格子則)。
  3. I. H. Sloan, S. Joe, Lattice Methods for Multiple Integration, Oxford University Press, 1994 — 格子則の誤差、PαP_\alpha、良い格子の存在。
  4. J. Dick, F. Y. Kuo, I. H. Sloan, “High-dimensional integration: the quasi-Monte Carlo way”, Acta Numerica 22 (2013), 133–288 — 無作為化、重みつき空間、成分ごとの構成法、有効次元。
  5. K. F. Roth, “On irregularities of distribution”, Mathematika 1 (1954), 73–79 — 食い違い量の下界。
  6. A. B. Owen, “Scrambled net variance for integrals of smooth functions”, The Annals of Statistics 25 (1997), 1541–1562 — スクランブルしたネットの分散。

このテーマの 100 本ノック(50 問)

執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12

この記事の誤りを報告する ・運営: 夢現技研合同会社 ・料金 ・利用条件 ・特定商取引法に基づく表記

© 2026 夢現技研合同会社 ・コード例は MIT ライセンスです。