誤差関数

提供: miniwiki
移動先:案内検索

誤差関数(ごさかんすう、: error function)は、数学におけるシグモイド形状の特殊関数(非初等関数)の一種で、確率論統計学物質科学偏微分方程式などで使われる。ガウスの誤差関数とも。定義は以下の通り。

[math]\operatorname{erf}\left(x\right) = \frac{2}{\sqrt{\pi}}\int_0^x e^{-t^2}\,\mathrm dt[/math]

相補誤差関数 (complementary error function) は erfc表記され、誤差関数を使って以下のように定義される。

[math]\begin{align} \operatorname{erfc}(x) & = 1-\operatorname{erf}(x) \\ & = \frac{2}{\sqrt{\pi}} \int_x^{\infty} e^{-t^2}\,\mathrm dt = e^{-x^2} \operatorname{erfcx}(x) \end{align} [/math]

スケーリング相補誤差関数(scaled complementary error function)[1] erfcx定義される (アンダーフロー[1][2]を避けるために、 erfc の代わりに用いる)。

複素誤差関数 (complex error function) は[math]w\left(x\right)[/math]表記され、やはり誤差関数を使って次のように定義される(Faddeeva関数とも呼ぶ)。

[math]w\left(x\right) = e^{-x^2}{\textrm{erfc}}(-ix)\,\![/math]

ファイル:Error Function.svg
誤差関数のグラフ

特性

ファイル:ComplexEx2.jpg
図2. 被積分関数 exp(−z2) を複素z-平面でプロットした図
ファイル:ComplexErf.jpg
図3. erf(z) を複素z-平面でプロットした図

誤差関数奇関数である。

任意の複素数[math]z[/math]について、

[math]\operatorname{erf} (-z) = -\operatorname{erf} (z)[/math]

また、次が成り立つ。

[math]\operatorname{erf} (z^{*}) = \operatorname{erf}(z)^{*} [/math]

ここで[math]z^{*}[/math][math]z[/math]複素共役である。

被積分関数[math]f=\exp\left(-z^{2}\right)[/math][math]f=\operatorname{erf}\left(-z\right)[/math]を複素[math]z\operatorname{-}[/math]平面にプロットしたものを図2と図3に示す。

虚部[math]f=\operatorname{Im}\left(f\right)=0[/math]となる点を結んだ線を太い緑色の線で表している。[math]f=\operatorname{Im}\left(f\right)[/math]負の整数となるを結んだを太い赤色の線で表し正の整数となる点を結んだ線を太い青色の線で表している。

[math]f=\operatorname{Im}\left(f\right)[/math]整数と整数の中間の一定になる点を結んだ線を細い緑色の線で表し、実部[math]f=\operatorname{Re}\left(f\right)=0[/math]が一定値になる点を結んだ線は、の場合は青い細い線、の場合は赤い細い線で表している。

実軸では、[math]z\to\infty[/math][math]f=\operatorname{erf}\left(z\right)[/math]単位元(1)に漸近し、[math]z\to-\infty[/math]で単位元(-1)に漸近する。虚軸では、[math]\pm{\rm{i}}\infty[/math] となる。

テイラー級数

誤差関数整関数である。(無限大以外で)特異点を持たず、テイラー展開は常に収束する。

定義にある積分初等関数を使った閉形式では評価できないが、被積分関数[math]\exp^{-z^{2}}[/math] を対応するテイラー級数に展開して、単位で積分すると、誤差関数のテイラー級数が以下のように得られる。

[math]\operatorname{erf}(z)= \frac{2}{\sqrt{\pi}}\sum_{n=0}^\infin\frac{(-1)^n z^{2n+1}}{n! (2n+1)} =\frac{2}{\sqrt{\pi}} \left(z-\frac{z^3}{3}+\frac{z^5}{10}-\frac{z^7}{42}+\frac{z^9}{216}-\ \cdots\right)[/math]

これは全ての複素数[math]z[/math]について成り立つ。分母OEISにある A007680 の数列である。

これを反復的に計算するには、以下のように定式化するのが扱い易い。

[math]\operatorname{erf}(z)= \frac{2}{\sqrt{\pi}}\sum_{n=0}^\infin\left(z \prod_{k=1}^n{\frac{-(2k-1) z^2}{k (2k+1)}}\right) = \frac{2}{\sqrt{\pi}} \sum_{n=0}^\infin \frac{z}{2n+1} \prod_{k=1}^{n} \frac{-z^2}{k}[/math]

