文章目录
- 误差函数简介
- 复平面上的误差函数
- 与误差函数相关的函数
误差函数简介
误差函数的实质是正态分布的概率,其重要性可见一斑,其表达式为
erf = 2 π ∫ 0 x e − t 2 d t \operatorname{erf}=\frac{2}{\sqrt{\pi}}\int^x_0e^{-t^2}\text dt erf=π2∫0xe−t2dt
和标准正态分布累积分布函数 Φ \Phi Φ的关系为
Φ ( x ) = 1 2 + 1 2 erf ( x 2 ) \Phi(x)=\frac{1}{2}+\frac{1}{2}\operatorname{erf}(\frac{x}{\sqrt{2}}) Φ(x)=21+21erf(2x)
scipy
中提供了erf
函数,下面画一下误差函数的图像
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as ss
xs = np.arange(-3000, 3000)/1000
plt.plot(xs, ss.erf(xs))
plt.show()
由于误差函数在概率统计中的含义是累积分布函数,所以不可能是发散的。其泰勒展开也收敛,其泰勒级数为
erf ( x ) = 2 π ∑ n = 0 ∞ ( − 1 ) n z 2 n + 1 n ! ( 2 n + 1 ) \operatorname{erf}(x)=\frac{2}{\sqrt\pi}\sum^\infty_{n=0}\frac{(-1)^nz^{2n+1}}{n!(2n+1)} erf(x)=π2n=0∑∞n!(2n+1)(−1)nz2n+1
复平面上的误差函数
误差函数在复平面上也有定义,而且图像十分精彩
xs, ys = np.indices([500,500])/100-2.5
zs = ss.erf(xs + 1j*ys)
fig = plt.figure()
ax = fig.add_subplot(1,3,1,projection='3d')
ax.plot_surface(xs, ys, np.real(zs))
ax.set_title("real(zs)")
ax = fig.add_subplot(1,3,2,projection='3d')
ax.plot_surface(xs, ys, np.imag(zs))
ax.set_title("imag(zs)")
ax = fig.add_subplot(1,3,3,projection='3d')
ax.plot_surface(xs, ys, np.abs(zs))
ax.set_title("abs(zs)")
plt.show()
图像为
如果把其实部或者虚部画成为彩图可能更加带感
xs, ys = np.indices([400,400])/100-2
zs = ss.erf(xs + 1j*ys)
plt.imshow(np.real(zs), cmap=plt.cm.prism)
plt.axis('off')
plt.show()
得到
与误差函数相关的函数
在scipy
中,定义了一些列和误差函数相关的函数,
函数 | 与erf 的关系 |
---|---|
erfc | 1 - erf(x) |
erfcx | exp(x**2) * erfc(x) |
erfi | -i erf(i z) |
erfinv | 误差函数翻转 |
erfcinv | erfc 翻转 |
下面逐一演示这3对函数
fDct = {
"erf":ss.erf,
"erfinv":ss.erfinv,
"erfi":ss.erfi,
"erfc":ss.erfc,
"erfcinv":ss.erfcinv,
"erfcx":ss.erfcx
}
fig = plt.figure()
xs = np.arange(-3000, 3000)/1000
for i,key in enumerate(fDct):
ax = fig.add_subplot(2,3,i+1)
ax.plot(xs, fDct[key](xs))
ax.set_title(key)
plt.show()
对比如下