我试图生成一个随机分布,它遵循一个倒置的高斯分布,将uo移位,使其仍在范围(0,1)内。我需要用尽可能少的特殊函数来完成这个任务,并且只能使用一个平面随机数发生器。
我能够根据高斯生成,将平随机数通过反高斯CDF来生成。这可以工作,并给我提供我所期望的高斯失真。在python中,这看起来像这样。
def InverseCDF(x, mu, sigma):
return mu + sigma * special.erfinv(2*x - 1)
现在当我试图生成一个按照1 -e^(-x^2)的分布时 我相信这个函数的反CDF和普通高斯函数的CDF是一样的 现在反误差函数的参数是2*p+1 所以它看起来会像下面这样。
def InverseCDF(x, mu, sigma):
return mu + sigma * special.erfinv(2*x + 1)
这里的问题是erfinv只能从(-1,1)开始定义 参数现在大于1. 我试过缩放这个函数和用各种方法翻转它 几乎在所有能放负数的地方放负数 但我似乎永远无法生成一个遵循倒置高斯的直方图. 在大多数情况下,我实际上得到的是一个常规的高斯分布。
知道我做错了什么吗,或者有什么提示可以告诉我如何生成这种倒置的高斯分布吗?先谢谢你的帮助。
好的,x在0和1之间,我得到的cdf是这样的。
-(sqrt(%pi)*(sqrt(2)*sigma*erf((sqrt(2)*x-sqrt(2)*mu)/(2*sigma))
+sqrt(2)*erf(mu/(sqrt(2)*sigma))*sigma)
-2*x)
/(sqrt(%pi)*(sqrt(2)*erf((sqrt(2)*mu-sqrt(2))/(2*sigma))
-sqrt(2)*erf(mu/(sqrt(2)*sigma)))*sigma
+2)
也许用代数可以找出反演的公式 如果不能,我想用数字根搜索就可以了。我想对于mu和sigma的特定值会更简单。
我用Maxima (http:/maxima.sourceforge.net。),通过构造pdf并对其进行积分。绘制上面的表达式,可以得到一幅可信的画面。