[math]\frac{-(2k-1) z^2}{k (2k+1)}[/math][math]k[/math]番目の項から[math]k+1[/math]番目のを得る係数表している。

[math]f=\operatorname{erf}\left(z\right)[/math][math]f=\operatorname{erfc}\left(z\right)[/math][math]f=\exp\left(-z^{2}\right)[/math]比較するには、次の級数が利用できる。

[math]e^{z^2} \operatorname{erf}(z)= \frac{2}{\sqrt{\pi}}\sum_{n=0}^\infin \frac{2^nz^{2n+1}}{(2n+1)!!} = \sum_{n=0}^\infin \frac{z^{2n+1}}{\Gamma(n+\frac{3}{2})} [/math]

[math]\infty[/math]において誤差関数は正確に1になる(ガウス積分を参照)。

誤差関数導関数定義から即座に求められる。

[math]\frac{\rm d}{{\rm d}z}\,\mathrm{erf}(z)=\frac{2}{\sqrt{\pi}}\,e^{-z^2}[/math]

誤差関数不定積分は次のようになる。

[math]z\,\operatorname{erf}(z) + \frac{e^{-z^2}}{\sqrt{\pi}}[/math]

逆関数

逆誤差関数は次のような級数となる。

[math]\operatorname{erf}^{-1}\left(z\right)=\sum_{k=0}^\infin\frac{c_k}{2k+1}\left(\frac{\sqrt{\pi}}{2}z\right)^{2k+1} \,\![/math]

ここで、[math]c_{0}=1[/math]であり、

[math]c_k=\sum_{m=0}^{k-1}\frac{c_m c_{k-1-m}}{(m+1)(2m+1)} = \left\{1,1,\frac{7}{6},\frac{127}{90},\ldots\right\}[/math]

となる。従って、次のような級数の展開が得られる(分子分母に共通して出現する係数は省いてある)。

[math]\operatorname{erf}^{-1}(z)=\frac{1}{2}\sqrt{\pi}\left (z+\frac{\pi}{12}z^3+\frac{7\pi^2}{480}z^5+\frac{127\pi^3}{40320}z^7+\frac{4369\pi^4}{5806080}z^9+\frac{34807\pi^5}{182476800}z^{11}+\cdots\right ) \,\![/math][3]

(約分後の分子/分母の係数はOEISの A092676/A132467 と同じで、約分していない分子は A002067 となる。)

ファイル:Error Function Complementary.svg
相補誤差関数のグラフ

なお、誤差関数無限大でのはそれぞれ正と負の[math]1[/math]となる。

応用

一連の何らかの測定正規分布になっていて、標準偏差[math]\sigma[/math]期待値[math]0[/math]の場合、1つの測定値の誤差が[math]-a[/math][math]a[/math]の間になる確率[math]\operatorname{erf}\,\left(\,\frac{a}{\sigma \sqrt{2}}\,\right)[/math]である。これは、例えば、デジタル通信システムでの符号誤り率の特定などに使える。

誤差関数相補誤差関数は例えば、境界条件ヘヴィサイドの階段関数で与えたときの熱方程式に出現する。

漸近展開

相補誤差関数(および誤差関数)の大きな[math]x[/math]についての漸近展開は次のようになる。

[math]\mathrm{erfc}\left(x\right) = \frac{e^{-x^2}}{x\sqrt{\pi}}\left [1+\sum_{n=1}^\infty (-1)^n \frac{1\cdot3\cdot5\cdots(2n-1)}{(2x^2)^n}\right ]=\frac{e^{-x^2}}{x\sqrt{\pi}}\sum_{n=0}^\infty (-1)^n \frac{(2n)!}{n!(2x)^{2n}}\,[/math]

この級数有限な[math]x[/math]については発散する。しかし、最初の方の幾つかのだけで[math]\operatorname{erfc}\left(x\right)[/math]のよい近似が得られ、テイラー展開よりも収束が早い。

初等関数による近似

次のような近似がある。

[math]\operatorname{erf}^2\left(x\right)\approx 1-\exp\left(-x^2\frac{4/\pi+ax^2}{1+ax^2}\right)[/math]

ここで、

[math]a=-\frac{8\left(\pi-3\right)}{3\pi\left(\pi-4\right)}[/math]

このような近似(曲線あてはめ)は、実軸付近の誤差関数の値について、少なくとも十進で1桁の精度はある。

関連する関数

誤差関数正規分布累積分布関数(CDF)[math]\Phi[/math]と基本的には同じであり、単にスケールと解釈が異なるだけである。実際、標準正規分布について次の関係が成り立つ。

