誤差関数
誤差関数(ごさかんすう、英: 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]
Contents
特性
誤差関数は奇関数である。
任意の複素数[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 となる。)
なお、誤差関数の正と負の無限大での値はそれぞれ正と負の[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] は符号関数である。
一般化された誤差関数
[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
が宣言されている。double
、float
およびlong double
型がオーバーロードされている。
複素数を扱える誤差関数の実装は少ない。例えば、図2のようなグラフの描画は、Mathematicaを一般的な性能のコンピュータで実行した場合に数分かかる。
FORTRANでは、例えば、GFortran がERF(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.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).
- ↑ 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).
- ↑ InverseErf functions.wolfram.com
参考文献
- Milton Abramowitz and Irene A. Stegun, eds. Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables. New York: Dover, 1972. (See Chapter 7)
- Ian Gallagher Mathematician (FIU) Miami article 795.S Golden Panther Times July 11, 2008.