Error function: Difference between revisions
imported>Shuisman m applied function application brackets consistently throughout the article |
imported>Dmt137 m →Approximation with elementary functions: comma at the wrong place |
||
| (One intermediate revision by one other user not shown) | |||
| Line 3: | Line 3: | ||
{{Distinguish|Loss function}} | {{Distinguish|Loss function}} | ||
In mathematics, the '''error function''' (also called the '''Gauss error function'''), often denoted by '''{{math|erf}}''', is a function <math>\mathrm{erf}: \mathbb{C} \to \mathbb{C}</math> defined as:<ref>{{cite book|last =Andrews|first = Larry C.|url = https://books.google.com/books?id=2CAqsF-RebgC&pg=PA110 |title = Special functions of mathematics for engineers|page = 110|publisher = SPIE Press |date= 1998|isbn = 9780819426161}}</ref> | In mathematics, the '''error function''' (also called the '''Gauss error function'''), often denoted by '''{{math|erf}}''', is a function <math>\mathrm{erf}: \mathbb{C} \to \mathbb{C}</math> defined as:<ref>{{cite book|last =Andrews|first = Larry C.|url = https://books.google.com/books?id=2CAqsF-RebgC&pg=PA110 |title = Special functions of mathematics for engineers|page = 110|publisher = SPIE Press |date= 1998|isbn = 9780819426161}}</ref> | ||
<math display="block">\operatorname{erf}(z) = \frac{2}{\sqrt\pi}\int_0^z e^{-t^2}\, | <math display="block">\operatorname{erf}(z) = \frac{2}{\sqrt\pi}\int_0^z e^{-t^2}\,dt.</math> | ||
{{Infobox mathematical function | {{Infobox mathematical function | ||
| name = Error function | | name = Error function | ||
| Line 16: | Line 16: | ||
| parity = Odd | | parity = Odd | ||
| root = 0 | | root = 0 | ||
| derivative = <math>\frac{ | | derivative = <math>\frac{d}{dz}\operatorname{erf}(z) = \frac{2}{\sqrt\pi} e^{-z^2} </math> | ||
| antiderivative = <math>\int \operatorname{erf}(z)\,dz = z \operatorname{erf}(z) + \frac{e^{-z^2}}{\sqrt\pi} + C</math> | | antiderivative = <math>\int \operatorname{erf}(z)\,dz = z \operatorname{erf}(z) + \frac{e^{-z^2}}{\sqrt\pi} + C</math> | ||
| taylor_series = <math>\operatorname{erf}(z) = \frac{2}{\sqrt\pi} \sum_{n=0}^\infty \frac{(-1)^n}{2n+1} \frac{z^{2n+1}}{n!}</math> | | taylor_series = <math>\operatorname{erf}(z) = \frac{2}{\sqrt\pi} \sum_{n=0}^\infty \frac{(-1)^n}{2n+1} \frac{z^{2n+1}}{n!}</math> | ||
}} | }} | ||
The integral here is a complex [[Contour integration|contour integral]] which is path-independent because <math>\exp(-t^2)</math> is [[Holomorphic function|holomorphic]] on the whole complex plane <math>\mathbb{C}</math>. In many applications, the function argument is a real number, in which case the function value is also real. | The integral here is a complex [[Contour integration|contour integral]] which is path-independent because <math>\exp(-t^2)</math> is [[Holomorphic function|holomorphic]] on the whole complex plane <math>\mathbb{C}</math>. In many applications, the function argument is a [[real number]], in which case the function value is also real. | ||
In some old texts,<ref>{{cite book |last1=Whittaker |first1=Edmund Taylor |title=A Course of Modern Analysis |title-link=A Course of Modern Analysis |last2=Watson |first2=George Neville |date=2021 |publisher=[[Cambridge University Press]] |isbn=978-1-316-51893-9 |editor-last=Moll |editor-first=Victor Hugo |editor-link=Victor Hugo Moll |edition=5th revised |page=358 |authorlink1=Edmund T. Whittaker |authorlink2=George N. Watson}}</ref> | In some old texts,<ref>{{cite book |last1=Whittaker |first1=Edmund Taylor |title=A Course of Modern Analysis |title-link=A Course of Modern Analysis |last2=Watson |first2=George Neville |date=2021 |publisher=[[Cambridge University Press]] |isbn=978-1-316-51893-9 |editor-last=Moll |editor-first=Victor Hugo |editor-link=Victor Hugo Moll |edition=5th revised |page=358 |authorlink1=Edmund T. Whittaker |authorlink2=George N. Watson}}</ref> | ||
| Line 40: | Line 40: | ||
==Name== | ==Name== | ||
The name "error function" and its abbreviation {{math|erf}} were proposed by [[James Whitbread Lee Glaisher|J. W. L. Glaisher]] in 1871 on account of its connection with "the theory of | The name "error function" and its abbreviation {{math|erf}} were proposed by [[James Whitbread Lee Glaisher|J. W. L. Glaisher]] in 1871 on account of its connection with "the theory of probability, and notably the theory of [[errors and residuals|errors]]".<ref name="Glaisher1871a">{{cite journal |last1=Glaisher |first1=James Whitbread Lee |title= On a class of definite integrals |journal=London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science |date=July 1871 |volume=42 |pages=294–302 |access-date=6 December 2017 |url=https://books.google.com/books?id=8Po7AQAAMAAJ&pg=RA1-PA294 |number=277 |series=4 |doi=10.1080/14786447108640568}}</ref> The error function complement was also discussed by Glaisher in a separate publication in the same year.<ref name="Glaisher1871b">{{cite journal |last1=Glaisher |first1=James Whitbread Lee |title=On a class of definite integrals. Part II |journal=London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science |date=September 1871 |volume=42 |pages=421–436 |access-date=6 December 2017 |url=https://books.google.com/books?id=yJ1YAAAAcAAJ&pg=PA421 |series=4 |number=279 |doi=10.1080/14786447108640600}}</ref> | ||
For the "law of facility" of errors whose [[probability density|density]] is given by | For the "law of facility" of errors whose [[probability density|density]] is given by | ||
<math display="block">f(x) = \left(\frac{c}{\pi}\right)^{1/2} e^{-c x^2}</math> | <math display="block"> | ||
(the [[normal distribution]]), Glaisher calculates the probability of an error lying between {{mvar|p}} and {{mvar|q}} as | f(x) = \left(\frac{c}{\pi}\right)^{1/2} e^{-c x^2} | ||
<math display="block">\left(\frac{c}{\pi}\right)^\frac{1}{2} \int_p^qe^{-cx^2}\, | </math> | ||
(the [[normal distribution]]), Glaisher calculates the probability of an error lying between {{mvar|p}} and {{mvar|q}} as | |||
<math display="block"> | |||
\left(\frac{c}{\pi}\right)^\frac{1}{2} \int_p^qe^{-cx^2}\,dx = | |||
\frac{1}{2} \big(\operatorname{erf}(q\sqrt{c}) - \operatorname{erf}(p\sqrt{c})\big). | |||
</math> | |||
==Applications== | ==Applications== | ||
| Line 52: | Line 56: | ||
The error and complementary error functions occur, for example, in solutions of the [[heat equation]] when [[boundary condition]]s are given by the [[Heaviside step function]]. | The error and complementary error functions occur, for example, in solutions of the [[heat equation]] when [[boundary condition]]s are given by the [[Heaviside step function]]. | ||
The error function and its approximations can be used to estimate results that hold [[with high probability]] or with low probability. Given a random variable {{math|''X'' ~ Norm[''μ'',''σ'']}} (a normal distribution with mean {{mvar|μ}} and standard deviation {{mvar|σ}}) and a constant {{math|''L'' > ''μ''}}, it can be shown via integration by substitution: | The error function and its approximations can be used to estimate results that hold [[with high probability]] or with low probability. Given a random variable {{math|''X'' ~ Norm[''μ'',''σ'']}} (a normal distribution with mean {{mvar|μ}} and standard deviation {{mvar|σ}}) and a constant {{math|''L'' > ''μ''}}, it can be shown via [[integration by substitution]]: | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\Pr[X\leq L] &= \frac{1}{2} + \frac{1}{2} \operatorname{erf}\left(\frac{L-\mu}{\sqrt{2}\sigma}\right) \\ | \Pr[X\leq L] &= \frac{1}{2} + \frac{1}{2} \operatorname{erf}\left(\frac{L-\mu}{\sqrt{2}\sigma}\right) \\ | ||
| Line 66: | Line 70: | ||
The probability for {{mvar|X}} being in the interval {{closed-closed|''L<sub>a</sub>'', ''L<sub>b</sub>''}} can be derived as | The probability for {{mvar|X}} being in the interval {{closed-closed|''L<sub>a</sub>'', ''L<sub>b</sub>''}} can be derived as | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\Pr[L_a\leq X \leq L_b] &= \int_{L_a}^{L_b} \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) \, | \Pr[L_a\leq X \leq L_b] &= \int_{L_a}^{L_b} \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) \, dx \\ | ||
&= \frac{1}{2}\left(\operatorname{erf}\left(\frac{L_b-\mu}{\sqrt{2}\sigma}\right) - \operatorname{erf}\left(\frac{L_a-\mu}{\sqrt{2}\sigma}\right)\right).\end{align}</math> | &= \frac{1}{2}\left(\operatorname{erf}\left(\frac{L_b-\mu}{\sqrt{2}\sigma}\right) - \operatorname{erf}\left(\frac{L_a-\mu}{\sqrt{2}\sigma}\right)\right).\end{align}</math> | ||
| Line 102: | Line 106: | ||
\end{align}</math> | \end{align}</math> | ||
which holds for every [[complex number]] {{mvar|z}}. The denominator terms are sequence [[oeis:A007680|A007680]] in the [[OEIS]]. | which holds for every [[complex number]] {{mvar|z}}. The denominator terms are sequence [[oeis:A007680|A007680]] in the [[OEIS]]. | ||
It is a special case of [[Confluent_hypergeometric_function|Kummer's function]]: | |||
<math> | |||
\operatorname{erf}(z) = \frac{2z}{\surd \pi}{}_1F_1(1/2;3/2;-z^2). | |||
</math> | |||
For iterative calculation of the above series, the following alternative formulation may be useful: | For iterative calculation of the above series, the following alternative formulation may be useful: | ||
| Line 121: | Line 131: | ||
===Derivative and integral=== | ===Derivative and integral=== | ||
The derivative of the error function follows immediately from its definition: | The derivative of the error function follows immediately from its definition: | ||
<math display="block">\frac{ | <math display="block">\frac{d}{dz}\operatorname{erf}(z) =\frac{2}{\sqrt\pi} e^{-z^2}.</math> | ||
From this, the derivative of the imaginary error function is also immediate: | From this, the derivative of the imaginary error function is also immediate: | ||
<math display="block">\frac{d}{dz}\operatorname{erfi}(z) =\frac{2}{\sqrt\pi} e^{z^2}.</math> | <math display="block">\frac{d}{dz}\operatorname{erfi}(z) =\frac{2}{\sqrt\pi} e^{z^2}.</math>Higher order derivatives are given by | ||
<math display="block">\operatorname{erf}^{(k)}(z) = \frac{2 (-1)^{k-1}}{\sqrt\pi} \mathit{H}_{k-1}(z) e^{-z^2} = \frac{2}{\sqrt\pi} \frac{d^{k-1}}{dz^{k-1}} \left(e^{-z^2}\right),\qquad k=1, 2, \dots</math> | |||
where {{mvar|H}} are the physicists' [[Hermite polynomials]].<ref>{{mathworld|title=Erf|urlname=Erf}}</ref> | |||
An [[antiderivative]] of the error function, obtainable by [[integration by parts]], is | An [[antiderivative]] of the error function, obtainable by [[integration by parts]], is | ||
<math display="block">z\operatorname{erf}(z) + \frac{e^{-z^2}}{\sqrt\pi}+C.</math> | <math display="block">\int \operatorname{erf}(z) dz = z\operatorname{erf}(z) + \frac{e^{-z^2}}{\sqrt\pi}+C.</math> | ||
An antiderivative of the imaginary error function, also obtainable by integration by parts, is | An antiderivative of the imaginary error function, also obtainable by integration by parts, is | ||
<math display="block"> | <math display="block">\int \operatorname{erfi}(z) dz = z\operatorname{erfi}(z) - \frac{e^{z^2}}{\sqrt\pi}+C.</math> | ||
===Bürmann series=== | ===Bürmann series=== | ||
| Line 140: | Line 150: | ||
&= \frac{2}{\sqrt\pi} \sgn(x) \cdot \sqrt{1-e^{-x^2}} \left(\frac{\sqrt\pi}{2} + \sum_{k=1}^\infty c_k e^{-kx^2} \right). | &= \frac{2}{\sqrt\pi} \sgn(x) \cdot \sqrt{1-e^{-x^2}} \left(\frac{\sqrt\pi}{2} + \sum_{k=1}^\infty c_k e^{-kx^2} \right). | ||
\end{align}</math> | \end{align}</math> | ||
where {{math|sgn}} is the [[sign function]]. By keeping only the first two coefficients and choosing {{math|1=''c''<sub>1</sub> = {{sfrac|31|200}}}} and {{math|1=''c''<sub>2</sub> = −{{sfrac|341|8000}}}}, the resulting approximation shows its largest relative error at {{math|1=''x'' = ±1.40587}}, where it is less than 0.0034361: | where {{math|sgn}} is the [[sign function]]. By keeping only the first two coefficients and choosing {{math|1=''c''<sub>1</sub> = {{sfrac|31|200}}}} and {{math|1=''c''<sub>2</sub> = −{{sfrac|341|8000}}}}, the resulting approximation shows its largest [[Approximation error|relative error]] at {{math|1=''x'' = ±1.40587}}, where it is less than 0.0034361: | ||
<math display="block">\operatorname{erf}(x) \approx \frac{2}{\sqrt\pi}\sgn(x) \cdot \sqrt{1-e^{-x^2}} \left(\frac{\sqrt{\pi}}{2} + \frac{31}{200}e^{-x^2}-\frac{341}{8000} e^{-2x^2}\right). </math> | <math display="block">\operatorname{erf}(x) \approx \frac{2}{\sqrt\pi}\sgn(x) \cdot \sqrt{1-e^{-x^2}} \left(\frac{\sqrt{\pi}}{2} + \frac{31}{200}e^{-x^2}-\frac{341}{8000} e^{-2x^2}\right). </math> | ||
| Line 149: | Line 159: | ||
<math display="block">\operatorname{erf}\left(\operatorname{erf}^{-1}(x)\right) = x.</math> | <math display="block">\operatorname{erf}\left(\operatorname{erf}^{-1}(x)\right) = x.</math> | ||
The '''inverse error function''' is usually defined with domain {{open-open|−1,1}}, and it is restricted to this domain in many computer algebra systems. However, it can be extended to the disk {{math|{{abs|''z''}} < 1}} of the complex plane, using the Maclaurin series<ref>{{cite arXiv | last1 = Dominici | first1 = Diego | title = Asymptotic analysis of the derivatives of the inverse error function | eprint = math/0607230 | year = 2006}}</ref> | The '''inverse error function''' is usually defined with domain {{open-open|−1,1}}, and it is restricted to this domain in many [[computer algebra]] systems. However, it can be extended to the disk {{math|{{abs|''z''}} < 1}} of the complex plane, using the Maclaurin series<ref>{{cite arXiv | last1 = Dominici | first1 = Diego | title = Asymptotic analysis of the derivatives of the inverse error function | eprint = math/0607230 | year = 2006 }}</ref> | ||
<math display="block">\operatorname{erf}^{-1}(z)=\sum_{k=0}^\infty\frac{c_k}{2k+1}\left (\frac{\sqrt\pi}{2}z\right )^{2k+1},</math> | <math display="block">\operatorname{erf}^{-1}(z)=\sum_{k=0}^\infty\frac{c_k}{2k+1}\left (\frac{\sqrt\pi}{2}z\right )^{2k+1},</math> | ||
where {{math|1=''c''<sub>0</sub> = 1}} and | where {{math|1=''c''<sub>0</sub> = 1}} and | ||
| Line 165: | Line 175: | ||
The '''inverse complementary error function''' is defined as | The '''inverse complementary error function''' is defined as | ||
<math display="block">\operatorname{erfc}^{-1}(1-z) = \operatorname{erf}^{-1}(z).</math> | <math display="block">\operatorname{erfc}^{-1}(1-z) = \operatorname{erf}^{-1}(z).</math> | ||
For real {{mvar|x}}, there is a unique ''real'' number {{math|erfi<sup>−1</sup>(''x'')}} satisfying {{math|1=erfi(erfi<sup>−1</sup>(''x'')) = ''x''}}. The '''inverse imaginary error function''' is defined as {{math|erfi<sup>−1</sup>(''x'')}}.<ref>{{cite arXiv | last1 = Bergsma | first1 = Wicher | title = On a new correlation coefficient, its orthogonal decomposition and associated tests of independence | eprint = math/0604627 | year = 2006}}</ref> | For real {{mvar|x}}, there is a unique ''real'' number {{math|erfi<sup>−1</sup>(''x'')}} satisfying {{math|1=erfi(erfi<sup>−1</sup>(''x'')) = ''x''}}. The '''inverse imaginary error function''' is defined as {{math|erfi<sup>−1</sup>(''x'')}}.<ref>{{cite arXiv | last1 = Bergsma | first1 = Wicher | title = On a new correlation coefficient, its orthogonal decomposition and associated tests of independence | eprint = math/0604627 | year = 2006 }}</ref> | ||
For any real ''x'', [[Newton's method]] can be used to compute {{math|erfi<sup>−1</sup>(''x'')}}, and for {{math|−1 ≤ ''x'' ≤ 1}}, the following Maclaurin series converges: | For any real ''x'', [[Newton's method]] can be used to compute {{math|erfi<sup>−1</sup>(''x'')}}, and for {{math|−1 ≤ ''x'' ≤ 1}}, the following Maclaurin series converges: | ||
| Line 210: | Line 220: | ||
\end{align}</math> | \end{align}</math> | ||
{{math|''z''<sup>{{overline|''n''}}</sup>}} denotes the [[rising factorial]], and {{math|''s''(''n'',''k'')}} denotes a signed [[Stirling number of the first kind]].<ref>{{cite journal|last=Schlömilch|first=Oskar Xavier | author-link=Oscar Schlömilch|year=1859|title=Ueber facultätenreihen|url=https://archive.org/details/zeitschriftfrma09runggoog | journal=[[:de:Zeitschrift für Mathematik und Physik|Zeitschrift für Mathematik und Physik]] | language=de | volume=4 | pages=390–415}}</ref><ref>{{cite book | last=Nielson | first=Niels | url=https://archive.org/details/handbuchgamma00nielrich | title=Handbuch der Theorie der Gammafunktion | date=1906 | publisher=B. G. Teubner | location=Leipzig|language=de|access-date=2017-12-04|at=p. 283 Eq. 3}}</ref> | {{math|''z''<sup>{{overline|''n''}}</sup>}} denotes the [[rising factorial]], and {{math|''s''(''n'',''k'')}} denotes a signed [[Stirling number of the first kind]].<ref>{{cite journal|last=Schlömilch|first=Oskar Xavier | author-link=Oscar Schlömilch|year=1859|title=Ueber facultätenreihen|url=https://archive.org/details/zeitschriftfrma09runggoog | journal=[[:de:Zeitschrift für Mathematik und Physik|Zeitschrift für Mathematik und Physik]] | language=de | volume=4 | pages=390–415}}</ref><ref>{{cite book | last=Nielson | first=Niels | url=https://archive.org/details/handbuchgamma00nielrich | title=Handbuch der Theorie der Gammafunktion | date=1906 | publisher=B. G. Teubner | location=Leipzig|language=de|access-date=2017-12-04|at=p. 283 Eq. 3}}</ref> | ||
The Taylor series can be written in terms of the [[double factorial]]: | |||
<math display="block">\operatorname{erf}(z) = \frac{2}{\sqrt\pi} \sum_{n=0}^\infty \frac{(-2)^n(2n-1)!!}{(2n+1)!}z^{2n+1}</math> | <math display="block">\operatorname{erf}(z) = \frac{2}{\sqrt\pi} \sum_{n=0}^\infty \frac{(-2)^n(2n-1)!!}{(2n+1)!}z^{2n+1}</math> | ||
== Bounds and | == Bounds and numerical approximations == | ||
===Approximation with elementary functions=== | ===Approximation with elementary functions=== | ||
[[Abramowitz and Stegun]] give several approximations of varying accuracy (equations 7.1.25–28). This allows one to choose the fastest approximation suitable for a given application. In order of increasing accuracy, they are: | [[Abramowitz and Stegun]] give several approximations of varying accuracy (equations 7.1.25–28). This allows one to choose the fastest approximation suitable for a given application. In order of increasing accuracy, they are: | ||
<math display="block">\operatorname{erf}(x) \approx 1 - \frac{1}{\left(1 + a_1x + a_2x^2 + a_3x^3 + a_4x^4\right)^4}, \qquad x \geq 0</math> | <math display="block">\operatorname{erf}(x) \approx 1 - \frac{1}{\left(1 + a_1x + a_2x^2 + a_3x^3 + a_4x^4\right)^4}, \qquad x \geq 0</math> | ||
| Line 239: | Line 248: | ||
where {{math|''p'' {{=}} 0.3275911}}, {{math|''a''<sub>1</sub> {{=}} 0.254829592}}, {{math|''a''<sub>2</sub> {{=}} −0.284496736}}, {{math|''a''<sub>3</sub> {{=}} 1.421413741}}, {{math|''a''<sub>4</sub> {{=}} −1.453152027}}, {{math|''a''<sub>5</sub> {{=}} 1.061405429}} | where {{math|''p'' {{=}} 0.3275911}}, {{math|''a''<sub>1</sub> {{=}} 0.254829592}}, {{math|''a''<sub>2</sub> {{=}} −0.284496736}}, {{math|''a''<sub>3</sub> {{=}} 1.421413741}}, {{math|''a''<sub>4</sub> {{=}} −1.453152027}}, {{math|''a''<sub>5</sub> {{=}} 1.061405429}} | ||
{{pb}} | {{pb}} | ||
One can improve the accuracy of the A&S approximation by extending it with three extra parameters, | |||
<math display="block">\operatorname{erf}(x) \approx 1 - \left(a_1t + a_2t^2 + \cdots + a_5t^5+a_6t^6+a_7t^7\right)e^{-x^2},\quad t = \frac{1}{1 + p_1x+p_2x^2}</math> | |||
where p1 = 0.406742016006509, | |||
p2 = 0.0072279182302319, | |||
a1 = 0.316879890481381, | |||
a2 = -0.138329314150635, | |||
a3 = 1.08680830347054, | |||
a4 = -1.11694155120396, | |||
a5 = 1.20644903073232, | |||
a6 = -0.393127715207728, | |||
a7 = 0.0382613542530727. | |||
The maximum error of this approximation is about {{val|2e-9}}. The parameters are obtained by fitting the extended approximation to the accurate values of the error function using the following Python code. | |||
{{collapse top|title=Python code to fit extended A&S approximation|collapsed=yes}} | |||
<syntaxhighlight lang="python"> | |||
import numpy as np | |||
from math import erf, exp, sqrt | |||
from scipy.optimize import least_squares | |||
# | |||
# Extended A&S approximation: | |||
# erf(x) ≈ 1 − t * exp(−x^2) * (a1 + a2*t + a3*t^2 + ... + a7*t^6) | |||
# where now | |||
# t = 1 / (1 + p1*x + p2*x^2) | |||
# We fit parameters p1, p2, a1..a7 over x in [0, 10]. | |||
# | |||
def approx_erf(params, x): | |||
p1 = params[0] | |||
p2 = params[1] | |||
a = params[2:] | |||
t = 1.0 / (1.0 + p1 * x + p2 * x * x) | |||
poly = np.zeros_like(x) | |||
tt = np.ones_like(x) # t^0 | |||
# polynomial: a1*t^0 + a2*t^1 + ... + a7*t^6 | |||
for ak in a: | |||
poly += ak * tt | |||
tt *= t | |||
return 1.0 - t * np.exp(-x * x) * poly | |||
def residuals(params, xs, ys): | |||
return approx_erf(params, xs) - ys | |||
# | |||
# Prepare data for fitting | |||
# | |||
N = 300 | |||
xmin = 0 | |||
xmax = 10 | |||
xs = np.linspace(xmin, xmax, N) | |||
ys = np.array([erf(x) for x in xs], dtype=float) | |||
# | |||
# Initial guess for parameters | |||
# Start from original A&S values and extend them conservatively | |||
# | |||
p1_0 = 0.3275911 # original A&S p | |||
p2_0 = 0.0 # new denominator parameter | |||
# original A&S 5 coefficients, add two => 7 in total | |||
a0 = [ | |||
0.254829592, | |||
-0.284496736, | |||
1.421413741, | |||
-1.453152027, | |||
1.061405429, | |||
0.0, # new term | |||
0.0, # another new term | |||
] | |||
params0 = np.array([p1_0, p2_0] + a0, dtype=float) | |||
# | |||
# Fit using nonlinear least squares (Levenberg–Marquardt) | |||
# | |||
result = least_squares( | |||
residuals, params0, args=(xs, ys), xtol=1e-14, ftol=1e-14, gtol=1e-14, max_nfev=5000 | |||
) | |||
params = result.x | |||
p1_fit = params[0] | |||
p2_fit = params[1] | |||
a_fit = params[2:] | |||
# | |||
# Print fitted parameters | |||
# | |||
print("\nFitted parameters:") | |||
print(f"p1 = {p1_fit:.15g},") | |||
print(f"p2 = {p2_fit:.15g},") | |||
for i, ai in enumerate(a_fit, 1): | |||
print(f"a{i} = {ai:.15g},") | |||
# | |||
# Evaluate approximation error | |||
# | |||
approx_vals = approx_erf(params, xs) | |||
abs_err = np.abs(approx_vals - ys) | |||
print(f"\nMaximum absolute error on [{xmin},{xmax}]:", np.max(abs_err)) | |||
print("RMS error:", np.sqrt(np.mean(abs_err**2))) | |||
print("Done.") | |||
</syntaxhighlight> | |||
{{collapse bottom}} | |||
All of these approximations are valid for {{math|''x'' ≥ 0}}. To use these approximations for negative {{mvar|x}}, use the fact that {{math|erf(''x'')}} is an odd function, so {{math|erf(''x'') {{=}} −erf(−''x'')}}. | All of these approximations are valid for {{math|''x'' ≥ 0}}. To use these approximations for negative {{mvar|x}}, use the fact that {{math|erf(''x'')}} is an odd function, so {{math|erf(''x'') {{=}} −erf(−''x'')}}. | ||
Exponential bounds and a pure exponential approximation for the complementary error function are given by<ref>{{cite journal |url = http://campus.unibo.it/85943/1/mcddmsTranWIR2003.pdf |last1= Chiani|first1= M.|last2= Dardari|first2= D. |last3=Simon |first3= M.K.|date = 2003 |title = New Exponential Bounds and Approximations for the Computation of Error Probability in Fading Channels|journal = IEEE Transactions on Wireless Communications|volume = 2|number=4|pages = 840–845| doi=10.1109/TWC.2003.814350 | citeseerx= 10.1.1.190.6761}}</ref> | Exponential bounds and a pure exponential approximation for the complementary error function are given by<ref>{{cite journal |url = http://campus.unibo.it/85943/1/mcddmsTranWIR2003.pdf |last1= Chiani|first1= M.|last2= Dardari|first2= D. |last3=Simon |first3= M.K.|date = 2003 |title = New Exponential Bounds and Approximations for the Computation of Error Probability in Fading Channels|journal = IEEE Transactions on Wireless Communications|volume = 2|number=4|pages = 840–845| doi=10.1109/TWC.2003.814350 |bibcode= 2003ITWC....2..840C| citeseerx= 10.1.1.190.6761}}</ref> | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\operatorname{erfc}(x) &\leq \frac{1}{2}e^{-2 x^2} + \frac{1}{2}e^{- x^2} \leq e^{-x^2}, &\quad x &> 0 \\[1.5ex] | \operatorname{erfc}(x) &\leq \frac{1}{2}e^{-2 x^2} + \frac{1}{2}e^{- x^2} \leq e^{-x^2}, &\quad x &> 0 \\[1.5ex] | ||
\operatorname{erfc}(x) &\approx \frac{1}{6}e^{-x^2} + \frac{1}{2}e^{-\frac{4}{3} x^2}, &\quad x &> 0 . | \operatorname{erfc}(x) &\approx \frac{1}{6}e^{-x^2} + \frac{1}{2}e^{-\frac{4}{3} x^2}, &\quad x &> 0 . | ||
\end{align}</math> | \end{align}</math> | ||
The above have been generalized to sums of {{mvar|N}} exponentials<ref>{{cite journal |doi=10.1109/TCOMM.2020.3006902 |title=Global minimax approximations and bounds for the Gaussian Q-function by sums of exponentials|journal=IEEE Transactions on Communications |year=2020 |last1=Tanash |first1=I.M. |last2=Riihonen |first2=T. |volume=68 |issue=10 |pages=6514–6524 |arxiv=2007.06939 |s2cid=220514754}}</ref> with increasing accuracy in terms of {{mvar|N}} so that {{math|erfc(''x'')}} can be accurately approximated or bounded by {{math|2''Q̃''({{sqrt|2}}''x'')}}, where | The above have been generalized to sums of {{mvar|N}} exponentials<ref>{{cite journal |doi=10.1109/TCOMM.2020.3006902 |title=Global minimax approximations and bounds for the Gaussian Q-function by sums of exponentials|journal=IEEE Transactions on Communications |year=2020 |last1=Tanash |first1=I.M. |last2=Riihonen |first2=T. |volume=68 |issue=10 |pages=6514–6524 |arxiv=2007.06939 |bibcode=2020ITCom..68.6514T |s2cid=220514754}}</ref> with increasing accuracy in terms of {{mvar|N}} so that {{math|erfc(''x'')}} can be accurately approximated or bounded by {{math|2''Q̃''({{sqrt|2}}''x'')}}, where | ||
<math display="block">\tilde{Q}(x) = \sum_{n=1}^N a_n e^{-b_n x^2}.</math> | <math display="block">\tilde{Q}(x) = \sum_{n=1}^N a_n e^{-b_n x^2}.</math> | ||
In particular, there is a systematic methodology to solve the numerical coefficients {{math|{(''a<sub>n</sub>'',''b<sub>n</sub>'')}{{su|b=''n'' {{=}} 1|p=''N''}}}} that yield a [[minimax approximation algorithm|minimax]] approximation or bound for the closely related [[Q-function]]: {{math|''Q''(''x'') ≈ ''Q̃''(''x'')}}, {{math|''Q''(''x'') ≤ ''Q̃''(''x'')}}, or {{math|''Q''(''x'') ≥ ''Q̃''(''x'')}} for {{math|''x'' ≥ 0}}. The coefficients {{math|{(''a<sub>n</sub>'',''b<sub>n</sub>'')}{{su|b=''n'' {{=}} 1|p=''N''}}}} for many variations of the exponential approximations and bounds up to {{math|''N'' {{=}} 25}} have been released to open access as a comprehensive dataset.<ref>{{cite journal | doi=10.5281/zenodo.4112978 | title=Coefficients for Global Minimax Approximations and Bounds for the Gaussian Q-Function by Sums of Exponentials [Data set] | url=https://zenodo.org/record/4112978 | website=Zenodo | year=2020 | last1=Tanash | first1=I.M. | last2=Riihonen | first2=T.}}</ref> | In particular, there is a systematic methodology to solve the numerical coefficients {{math|{(''a<sub>n</sub>'',''b<sub>n</sub>'')}{{su|b=''n'' {{=}} 1|p=''N''}}}} that yield a [[minimax approximation algorithm|minimax]] approximation or bound for the closely related [[Q-function]]: {{math|''Q''(''x'') ≈ ''Q̃''(''x'')}}, {{math|''Q''(''x'') ≤ ''Q̃''(''x'')}}, or {{math|''Q''(''x'') ≥ ''Q̃''(''x'')}} for {{math|''x'' ≥ 0}}. The coefficients {{math|{(''a<sub>n</sub>'',''b<sub>n</sub>'')}{{su|b=''n'' {{=}} 1|p=''N''}}}} for many variations of the exponential approximations and bounds up to {{math|''N'' {{=}} 25}} have been released to open access as a comprehensive dataset.<ref>{{cite journal | doi=10.5281/zenodo.4112978 | title=Coefficients for Global Minimax Approximations and Bounds for the Gaussian Q-Function by Sums of Exponentials [Data set] | url=https://zenodo.org/record/4112978 | website=Zenodo | year=2020 | last1=Tanash | first1=I.M. | last2=Riihonen | first2=T.}}</ref> | ||
A tight approximation of the complementary error function for {{math|''x'' ∈ [0,∞)}} is given by [[George Karagiannidis|Karagiannidis]] & Lioumpas (2007)<ref>{{cite journal|last1=Karagiannidis |first1=G. K. |last2=Lioumpas |first2=A. S. |url=http://users.auth.gr/users/9/3/028239/public_html/pdf/Q_Approxim.pdf |title=An improved approximation for the Gaussian Q-function |date=2007 |journal=IEEE Communications Letters |volume=11 |issue=8 |pages=644–646|doi=10.1109/LCOMM.2007.070470 |s2cid=4043576 }}</ref> who showed for the appropriate choice of parameters {{math|{''A'',''B''}<nowiki/>}} that | A tight approximation of the complementary error function for {{math|''x'' ∈ [0,∞)}} is given by [[George Karagiannidis|Karagiannidis]] & Lioumpas (2007)<ref>{{cite journal|last1=Karagiannidis |first1=G. K. |last2=Lioumpas |first2=A. S. |url=http://users.auth.gr/users/9/3/028239/public_html/pdf/Q_Approxim.pdf |title=An improved approximation for the Gaussian Q-function |date=2007 |journal=IEEE Communications Letters |volume=11 |issue=8 |pages=644–646|doi=10.1109/LCOMM.2007.070470 |s2cid=4043576 }}</ref> who showed for the appropriate choice of parameters {{math|{''A'',''B''}<nowiki/>}} that | ||
<math display="block">\operatorname{erfc}(x) \approx \frac{\left(1 - e^{-Ax}\right)e^{-x^2}}{B\sqrt{\pi} x}.</math> | <math display="block">\operatorname{erfc}(x) \approx \frac{\left(1 - e^{-Ax}\right)e^{-x^2}}{B\sqrt{\pi} x}.</math> | ||
They determined {{math|{''A'',''B''} {{=}} {1.98,1.135}<nowiki/>}}, which gave a good approximation for all {{math|''x'' ≥ 0}}. Alternative coefficients are also available for tailoring accuracy for a specific application or transforming the expression into a tight bound.<ref>{{cite journal |doi=10.1109/LCOMM.2021.3052257|title=Improved coefficients for the Karagiannidis–Lioumpas approximations and bounds to the Gaussian Q-function|journal=IEEE Communications Letters | year=2021 | last1=Tanash | first1=I.M.|last2=Riihonen|first2=T.|volume=25|issue=5|pages=1468–1471|arxiv=2101.07631|s2cid=231639206}}</ref | They determined {{math|{''A'',''B''} {{=}} {1.98,1.135}<nowiki/>}}, which gave a good approximation for all {{math|''x'' ≥ 0}}. Alternative coefficients are also available for tailoring accuracy for a specific application or transforming the expression into a tight bound.<ref>{{cite journal |doi=10.1109/LCOMM.2021.3052257|title=Improved coefficients for the Karagiannidis–Lioumpas approximations and bounds to the Gaussian Q-function|journal=IEEE Communications Letters | year=2021 | last1=Tanash | first1=I.M.|last2=Riihonen|first2=T.|volume=25|issue=5|pages=1468–1471|arxiv=2101.07631|bibcode=2021IComL..25.1468T |s2cid=231639206}}</ref> | ||
A single-term lower bound is<ref>{{cite journal |last1=Chang |first1=Seok-Ho |last2=Cosman |first2=Pamela C. |author-link2 = Pamela Cosman |last3=Milstein |first3=Laurence B. |date=November 2011 |title=Chernoff-Type Bounds for the Gaussian Error Function |url=http://escholarship.org/uc/item/6hw4v7pg |journal=IEEE Transactions on Communications |volume=59 |issue=11 |pages=2939–2944 |doi=10.1109/TCOMM.2011.072011.100049 |s2cid=13636638}}</ref> | A single-term lower bound is<ref>{{cite journal |last1=Chang |first1=Seok-Ho |last2=Cosman |first2=Pamela C. |author-link2 = Pamela Cosman |last3=Milstein |first3=Laurence B. |date=November 2011 |title=Chernoff-Type Bounds for the Gaussian Error Function |url=http://escholarship.org/uc/item/6hw4v7pg |journal=IEEE Transactions on Communications |volume=59 |issue=11 |pages=2939–2944 |doi=10.1109/TCOMM.2011.072011.100049 |bibcode=2011ITCom..59.2939C |s2cid=13636638}}</ref> | ||
<math display="block" display="block">\operatorname{erfc}(x) \geq \sqrt{\frac{2 e}{\pi}} \frac{\sqrt{\beta - 1}}{\beta} e^{- \beta x^2}, \qquad x \ge 0,\quad \beta > 1,</math> | <math display="block" display="block">\operatorname{erfc}(x) \geq \sqrt{\frac{2 e}{\pi}} \frac{\sqrt{\beta - 1}}{\beta} e^{- \beta x^2}, \qquad x \ge 0,\quad \beta > 1,</math> | ||
where the parameter {{mvar|β}} can be picked to minimize error on the desired interval of approximation. | where the parameter {{mvar|β}} can be picked to minimize error on the desired interval of approximation. | ||
Another approximation is given by Sergei Winitzki using his "global Padé approximations":<ref>{{cite book |last=Winitzki |first=Sergei |title=Computational Science and Its Applications – ICCSA 2003 |date=2003 |volume=2667 |chapter=Uniform approximations for transcendental functions |publisher=Springer, Berlin |pages=[https://archive.org/details/computationalsci0000iccs_a2w6/page/780 780–789] |isbn=978-3-540-40155-1 |doi=10.1007/3-540-44839-X_82 |chapter-url-access=registration |chapter-url=https://archive.org/details/computationalsci0000iccs_a2w6 |series=Lecture Notes in Computer Science }}</ref><ref>{{cite journal|last1=Zeng |first1=Caibin |last2=Chen |first2=Yang Cuan |title=Global Padé approximations of the generalized Mittag-Leffler function and its inverse |journal=Fractional Calculus and Applied Analysis |date=2015 |volume=18 |issue=6 | pages=1492–1506 |doi= 10.1515/fca-2015-0086 |quote=Indeed, Winitzki [32] provided the so-called global Padé approximation | arxiv=1310.5592 |s2cid=118148950 }}</ref>{{rp|2–3}} | Another approximation is given by Sergei Winitzki using his "global Padé approximations":<ref>{{cite book |last=Winitzki |first=Sergei |title=Computational Science and Its Applications – ICCSA 2003 |date=2003 |volume=2667 |chapter=Uniform approximations for transcendental functions |publisher=Springer, Berlin |pages=[https://archive.org/details/computationalsci0000iccs_a2w6/page/780 780–789] |isbn=978-3-540-40155-1 |doi=10.1007/3-540-44839-X_82 |chapter-url-access=registration |chapter-url=https://archive.org/details/computationalsci0000iccs_a2w6 |series=Lecture Notes in Computer Science }}</ref><ref>{{cite journal|last1=Zeng |first1=Caibin |last2=Chen |first2=Yang Cuan |title=Global Padé approximations of the generalized Mittag-Leffler function and its inverse |journal=Fractional Calculus and Applied Analysis |date=2015 |volume=18 |issue=6 | pages=1492–1506 |doi= 10.1515/fca-2015-0086 |quote=Indeed, Winitzki [32] provided the so-called global Padé approximation | arxiv=1310.5592 |s2cid=118148950 }}</ref>{{rp|2–3}} | ||
<math display="block">\operatorname{erf}(x) \approx \sgn x \cdot \sqrt{1 - \exp\left(-x^2\frac{\frac{4}{\pi} + ax^2}{1 + ax^2}\right)}</math> | <math display="block">\operatorname{erf}(x) \approx \sgn x \cdot \sqrt{1 - \exp\left(-x^2\frac{\frac{4}{\pi} + ax^2}{1 + ax^2}\right)}</math> | ||
| Line 274: | Line 397: | ||
This is designed to be very accurate in a neighborhood of 0 and a neighborhood of infinity, and the ''relative'' error is less than 0.00035 for all real {{mvar|x}}. Using the alternate value {{math|''a'' ≈ 0.147}} reduces the maximum relative error to about 0.00013.<ref>{{Cite web <!-- Deny Citation Bot--> |url=https://www.academia.edu/9730974/A_handy_approximation_for_the_error_function_and_its_inverse |last=Winitzki |first=Sergei |date=6 February 2008 |title=A handy approximation for the error function and its inverse }}</ref> | This is designed to be very accurate in a neighborhood of 0 and a neighborhood of infinity, and the ''relative'' error is less than 0.00035 for all real {{mvar|x}}. Using the alternate value {{math|''a'' ≈ 0.147}} reduces the maximum relative error to about 0.00013.<ref>{{Cite web <!-- Deny Citation Bot--> |url=https://www.academia.edu/9730974/A_handy_approximation_for_the_error_function_and_its_inverse |last=Winitzki |first=Sergei |date=6 February 2008 |title=A handy approximation for the error function and its inverse }}</ref> | ||
{{pb}} | {{pb}} | ||
The extended "global Pade" approximation, | |||
<math display="block">\operatorname{erf}(x) \approx \sgn x \cdot \sqrt{1 - \exp\left(-x^2 | |||
\frac{ | |||
4+0.880877880079853x^2+0.144026670907584x^4+0.0077581300270021x^6 | |||
}{ | |||
\pi+0.786235558186528x^2+0.128368576906837x^4+0.00773380006014367x^6} | |||
\right)}\,,</math> | |||
provides the maximum error of about {{val|2e-9}}, as demonstrated by the following Python script. | |||
{{collapse top|title=Python script to fit extended "global Pade" approximation|collapsed=yes}} | |||
<syntaxhighlight lang="python"> | |||
import numpy,math | |||
from scipy.optimize import least_squares | |||
# approximation to erf(x) | |||
def approx_erf(p,x): | |||
frac=(4+p[0]*x**2+p[1]*x**4+p[2]*x**6)/( | |||
math.pi+p[3]*x**2+p[4]*x**4+p[5]*x**6) | |||
return numpy.sign(x)*numpy.sqrt( | |||
1-numpy.exp(-x*x*frac)) | |||
def residuals(params, xs, ys): | |||
return approx_erf(params, xs) - ys | |||
# data for fitting | |||
N = 200 | |||
xmin = 0 | |||
xmax = 9 | |||
xs = numpy.linspace(xmin, xmax, N) | |||
ys = numpy.array([math.erf(x) for x in xs], dtype=float) | |||
params0 = numpy.array([0.9,0.1,0.008,0.8,0.1,0.008], dtype=float) | |||
# fitting | |||
result = least_squares( | |||
residuals, params0, args=(xs, ys), | |||
xtol=1e-14, ftol=1e-14, gtol=1e-14, max_nfev=5000 | |||
) | |||
params = result.x | |||
# print out fitted parameters | |||
print("\nFitted parameters:") | |||
for i, pi in enumerate(params, 0): | |||
print(f"p{i} = {pi:.15g},") | |||
# evaluate approximation error | |||
approx_vals = approx_erf(params, xs) | |||
abs_err = numpy.abs(approx_vals - ys) | |||
print(f"\nMaximum absolute error on [{xmin},{xmax}]:", numpy.max(abs_err)) | |||
print("RMS error:", numpy.sqrt(numpy.mean(abs_err**2))) | |||
print("Done.") | |||
</syntaxhighlight> | |||
{{collapse bottom}} | |||
The Winitzki's approximation can be inverted to obtain an approximation for the inverse error function: | |||
<math display="block">\operatorname{erf}^{-1}(x) \approx \sgn x \cdot \sqrt{\sqrt{\left(\frac{2}{\pi a} + \frac{\ln\left(1 - x^2\right)}{2}\right)^2 - \frac{\ln\left(1 - x^2\right)}{a}} -\left(\frac{2}{\pi a} + \frac{\ln\left(1 - x^2\right)}{2}\right)}.</math> | <math display="block">\operatorname{erf}^{-1}(x) \approx \sgn x \cdot \sqrt{\sqrt{\left(\frac{2}{\pi a} + \frac{\ln\left(1 - x^2\right)}{2}\right)^2 - \frac{\ln\left(1 - x^2\right)}{a}} -\left(\frac{2}{\pi a} + \frac{\ln\left(1 - x^2\right)}{2}\right)}.</math> | ||
An approximation with a maximal error of {{val|1.2e-7}} for any real argument is:<ref>{{cite book | last = Press | first = William H. | title = Numerical Recipes in Fortran 77: The Art of Scientific Computing | isbn = 0-521-43064-X | year = 1992 | page = 214 | publisher = Cambridge University Press }}</ref> | An approximation with a maximal error of {{val|1.2e-7}} for any real argument is:<ref>{{cite book | last = Press | first = William H. | title = Numerical Recipes in Fortran 77: The Art of Scientific Computing | isbn = 0-521-43064-X | year = 1992 | page = 214 | publisher = Cambridge University Press }}</ref> | ||
<math display="block">\operatorname{erf}(x) = \begin{cases} | <math display="block">\operatorname{erf}(x) = \begin{cases} | ||
| Line 291: | Line 473: | ||
and | and | ||
<math display="block">t = \frac{1}{1 + \frac{1}{2}|x|}.</math> | <math display="block">t = \frac{1}{1 + \frac{1}{2}|x|}.</math> | ||
An approximation of <math>\operatorname{erfc}</math> with a maximum relative error less than <math>2^{-53}</math> <math>\left(\approx 1.1 \times 10^{-16}\right)</math> in absolute value is:<ref>{{Cite journal | last = Dia | first = Yaya D. |date = 2023 | title = Approximate Incomplete Integrals, Application to Complementary Error Function | url = https://www.ssrn.com/abstract=4487559 | journal = SSRN Electronic Journal | language = en | doi = 10.2139/ssrn.4487559 | issn = 1556-5068}}</ref> | |||
for {{nowrap|<math>x\ge 0</math>,}} | for {{nowrap|<math>x\ge 0</math>,}} | ||
<math display="block">\begin{aligned} | <math display="block">\begin{aligned} | ||
| Line 305: | Line 487: | ||
and for <math>x<0</math> | and for <math>x<0</math> | ||
<math display="block">\operatorname{erfc} \left(x\right) = 2 - \operatorname{erfc} \left(-x\right)</math> | <math display="block">\operatorname{erfc} \left(x\right) = 2 - \operatorname{erfc} \left(-x\right)</math> | ||
A simple approximation for real-valued arguments could be done through [[Hyperbolic functions]]: | A simple approximation for real-valued arguments could be done through [[Hyperbolic functions]]: | ||
<math display="block">\operatorname{erf} \left(x\right) \approx z(x) = \tanh\left(\frac{2}{\sqrt{\pi}}\left(x+\frac{11}{123}x^3\right)\right)</math> | <math display="block">\operatorname{erf} \left(x\right) \approx z(x) = \tanh\left(\frac{2}{\sqrt{\pi}}\left(x+\frac{11}{123}x^3\right)\right)</math> | ||
which keeps the absolute difference {{nowrap|<math>\left|\operatorname{erf} \left(x\right)-z(x)\right| < 0.000358,\, \forall x</math>.}} | which keeps the absolute difference {{nowrap|<math>\left|\operatorname{erf} \left(x\right)-z(x)\right| < 0.000358,\, \forall x</math>.}} | ||
Since the error function and the Gaussian Q-function are closely related through the identity <math>\operatorname{erfc}(x) = 2 Q(\sqrt{2} x)</math> or equivalently <math>Q(x) = \frac{1}{2} \operatorname{erfc}\left(\frac{x}{\sqrt{2}}\right)</math>, bounds developed for the Q-function can be adapted to approximate the complementary error function. A pair of tight lower and upper bounds on the Gaussian Q-function for positive arguments <math>x \in [0, \infty)</math> was introduced by Abreu (2012)<ref>{{cite journal |doi=10.1109/TCOMM.2012.080612.110075 |title=Very Simple Tight Bounds on the Q-Function |journal=IEEE Transactions on Communications |volume=60 |issue=9 |pages=2415–2420 |year=2012 |last=Abreu |first=Giuseppe}}</ref> based on a simple algebraic expression with only two exponential terms: | Since the error function and the Gaussian Q-function are closely related through the identity <math>\operatorname{erfc}(x) = 2 Q(\sqrt{2} x)</math> or equivalently <math>Q(x) = \frac{1}{2} \operatorname{erfc}\left(\frac{x}{\sqrt{2}}\right)</math>, bounds developed for the Q-function can be adapted to approximate the complementary error function. A pair of tight lower and upper bounds on the Gaussian Q-function for positive arguments <math>x \in [0, \infty)</math> was introduced by Abreu (2012)<ref>{{cite journal |doi=10.1109/TCOMM.2012.080612.110075 |title=Very Simple Tight Bounds on the Q-Function |journal=IEEE Transactions on Communications |volume=60 |issue=9 |pages=2415–2420 |year=2012 |last=Abreu |first=Giuseppe |bibcode=2012ITCom..60.2415A }}</ref> based on a simple [[algebraic expression]] with only two exponential terms: | ||
<math display="block">Q(x) \geq \frac{1}{12} e^{-x^2} + \frac{1}{\sqrt{2\pi} (x + 1)} e^{-x^2 / 2}, \qquad x \geq 0,</math> | <math display="block">Q(x) \geq \frac{1}{12} e^{-x^2} + \frac{1}{\sqrt{2\pi} (x + 1)} e^{-x^2 / 2}, \qquad x \geq 0,</math> | ||
and | and | ||
| Line 318: | Line 500: | ||
These bounds stem from a unified form <math display="block">Q_{\mathrm{B}}(x; a, b) = \frac{\exp(-x^2)}{a} + \frac{\exp(-x^2 / 2)}{b (x + 1)},</math> where the parameters <math>a</math> and <math>b</math> are selected to ensure the bounding properties: for the lower bound, <math>a_{\mathrm{L}} = 12</math> and <math>b_{\mathrm{L}} = \sqrt{2\pi}</math>, and for the upper bound, <math>a_{\mathrm{U}} = 50</math> and <math>b_{\mathrm{U}} = 2</math>. | These bounds stem from a unified form <math display="block">Q_{\mathrm{B}}(x; a, b) = \frac{\exp(-x^2)}{a} + \frac{\exp(-x^2 / 2)}{b (x + 1)},</math> where the parameters <math>a</math> and <math>b</math> are selected to ensure the bounding properties: for the lower bound, <math>a_{\mathrm{L}} = 12</math> and <math>b_{\mathrm{L}} = \sqrt{2\pi}</math>, and for the upper bound, <math>a_{\mathrm{U}} = 50</math> and <math>b_{\mathrm{U}} = 2</math>. | ||
These expressions maintain simplicity and tightness, providing a practical trade-off between accuracy and ease of computation. They are particularly valuable in theoretical contexts, such as communication theory over fading channels, where both functions frequently appear. Additionally, the original Q-function bounds can be extended to <math>Q^n(x)</math> for positive integers <math>n</math> via the binomial theorem, suggesting potential adaptability for powers of <math>\operatorname{erfc}(x)</math>, though this is less commonly required in error function applications. | These expressions maintain simplicity and tightness, providing a practical trade-off between accuracy and ease of computation. They are particularly valuable in theoretical contexts, such as communication theory over fading channels, where both functions frequently appear. Additionally, the original Q-function bounds can be extended to <math>Q^n(x)</math> for positive integers <math>n</math> via the [[binomial theorem]], suggesting potential adaptability for powers of <math>\operatorname{erfc}(x)</math>, though this is less commonly required in error function applications. | ||
===Table of values=== | ===Table of values=== | ||
| Line 395: | Line 575: | ||
===Complementary error function=== | ===Complementary error function=== | ||
[[File:Plot of the error function Erf(z) in the complex plane from -2-2i to 2+2i with colors created with Mathematica 13.1 function ComplexPlot3D.svg|thumb|Plot of the error function erf(''z'') in the complex plane from {{nobr|−2 − 2''i''}} to {{nobr|2 + 2''i''}}]] | |||
The '''complementary error function''', denoted {{math|erfc}}, is defined as | The '''complementary error function''', denoted {{math|erfc}}, is defined as | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\operatorname{erfc}(x) | \operatorname{erfc}(x) &= 1 - \operatorname{erf}(x) \\ | ||
& = 1-\operatorname{erf}(x) \\ | &= \frac{2}{\sqrt\pi} \int_x^\infty e^{-t^2}\,dt \\ | ||
& = \frac{2}{\sqrt\pi} \int_x^\infty e^{-t^2}\, | &= e^{-x^2} \operatorname{erfcx}(x), | ||
& = e^{-x^2} \operatorname{erfcx}(x), | \end{align}</math> | ||
\end{align} </math> | |||
which also defines {{math|erfcx}}, the '''scaled complementary error function'''<ref name=Cody93>{{Citation |first=W. J. |last=Cody |title=Algorithm 715: SPECFUN—A portable FORTRAN package of special function routines and test drivers |url=http://www.stat.wisc.edu/courses/st771-newton/papers/p22-cody.pdf |journal=[[ACM Trans. Math. Softw.]] |volume=19 |issue=1 |pages=22–32 |date=March 1993 |doi=10.1145/151271.151273|citeseerx=10.1.1.643.4394 |s2cid=5621105 }}</ref> (which can be used instead of {{math|erfc}} to avoid [[arithmetic underflow]]<ref name=Cody93/><ref name=Zaghloul07>{{Citation |first=M. R. |last=Zaghloul |title=On the calculation of the Voigt line profile: a single proper integral with a damped sine integrand | journal = [[Monthly Notices of the Royal Astronomical Society]] |volume=375 |issue=3 |pages=1043–1048 |date=1 March 2007 |doi=10.1111/j.1365-2966.2006.11377.x|bibcode=2007MNRAS.375.1043Z |doi-access=free }}</ref>). Another form of {{math|erfc ''x''}} for {{math|''x'' ≥ 0}} is known as Craig's formula, after its discoverer:<ref>John W. Craig, [http://wsl.stanford.edu/~ee359/craig.pdf ''A new, simple and exact result for calculating the probability of error for two-dimensional signal constellations''] {{Webarchive|url=https://web.archive.org/web/20120403231129/http://wsl.stanford.edu/~ee359/craig.pdf |date=3 April 2012 }}, Proceedings of the 1991 IEEE Military Communication Conference, vol. 2, pp. 571–575.</ref> | which also defines {{math|erfcx}}, the '''scaled complementary error function'''<ref name=Cody93>{{Citation |first=W. J. |last=Cody |title=Algorithm 715: SPECFUN—A portable FORTRAN package of special function routines and test drivers |url=http://www.stat.wisc.edu/courses/st771-newton/papers/p22-cody.pdf |journal=[[ACM Trans. Math. Softw.]] |volume=19 |issue=1 |pages=22–32 |date=March 1993 |doi=10.1145/151271.151273|citeseerx=10.1.1.643.4394 |s2cid=5621105 }}</ref> (which can be used instead of {{math|erfc}} to avoid [[arithmetic underflow]]<ref name=Cody93/><ref name=Zaghloul07>{{Citation |first=M. R. |last=Zaghloul |title=On the calculation of the Voigt line profile: a single proper integral with a damped sine integrand | journal = [[Monthly Notices of the Royal Astronomical Society]] |volume=375 |issue=3 |pages=1043–1048 |date=1 March 2007 |doi=10.1111/j.1365-2966.2006.11377.x|bibcode=2007MNRAS.375.1043Z |doi-access=free }}</ref>). Another form of {{math|erfc ''x''}} for {{math|''x'' ≥ 0}} is known as Craig's formula, after its discoverer:<ref>John W. Craig, [http://wsl.stanford.edu/~ee359/craig.pdf ''A new, simple and exact result for calculating the probability of error for two-dimensional signal constellations''] {{Webarchive|url=https://web.archive.org/web/20120403231129/http://wsl.stanford.edu/~ee359/craig.pdf |date=3 April 2012 }}, Proceedings of the 1991 IEEE Military Communication Conference, vol. 2, pp. 571–575.</ref> | ||
<math display="block">\operatorname{erfc} (x \mid x\ge 0) | <math display="block"> | ||
\operatorname{erfc} (x \mid x\ge 0) = | |||
This expression is valid only for positive values of {{mvar|x}}, but | \frac{2}{\pi} \int_0^\frac{\pi}{2} \exp\left(-\frac{x^2}{\sin^2 \theta}\right) \,d\theta. | ||
<math display="block">\operatorname{erfc} (x+y \mid x,y\ge 0) = \frac{2}{\pi} \int_0^\frac{\pi}{2} \exp \left( - \frac{x^2}{\sin^2 \theta} - \frac{y^2}{\cos^2 \theta} \right) \, | </math> | ||
This expression is valid only for positive values of {{mvar|x}}, but can be used in conjunction with {{math|erfc(''x'') {{=}} 2 − erfc(−''x'')}} to obtain {{math|erfc(''x'')}} for negative values. This form is advantageous in that the range of integration is fixed and finite. An extension of this expression for the {{math|erfc}} of the sum of two non-negative variables is<ref>{{cite journal |doi=10.1109/TCOMM.2020.2986209 |title=A Novel Extension to Craig's Q-Function Formula and Its Application in Dual-Branch EGC Performance Analysis|journal=IEEE Transactions on Communications |volume=68 |issue=7 |pages=4117–4125 |year=2020 |last1=Behnad |first1=Aydin |bibcode=2020ITCom..68.4117B |s2cid=216500014}}</ref> | |||
<math display="block"> | |||
\operatorname{erfc}(x + y \mid x, y \ge 0) = | |||
\frac{2}{\pi} \int_0^\frac{\pi}{2} \exp\left(-\frac{x^2}{\sin^2 \theta} - \frac{y^2}{\cos^2 \theta}\right) \,d\theta. | |||
</math> | |||
===Imaginary error function=== | ===Imaginary error function=== | ||
[[File:Plot of the imaginary error function Erfi(z) in the complex plane from -2-2i to 2+2i with colors created with Mathematica 13.1 function ComplexPlot3D.svg|thumb|Plot of the imaginary error function erfi(''z'') in the complex plane from {{nobr|−2 − 2''i''}} to {{nobr|2 + 2''i''}}]] | |||
The '''imaginary error function''', denoted {{math|erfi}}, is defined as | The '''imaginary error function''', denoted {{math|erfi}}, is defined as | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\operatorname{erfi}(x) | \operatorname{erfi}(x) &= -i\operatorname{erf}(ix) \\ | ||
& = -i\operatorname{erf}(ix) \\ | &= \frac{2}{\sqrt\pi} \int_0^x e^{t^2}\,dt \\ | ||
& = \frac{2}{\sqrt\pi} \int_0^x e^{t^2}\, | &= \frac{2}{\sqrt\pi} e^{x^2} D(x), | ||
& = \frac{2}{\sqrt\pi} e^{x^2} D(x), | \end{align}</math> | ||
\end{align} </math> | |||
where {{math|''D''(''x'')}} is the [[Dawson function]] (which can be used instead of {{math|erfi}} to avoid [[arithmetic overflow]]<ref name=Cody93/>). | where {{math|''D''(''x'')}} is the [[Dawson function]] (which can be used instead of {{math|erfi}} to avoid [[arithmetic overflow]]<ref name=Cody93/>). | ||
| Line 423: | Line 606: | ||
When the error function is evaluated for arbitrary [[complex number|complex]] arguments {{mvar|z}}, the resulting '''complex error function''' is usually discussed in scaled form as the [[Faddeeva function]]: | When the error function is evaluated for arbitrary [[complex number|complex]] arguments {{mvar|z}}, the resulting '''complex error function''' is usually discussed in scaled form as the [[Faddeeva function]]: | ||
<math display="block">w(z) = e^{-z^2}\operatorname{erfc}(-iz) = \operatorname{erfcx}(-iz).</math> | <math display="block"> | ||
w(z) = e^{-z^2} \operatorname{erfc}(-iz) = \operatorname{erfcx}(-iz). | |||
</math> | |||
===Cumulative distribution function=== | ===Cumulative distribution function=== | ||
[[File:Normal cumulative distribution function complex plot in Mathematica 13.1 with ComplexPlot3D.svg|thumb|The normal cumulative distribution function plotted in the complex plane]] | |||
The error function is essentially identical to the standard [[normal cumulative distribution function]], denoted {{math|Φ}}, also named {{math|norm(''x'')}} by some software languages{{Citation needed|date=July 2020}}, as they differ only by scaling and translation. Indeed, | The error function is essentially identical to the standard [[normal cumulative distribution function]], denoted {{math|Φ}}, also named {{math|norm(''x'')}} by some software languages{{Citation needed|date=July 2020}}, as they differ only by scaling and translation. Indeed, | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
\Phi(x) | \Phi(x) | ||
&= \frac{1}{\sqrt{2\pi}} \int_{-\infty}^x e^\tfrac{-t^2}{2}\, | &= \frac{1}{\sqrt{2\pi}} \int_{-\infty}^x e^\tfrac{-t^2}{2}\,dt\\[6pt] | ||
&= \frac{1}{2} \left(1+\operatorname{erf}\left(\frac{x}{\sqrt 2}\right)\right)\\[6pt] | &= \frac{1}{2} \left(1+\operatorname{erf}\left(\frac{x}{\sqrt 2}\right)\right)\\[6pt] | ||
&= \frac{1}{2} \operatorname{erfc}\left(-\frac{x}{\sqrt 2}\right) | &= \frac{1}{2} \operatorname{erfc}\left(-\frac{x}{\sqrt 2}\right) | ||
| Line 461: | Line 646: | ||
= \sgn(x) \cdot P\left(\tfrac{1}{2}, x^2\right) | = \sgn(x) \cdot P\left(\tfrac{1}{2}, x^2\right) | ||
= \frac{\sgn(x)}{\sqrt\pi} \gamma{\left(\tfrac{1}{2}, x^2\right)}.</math>{{math|sgn(''x'')}} is the [[sign function]]. | = \frac{\sgn(x)}{\sqrt\pi} \gamma{\left(\tfrac{1}{2}, x^2\right)}.</math>{{math|sgn(''x'')}} is the [[sign function]]. | ||
===Iterated integrals of the complementary error function=== | ===Iterated integrals of the complementary error function=== | ||
The iterated integrals of the complementary error function are defined by<ref>{{cite book | last1 = Carslaw | first1 = H. S. |author1-link = Horatio Scott Carslaw | last2 = Jaeger | first2 = J. C.| author2-link = John Conrad Jaeger | year = 1959 | title = Conduction of Heat in Solids | edition = 2nd | publisher = Oxford University Press | isbn = 978-0-19-853368-9 | page = 484}}</ref> | The iterated integrals of the complementary error function are defined by<ref>{{cite book | last1 = Carslaw | first1 = H. S. |author1-link = Horatio Scott Carslaw | last2 = Jaeger | first2 = J. C.| author2-link = John Conrad Jaeger | year = 1959 | title = Conduction of Heat in Solids | edition = 2nd | publisher = Oxford University Press | isbn = 978-0-19-853368-9 | page = 484}}</ref> | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
i^n\!\operatorname{erfc}(z) &= \int_z^\infty i^{n-1}\!\operatorname{erfc}(\zeta)\, | i^n\!\operatorname{erfc}(z) &= \int_z^\infty i^{n-1}\!\operatorname{erfc}(\zeta)\,d\zeta \\[6pt] | ||
i^0\!\operatorname{erfc}(z) &= \operatorname{erfc}(z) \\ | i^0\!\operatorname{erfc}(z) &= \operatorname{erfc}(z) \\ | ||
i^1\!\operatorname{erfc}(z) &= \operatorname{ierfc}(z) = \frac{1}{\sqrt\pi} e^{-z^2} - z \operatorname{erfc}(z) \\ | i^1\!\operatorname{erfc}(z) &= \operatorname{ierfc}(z) = \frac{1}{\sqrt\pi} e^{-z^2} - z \operatorname{erfc}(z) \\ | ||
| Line 509: | Line 695: | ||
[[Category:Functions related to probability distributions]] | [[Category:Functions related to probability distributions]] | ||
[[Category:Analytic functions]] | [[Category:Analytic functions]] | ||
[[Category:Sigmoid functions]] | |||
Latest revision as of 19:21, 14 December 2025
Template:Short description Template:Use dmy dates Script error: No such module "Distinguish". In mathematics, the error function (also called the Gauss error function), often denoted by erfScript error: No such module "Check for unknown parameters"., is a function defined as:[1] Template:Infobox mathematical function
The integral here is a complex contour integral which is path-independent because is holomorphic on the whole complex plane . In many applications, the function argument is a real number, in which case the function value is also real.
In some old texts,[2] the error function is defined without the factor of . This nonelementary integral is a sigmoid function that occurs often in probability, statistics, and partial differential equations.
In statistics, for non-negative real values of Template:Mvar, the error function has the following interpretation: for a real random variable Template:Mvar that is normally distributed with mean 0 and standard deviation , erf(x)Script error: No such module "Check for unknown parameters". is the probability that Template:Mvar falls in the range Template:Closed-closed.
Two closely related functions are the complementary error function is defined as
and the imaginary error function is defined as
where Template:Mvar is the imaginary unit.
Name
The name "error function" and its abbreviation erfScript error: No such module "Check for unknown parameters". were proposed by J. W. L. Glaisher in 1871 on account of its connection with "the theory of probability, and notably the theory of errors".[3] The error function complement was also discussed by Glaisher in a separate publication in the same year.[4] For the "law of facility" of errors whose density is given by (the normal distribution), Glaisher calculates the probability of an error lying between Template:Mvar and Template:Mvar as
Applications
When the results of a series of measurements are described by a normal distribution with standard deviation Template:Mvar and expected value 0, then erf (Template:Sfrac)Script error: No such module "Check for unknown parameters". is the probability that the error of a single measurement lies between −aScript error: No such module "Check for unknown parameters". and +aScript error: No such module "Check for unknown parameters"., for positive Template:Mvar. This is useful, for example, in determining the bit error rate of a digital communication system.
The error and complementary error functions occur, for example, in solutions of the heat equation when boundary conditions are given by the Heaviside step function.
The error function and its approximations can be used to estimate results that hold with high probability or with low probability. Given a random variable X ~ Norm[μ,σ]Script error: No such module "Check for unknown parameters". (a normal distribution with mean Template:Mvar and standard deviation Template:Mvar) and a constant L > μScript error: No such module "Check for unknown parameters"., it can be shown via integration by substitution:
where Template:Mvar and Template:Mvar are certain numeric constants. If Template:Mvar is sufficiently far from the mean, specifically μ − L ≥ σ
- REDIRECT Template:Radic
Template:Rcat shellScript error: No such module "Check for unknown parameters"., then:
so the probability goes to 0 as k → ∞Script error: No such module "Check for unknown parameters"..
The probability for Template:Mvar being in the interval Template:Closed-closed can be derived as
Properties
Script error: No such module "Multiple image".
The property erf (−z) = −erf(z)Script error: No such module "Check for unknown parameters". means that the error function is an odd function. This directly results from the fact that the integrand e−t2Script error: No such module "Check for unknown parameters". is an even function (the antiderivative of an even function which is zero at the origin is an odd function and vice versa).
Since the error function is an entire function which takes real numbers to real numbers, for any complex number Template:Mvar: where denotes the complex conjugate of .
The integrand f = exp(−z2)Script error: No such module "Check for unknown parameters". and f = erf(z)Script error: No such module "Check for unknown parameters". are shown in the complex Template:Mvar-plane in the figures at right with domain coloring.
The error function at +∞Script error: No such module "Check for unknown parameters". is exactly 1 (see Gaussian integral). At the real axis, erf zScript error: No such module "Check for unknown parameters". approaches unity at z → +∞Script error: No such module "Check for unknown parameters". and −1 at z → −∞Script error: No such module "Check for unknown parameters".. At the imaginary axis, it tends to ±i∞Script error: No such module "Check for unknown parameters"..
Taylor series
The error function is an entire function; it has no singularities (except that at infinity) and its Taylor expansion always converges. For x >> 1Script error: No such module "Check for unknown parameters"., however, cancellation of leading terms makes the Taylor expansion unpractical.
The defining integral cannot be evaluated in closed form in terms of elementary functions (see Liouville's theorem), but by expanding the integrand e−z2Script error: No such module "Check for unknown parameters". into its Maclaurin series and integrating term by term, one obtains the error function's Maclaurin series as: which holds for every complex number Template:Mvar. The denominator terms are sequence A007680 in the OEIS.
It is a special case of Kummer's function:
For iterative calculation of the above series, the following alternative formulation may be useful: because Template:SfracScript error: No such module "Check for unknown parameters". expresses the multiplier to turn the Template:Mvarth term into the (k + 1)Script error: No such module "Check for unknown parameters".th term (considering Template:Mvar as the first term).
The imaginary error function has a very similar Maclaurin series, which is: which holds for every complex number Template:Mvar.
Derivative and integral
The derivative of the error function follows immediately from its definition: From this, the derivative of the imaginary error function is also immediate: Higher order derivatives are given by where Template:Mvar are the physicists' Hermite polynomials.[5]
An antiderivative of the error function, obtainable by integration by parts, is An antiderivative of the imaginary error function, also obtainable by integration by parts, is
Bürmann series
An expansion,[6] which converges more rapidly for all real values of Template:Mvar than a Taylor expansion, is obtained by using Hans Heinrich Bürmann's theorem:[7] where sgnScript error: No such module "Check for unknown parameters". is the sign function. By keeping only the first two coefficients and choosing c1 = Template:SfracScript error: No such module "Check for unknown parameters". and c2 = −Template:SfracScript error: No such module "Check for unknown parameters"., the resulting approximation shows its largest relative error at x = ±1.40587Script error: No such module "Check for unknown parameters"., where it is less than 0.0034361:
Inverse functions
Given a complex number Template:Mvar, there is not a unique complex number Template:Mvar satisfying erf(w) = zScript error: No such module "Check for unknown parameters"., so a true inverse function would be multivalued. However, for −1 < x < 1Script error: No such module "Check for unknown parameters"., there is a unique real number denoted erf−1(x)Script error: No such module "Check for unknown parameters". satisfying
The inverse error function is usually defined with domain Template:Open-open, and it is restricted to this domain in many computer algebra systems. However, it can be extended to the disk Template:Abs < 1Script error: No such module "Check for unknown parameters". of the complex plane, using the Maclaurin series[8] where c0 = 1Script error: No such module "Check for unknown parameters". and
So we have the series expansion (common factors have been canceled from numerators and denominators): (After cancellation the numerator and denominator values in Template:Oeis and Template:Oeis respectively; without cancellation the numerator terms are values in Template:Oeis.) The error function's value at ±∞Script error: No such module "Check for unknown parameters". is equal to ±1Script error: No such module "Check for unknown parameters"..
For Template:Abs < 1Script error: No such module "Check for unknown parameters"., we have erf(erf−1(z)) = zScript error: No such module "Check for unknown parameters"..
The inverse complementary error function is defined as For real Template:Mvar, there is a unique real number erfi−1(x)Script error: No such module "Check for unknown parameters". satisfying erfi(erfi−1(x)) = xScript error: No such module "Check for unknown parameters".. The inverse imaginary error function is defined as erfi−1(x)Script error: No such module "Check for unknown parameters"..[9]
For any real x, Newton's method can be used to compute erfi−1(x)Script error: No such module "Check for unknown parameters"., and for −1 ≤ x ≤ 1Script error: No such module "Check for unknown parameters"., the following Maclaurin series converges: where ckScript error: No such module "Check for unknown parameters". is defined as above.
Asymptotic expansion
A useful asymptotic expansion of the complementary error function (and therefore also of the error function) for large real Template:Mvar is where (2n − 1)!!Script error: No such module "Check for unknown parameters". is the double factorial of (2n − 1)Script error: No such module "Check for unknown parameters"., which is the product of all odd numbers up to (2n − 1)Script error: No such module "Check for unknown parameters".. This series diverges for every finite Template:Mvar, and its meaning as asymptotic expansion is that for any integer N ≥ 1Script error: No such module "Check for unknown parameters". one has where the remainder is which follows easily by induction, writing and integrating by parts.
The asymptotic behavior of the remainder term, in Landau notation, is as x → ∞Script error: No such module "Check for unknown parameters".. This can be found by For large enough values of Template:Mvar, only the first few terms of this asymptotic expansion are needed to obtain a good approximation of erfc xScript error: No such module "Check for unknown parameters". (while for not too large values of Template:Mvar, the above Taylor expansion at 0 provides a very fast convergence).
Continued fraction expansion
A continued fraction expansion of the complementary error function was found by Laplace:[10][11]
Factorial series
The inverse factorial series: converges for Re(z2) > 0Script error: No such module "Check for unknown parameters".. Here znScript error: No such module "Check for unknown parameters". denotes the rising factorial, and s(n,k)Script error: No such module "Check for unknown parameters". denotes a signed Stirling number of the first kind.[12][13] The Taylor series can be written in terms of the double factorial:
Bounds and numerical approximations
Approximation with elementary functions
Abramowitz and Stegun give several approximations of varying accuracy (equations 7.1.25–28). This allows one to choose the fastest approximation suitable for a given application. In order of increasing accuracy, they are: (maximum error: Script error: No such module "val".) Template:Pb where a1 = 0.278393Script error: No such module "Check for unknown parameters"., a2 = 0.230389Script error: No such module "Check for unknown parameters"., a3 = 0.000972Script error: No such module "Check for unknown parameters"., a4 = 0.078108Script error: No such module "Check for unknown parameters".
(maximum error: Script error: No such module "val".) Template:Pb where p = 0.47047Script error: No such module "Check for unknown parameters"., a1 = 0.3480242Script error: No such module "Check for unknown parameters"., a2 = −0.0958798Script error: No such module "Check for unknown parameters"., a3 = 0.7478556Script error: No such module "Check for unknown parameters".
(maximum error: Script error: No such module "val".) Template:Pb where a1 = 0.0705230784Script error: No such module "Check for unknown parameters"., a2 = 0.0422820123Script error: No such module "Check for unknown parameters"., a3 = 0.0092705272Script error: No such module "Check for unknown parameters"., a4 = 0.0001520143Script error: No such module "Check for unknown parameters"., a5 = 0.0002765672Script error: No such module "Check for unknown parameters"., a6 = 0.0000430638Script error: No such module "Check for unknown parameters".
(maximum error: Script error: No such module "val".) Template:Pb where p = 0.3275911Script error: No such module "Check for unknown parameters"., a1 = 0.254829592Script error: No such module "Check for unknown parameters"., a2 = −0.284496736Script error: No such module "Check for unknown parameters"., a3 = 1.421413741Script error: No such module "Check for unknown parameters"., a4 = −1.453152027Script error: No such module "Check for unknown parameters"., a5 = 1.061405429Script error: No such module "Check for unknown parameters". Template:Pb
One can improve the accuracy of the A&S approximation by extending it with three extra parameters, where p1 = 0.406742016006509, p2 = 0.0072279182302319, a1 = 0.316879890481381, a2 = -0.138329314150635, a3 = 1.08680830347054, a4 = -1.11694155120396, a5 = 1.20644903073232, a6 = -0.393127715207728, a7 = 0.0382613542530727. The maximum error of this approximation is about Script error: No such module "val".. The parameters are obtained by fitting the extended approximation to the accurate values of the error function using the following Python code.
Python code to fit extended A&S approximation
|
|---|
import numpy as np
from math import erf, exp, sqrt
from scipy.optimize import least_squares
#
# Extended A&S approximation:
# erf(x) ≈ 1 − t * exp(−x^2) * (a1 + a2*t + a3*t^2 + ... + a7*t^6)
# where now
# t = 1 / (1 + p1*x + p2*x^2)
# We fit parameters p1, p2, a1..a7 over x in [0, 10].
#
def approx_erf(params, x):
p1 = params[0]
p2 = params[1]
a = params[2:]
t = 1.0 / (1.0 + p1 * x + p2 * x * x)
poly = np.zeros_like(x)
tt = np.ones_like(x) # t^0
# polynomial: a1*t^0 + a2*t^1 + ... + a7*t^6
for ak in a:
poly += ak * tt
tt *= t
return 1.0 - t * np.exp(-x * x) * poly
def residuals(params, xs, ys):
return approx_erf(params, xs) - ys
#
# Prepare data for fitting
#
N = 300
xmin = 0
xmax = 10
xs = np.linspace(xmin, xmax, N)
ys = np.array([erf(x) for x in xs], dtype=float)
#
# Initial guess for parameters
# Start from original A&S values and extend them conservatively
#
p1_0 = 0.3275911 # original A&S p
p2_0 = 0.0 # new denominator parameter
# original A&S 5 coefficients, add two => 7 in total
a0 = [
0.254829592,
-0.284496736,
1.421413741,
-1.453152027,
1.061405429,
0.0, # new term
0.0, # another new term
]
params0 = np.array([p1_0, p2_0] + a0, dtype=float)
#
# Fit using nonlinear least squares (Levenberg–Marquardt)
#
result = least_squares(
residuals, params0, args=(xs, ys), xtol=1e-14, ftol=1e-14, gtol=1e-14, max_nfev=5000
)
params = result.x
p1_fit = params[0]
p2_fit = params[1]
a_fit = params[2:]
#
# Print fitted parameters
#
print("\nFitted parameters:")
print(f"p1 = {p1_fit:.15g},")
print(f"p2 = {p2_fit:.15g},")
for i, ai in enumerate(a_fit, 1):
print(f"a{i} = {ai:.15g},")
#
# Evaluate approximation error
#
approx_vals = approx_erf(params, xs)
abs_err = np.abs(approx_vals - ys)
print(f"\nMaximum absolute error on [{xmin},{xmax}]:", np.max(abs_err))
print("RMS error:", np.sqrt(np.mean(abs_err**2)))
print("Done.")
|
All of these approximations are valid for x ≥ 0Script error: No such module "Check for unknown parameters".. To use these approximations for negative Template:Mvar, use the fact that erf(x)Script error: No such module "Check for unknown parameters". is an odd function, so erf(x) = −erf(−x)Script error: No such module "Check for unknown parameters"..
Exponential bounds and a pure exponential approximation for the complementary error function are given by[14]
The above have been generalized to sums of Template:Mvar exponentials[15] with increasing accuracy in terms of Template:Mvar so that erfc(x)Script error: No such module "Check for unknown parameters". can be accurately approximated or bounded by 2Q̃(
- REDIRECT Template:Radic
Template:Rcat shellx)Script error: No such module "Check for unknown parameters"., where In particular, there is a systematic methodology to solve the numerical coefficients {(an,bn)}Script error: No such module "Su".Script error: No such module "Check for unknown parameters". that yield a minimax approximation or bound for the closely related Q-function: Q(x) ≈ Q̃(x)Script error: No such module "Check for unknown parameters"., Q(x) ≤ Q̃(x)Script error: No such module "Check for unknown parameters"., or Q(x) ≥ Q̃(x)Script error: No such module "Check for unknown parameters". for x ≥ 0Script error: No such module "Check for unknown parameters".. The coefficients {(an,bn)}Script error: No such module "Su".Script error: No such module "Check for unknown parameters". for many variations of the exponential approximations and bounds up to N = 25Script error: No such module "Check for unknown parameters". have been released to open access as a comprehensive dataset.[16]
A tight approximation of the complementary error function for x ∈ [0,∞)Script error: No such module "Check for unknown parameters". is given by Karagiannidis & Lioumpas (2007)[17] who showed for the appropriate choice of parameters {A,B}Script error: No such module "Check for unknown parameters". that
They determined {A,B} = {1.98,1.135}Script error: No such module "Check for unknown parameters"., which gave a good approximation for all x ≥ 0Script error: No such module "Check for unknown parameters".. Alternative coefficients are also available for tailoring accuracy for a specific application or transforming the expression into a tight bound.[18]
A single-term lower bound is[19]
where the parameter Template:Mvar can be picked to minimize error on the desired interval of approximation.
Another approximation is given by Sergei Winitzki using his "global Padé approximations":[20][21]Template:Rp
where
This is designed to be very accurate in a neighborhood of 0 and a neighborhood of infinity, and the relative error is less than 0.00035 for all real Template:Mvar. Using the alternate value a ≈ 0.147Script error: No such module "Check for unknown parameters". reduces the maximum relative error to about 0.00013.[22]
Template:Pb
The extended "global Pade" approximation, provides the maximum error of about Script error: No such module "val"., as demonstrated by the following Python script.
Python script to fit extended "global Pade" approximation
|
|---|
import numpy,math
from scipy.optimize import least_squares
# approximation to erf(x)
def approx_erf(p,x):
frac=(4+p[0]*x**2+p[1]*x**4+p[2]*x**6)/(
math.pi+p[3]*x**2+p[4]*x**4+p[5]*x**6)
return numpy.sign(x)*numpy.sqrt(
1-numpy.exp(-x*x*frac))
def residuals(params, xs, ys):
return approx_erf(params, xs) - ys
# data for fitting
N = 200
xmin = 0
xmax = 9
xs = numpy.linspace(xmin, xmax, N)
ys = numpy.array([math.erf(x) for x in xs], dtype=float)
params0 = numpy.array([0.9,0.1,0.008,0.8,0.1,0.008], dtype=float)
# fitting
result = least_squares(
residuals, params0, args=(xs, ys),
xtol=1e-14, ftol=1e-14, gtol=1e-14, max_nfev=5000
)
params = result.x
# print out fitted parameters
print("\nFitted parameters:")
for i, pi in enumerate(params, 0):
print(f"p{i} = {pi:.15g},")
# evaluate approximation error
approx_vals = approx_erf(params, xs)
abs_err = numpy.abs(approx_vals - ys)
print(f"\nMaximum absolute error on [{xmin},{xmax}]:", numpy.max(abs_err))
print("RMS error:", numpy.sqrt(numpy.mean(abs_err**2)))
print("Done.")
|
The Winitzki's approximation can be inverted to obtain an approximation for the inverse error function:
An approximation with a maximal error of Script error: No such module "val". for any real argument is:[23]
with
and
An approximation of with a maximum relative error less than in absolute value is:[24]
for ,
and for
A simple approximation for real-valued arguments could be done through Hyperbolic functions:
which keeps the absolute difference .
Since the error function and the Gaussian Q-function are closely related through the identity or equivalently , bounds developed for the Q-function can be adapted to approximate the complementary error function. A pair of tight lower and upper bounds on the Gaussian Q-function for positive arguments was introduced by Abreu (2012)[25] based on a simple algebraic expression with only two exponential terms:
and
These bounds stem from a unified form where the parameters and are selected to ensure the bounding properties: for the lower bound, and , and for the upper bound, and . These expressions maintain simplicity and tightness, providing a practical trade-off between accuracy and ease of computation. They are particularly valuable in theoretical contexts, such as communication theory over fading channels, where both functions frequently appear. Additionally, the original Q-function bounds can be extended to for positive integers via the binomial theorem, suggesting potential adaptability for powers of , though this is less commonly required in error function applications.
Table of values
Script error: No such module "labelled list hatnote".
| xScript error: No such module "Check for unknown parameters". | erf(x)Script error: No such module "Check for unknown parameters". | 1 − erf(x)Script error: No such module "Check for unknown parameters". |
|---|---|---|
| 0 | Script error: No such module "val". | Script error: No such module "val". |
| 0.02 | Script error: No such module "val". | Script error: No such module "val". |
| 0.04 | Script error: No such module "val". | Script error: No such module "val". |
| 0.06 | Script error: No such module "val". | Script error: No such module "val". |
| 0.08 | Script error: No such module "val". | Script error: No such module "val". |
| 0.1 | Script error: No such module "val". | Script error: No such module "val". |
| 0.2 | Script error: No such module "val". | Script error: No such module "val". |
| 0.3 | Script error: No such module "val". | Script error: No such module "val". |
| 0.4 | Script error: No such module "val". | Script error: No such module "val". |
| 0.5 | Script error: No such module "val". | Script error: No such module "val". |
| 0.6 | Script error: No such module "val". | Script error: No such module "val". |
| 0.7 | Script error: No such module "val". | Script error: No such module "val". |
| 0.8 | Script error: No such module "val". | Script error: No such module "val". |
| 0.9 | Script error: No such module "val". | Script error: No such module "val". |
| 1 | Script error: No such module "val". | Script error: No such module "val". |
| 1.1 | Script error: No such module "val". | Script error: No such module "val". |
| 1.2 | Script error: No such module "val". | Script error: No such module "val". |
| 1.3 | Script error: No such module "val". | Script error: No such module "val". |
| 1.4 | Script error: No such module "val". | Script error: No such module "val". |
| 1.5 | Script error: No such module "val". | Script error: No such module "val". |
| 1.6 | Script error: No such module "val". | Script error: No such module "val". |
| 1.7 | Script error: No such module "val". | Script error: No such module "val". |
| 1.8 | Script error: No such module "val". | Script error: No such module "val". |
| 1.9 | Script error: No such module "val". | Script error: No such module "val". |
| 2 | Script error: No such module "val". | Script error: No such module "val". |
| 2.1 | Script error: No such module "val". | Script error: No such module "val". |
| 2.2 | Script error: No such module "val". | Script error: No such module "val". |
| 2.3 | Script error: No such module "val". | Script error: No such module "val". |
| 2.4 | Script error: No such module "val". | Script error: No such module "val". |
| 2.5 | Script error: No such module "val". | Script error: No such module "val". |
| 3 | Script error: No such module "val". | Script error: No such module "val". |
| 3.5 | Script error: No such module "val". | Script error: No such module "val". |
Related functions
Complementary error function
The complementary error function, denoted erfcScript error: No such module "Check for unknown parameters"., is defined as which also defines erfcxScript error: No such module "Check for unknown parameters"., the scaled complementary error function[26] (which can be used instead of erfcScript error: No such module "Check for unknown parameters". to avoid arithmetic underflow[26][27]). Another form of erfc xScript error: No such module "Check for unknown parameters". for x ≥ 0Script error: No such module "Check for unknown parameters". is known as Craig's formula, after its discoverer:[28] This expression is valid only for positive values of Template:Mvar, but can be used in conjunction with erfc(x) = 2 − erfc(−x)Script error: No such module "Check for unknown parameters". to obtain erfc(x)Script error: No such module "Check for unknown parameters". for negative values. This form is advantageous in that the range of integration is fixed and finite. An extension of this expression for the erfcScript error: No such module "Check for unknown parameters". of the sum of two non-negative variables is[29]
Imaginary error function
The imaginary error function, denoted erfiScript error: No such module "Check for unknown parameters"., is defined as where D(x)Script error: No such module "Check for unknown parameters". is the Dawson function (which can be used instead of erfiScript error: No such module "Check for unknown parameters". to avoid arithmetic overflow[26]).
Despite the name "imaginary error function", erfi(x)Script error: No such module "Check for unknown parameters". is real when Template:Mvar is real.
When the error function is evaluated for arbitrary complex arguments Template:Mvar, the resulting complex error function is usually discussed in scaled form as the Faddeeva function:
Cumulative distribution function
The error function is essentially identical to the standard normal cumulative distribution function, denoted ΦScript error: No such module "Check for unknown parameters"., also named norm(x)Script error: No such module "Check for unknown parameters". by some software languagesScript error: No such module "Unsubst"., as they differ only by scaling and translation. Indeed, or rearranged for erfScript error: No such module "Check for unknown parameters". and erfcScript error: No such module "Check for unknown parameters".:
Consequently, the error function is also closely related to the Q-function, which is the tail probability of the standard normal distribution. The Q-function can be expressed in terms of the error function as
The inverse of ΦScript error: No such module "Check for unknown parameters". is known as the normal quantile function, or probit function and may be expressed in terms of the inverse error function as
The standard normal cdf is used more often in probability and statistics, and the error function is used more often in other branches of mathematics.
The error function is a special case of the Mittag-Leffler function, and can also be expressed as a confluent hypergeometric function (Kummer's function):
It has a simple expression in terms of the Fresnel integral.Template:Elucidate
In terms of the regularized gamma function Template:Mvar and the incomplete gamma function, sgn(x)Script error: No such module "Check for unknown parameters". is the sign function.
Iterated integrals of the complementary error function
The iterated integrals of the complementary error function are defined by[30]
The general recurrence formula is
They have the power series from which follow the symmetry properties and
Implementations
As real function of a real argument
- In POSIX-compliant operating systems, the header
math.hshall declare and the mathematical librarylibmshall provide the functionserfanderfc(double precision) as well as their single precision and extended precision counterpartserff,erflanderfcf,erfcl.[31] - The GNU Scientific Library provides
erf,erfc,log(erf), and scaled error functions.[32]
As complex function of a complex argument
libcerf, numeric C library for complex error functions, provides the complex functionscerf,cerfc,cerfcxand the real functionserfi,erfcxwith approximately 13–14 digits precision, based on the Faddeeva function as implemented in the MIT Faddeeva Package
References
<templatestyles src="Reflist/styles.css" />
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Template wrapper".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Template wrapper".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Pierre-Simon Laplace, Traité de mécanique céleste, tome 4 (1805), livre X, page 255.
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ a b c Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ John W. Craig, A new, simple and exact result for calculating the probability of error for two-dimensional signal constellations Template:Webarchive, Proceedings of the 1991 IEEE Military Communication Conference, vol. 2, pp. 571–575.
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
Script error: No such module "Check for unknown parameters".
Further reading
- Script error: No such module "citation/CS1".
- Script error: No such module "citation/CS1".
- Template:Dlmf