[math]\Phi\left(x\right) = \frac{1}{2}\left[1+\mbox{erf}\left(\frac{x}{\sqrt{2}}\right)\right]=\frac{1}{2}\,\mbox{erfc}\left(-\frac{x}{\sqrt{2}}\right)[/math]

また、[math]\operatorname{erf}[/math]および[math]\operatorname{erfc}[/math]について変形すると次のようになる。

[math]\begin{align} \mathrm{erf}\left(x\right) &= 2 \Phi \left ( x \sqrt{2} \right ) - 1 \\ \mathrm{erfc}\left(x\right) &= 2 \left[ 1 - \Phi \left ( x \sqrt{2} \right )\right] \end{align}[/math]

従って、誤差関数は、正規分布におけるテール確率であるQ関数とも密接に関連する。Q関数は誤差関数を使って次のように表現できる。

[math] Q\left(x\right) =\frac{1}{2} - \frac{1}{2} \operatorname{erf} \Bigl( \frac{x}{\sqrt{2}} \Bigr) [/math]

[math]\Phi\,[/math]逆関数標準分位関数またはプロビット関数として知られており、逆誤差関数を使って次のように表現できる。

[math] \operatorname{probit}(p) = \Phi^{-1}(p) = \sqrt{2}\,\operatorname{erf}^{-1}(2p-1) = -\sqrt{2}\,\operatorname{erfc}^{-1}(2p) [/math]

確率論統計学では標準正規分布の累積分布関数の方がよく使われ、誤差関数は他の数学の分野で使われる傾向がある。

誤差関数ミッタク=レフラー関数の特殊ケースであり、合流型超幾何微分方程式としても以下のように表現できる。

[math]\mathrm{erf}\left(x\right)= \frac{2x}{\sqrt{\pi}}\,_1F_1\left(\frac{1}{2},\frac{3}{2},-x^2\right)[/math]

フレネル積分を使った単純な表現法もある。正規化ガンマ関数[math]P[/math]不完全ガンマ関数を使うと、次のように表せる。

[math]\operatorname{erf}\left(x\right)=\operatorname{sgn}\left(x\right) P\left(\frac{1}{2}, x^2\right)={\operatorname{sgn}\left(x\right) \over \sqrt{\pi}}\gamma\left(\frac{1}{2}, x^2\right)[/math]

[math]\operatorname{sgn}\left(x\right) \ [/math]符号関数である。

一般化された誤差関数

ファイル:Error Function Generalised.svg
一般化された誤差関数[math]E_{n}\left(x\right)[/math]のグラフ:
灰色: [math]E_{1}\left(x\right)=\frac{\left(1-\exp^{-x}\right)}{\sqrt{\pi}}[/math]
赤: [math]E_{2}\left(x\right)=\operatorname{erf}\left(x\right)[/math]
緑: [math]E_{3}\left(x\right)[/math]
青: [math]E_{4}\left(x\right)[/math]
金: [math]E_{5}\left(x\right)[/math]

書籍によっては、より一般化した関数を論じている場合もある。

[math]E_n\left(x\right) = \frac{n!}{\sqrt{\pi}} \int_0^x e^{-t^n}\,\mathrm dt =\frac{n!}{\sqrt{\pi}}\sum_{p=0}^\infin(-1)^p\frac{x^{np+1}}{(np+1)p!}\,[/math]

例えば、

  • [math]E_{0}\left(x\right)[/math]原点を通る直線[math]E_{0}\left(x\right)=\frac{x}{\exp\sqrt{\pi}}[/math] となる。
  • [math]E_{2}\left(x\right)[/math]誤差関数[math]\operatorname{erf}\left(x\right)[/math]である。

[math]n![/math]割ると、奇数[math]n[/math]についての[math]E_{n}[/math]は互いに似たようなものになる(完全に一致する事は無い)。 同様に、偶数[math]n[/math]についての[math]E_{n}[/math][math]n![/math]で割ると互いに似たものになる(完全に一致する事は無い)。 [math]n\gt 0[/math]での全ての一般化された誤差関数[math]x[/math]のときのグラフは互いに似ている。

これらの一般化された誤差関数x > 0 の場合にガンマ関数不完全ガンマ関数を使って次のように表せる。

[math]E_n\left(x\right) = \frac{\Gamma(n)\left(\Gamma\left(\frac{1}{n}\right)-\Gamma\left(\frac{1}{n},x^n\right)\right)}{\sqrt\pi}, \quad \quad x\gt 0[/math]

従って、誤差関数は不完全ガンマ関数を使って次のように表せる。

[math]\operatorname{erf}\left(x\right) = 1 - \frac{\Gamma\left(\frac{1}{2},x^2\right)}{\sqrt\pi}[/math]

相補誤差関数の累次積分

相補誤差関数累次積分は次のように定義される。

[math] \mathrm i^n \operatorname{erfc}\, (z) = \int_z^\infty \mathrm i^{n-1} \operatorname{erfc}\, (\zeta)\;\mathrm d \zeta\, [/math]

これらには次のような冪級数がある。

[math] \mathrm i^n \operatorname{erfc}\, (z) = \sum_{j=0}^\infty \frac{(-z)^j}{2^{n-j}j! \Gamma \left( 1 + \frac{n-j}{2}\right)}\, [/math]

ここから次のような対称性が得られる。

[math] \mathrm i^{2m} \operatorname{erfc} (-z) = - \mathrm i^{2m} \operatorname{erfc}\, (z) + \sum_{q=0}^m \frac{z^{2q}}{2^{2(m-q)-1}(2q)! (m-q)!} [/math]

および、

[math] \mathrm i^{2m+1} \operatorname{erfc} (-z) = \mathrm i^{2m+1} \operatorname{erfc}\, (z) + \sum_{q=0}^m \frac{z^{2q+1}}{2^{2(m-q)-1}(2q+1)! (m-q)!}\, [/math]

実装

C言語の場合、C99ヘッダファイル<math.h>double erf(double x)およびdouble erfc(double x)という関数が宣言されている。 {erff(), erfcf()}という関数ペアはfloat型のを扱い、{erfl(), erfcl()}という関数ペアはlong double型の値を扱う。 C++でも、C++11<cmath>ヘッダファイルerfおよびerfcが宣言されている。doublefloatおよびlong double型がオーバーロードされている。

複素数を扱える誤差関数の実装は少ない。例えば、図2のようなグラフの描画は、Mathematicaを一般的な性能のコンピュータで実行した場合に数分かかる。

FORTRANでは、例えば、GFortranERF(X)と倍精度のDERF(X)を提供している。

数表

x erf(x) erfc(x) x erf(x) erfc(x)
0.00 0.0000000 1.0000000 1.30 0.9340079 0.0659921
0.05 0.0563720 0.9436280 1.40 0.9522851 0.0477149
0.10 0.1124629 0.8875371 1.50 0.9661051 0.0338949
0.15 0.1679960 0.8320040 1.60 0.9763484 0.0236516
0.20 0.2227026 0.7772974 1.70 0.9837905 0.0162095
0.25 0.2763264 0.7236736 1.80 0.9890905 0.0109095
0.30 0.3286268 0.6713732 1.90 0.9927904 0.0072096
0.35 0.3793821 0.6206179 2.00 0.9953223 0.0046777
0.40 0.4283924 0.5716076 2.10 0.9970205 0.0029795
0.45 0.4754817 0.5245183 2.20 0.9981372 0.0018628
0.50 0.5204999 0.4795001 2.30 0.9988568 0.0011432
0.55 0.5633234 0.4366766 2.40 0.9993115 0.0006885
0.60 0.6038561 0.3961439 2.50 0.9995930 0.0004070
0.65 0.6420293 0.3579707 2.60 0.9997640 0.0002360
0.70 0.6778012 0.3221988 2.70 0.9998657 0.0001343
0.75 0.7111556 0.2888444 2.80 0.9999250 0.0000750
0.80 0.7421010 0.2578990 2.90 0.9999589 0.0000411
0.85 0.7706681 0.2293319 3.0 0.9999779 0.0000221
0.90 0.7969082 0.2030918 3.10 0.9999884 0.0000116
0.95 0.8208908 0.1791092 3.20 0.9999940 0.0000060
1.00 0.8427008 0.1572992 3.30 0.9999969 0.0000031
1.10 0.8802051 0.1197949 3.40 0.9999985 0.0000015
1.20 0.9103140 0.0896860 3.50 0.9999993 0.0000007

関連項目

脚注・出典

  1. 1.0 1.1 W. J. Cody, "Algorithm 715: SPECFUN—A portable FORTRAN package of special function routines and test drivers," ACM Trans. Math. Soft. 19, pp. 22–32 (1993).
  2. M. R. Zaghloul, "On the calculation of the Voigt line profile: a single proper integral with a damped sine integrand," Monthly Notices of the Royal Astronomical Society '375, pp. 1043–1048 (2007).
  3. InverseErf functions.wolfram.com

参考文献

外部リンク