Random 随机倒立高斯分布的生成

Random 随机倒立高斯分布的生成,random,probability,gaussian,Random,Probability,Gaussian,我试图生成一个随机分布,它遵循倒置的高斯分布,移动uo,使其仍然在范围内(0,1)。我需要用尽可能少的特殊函数来实现这一点,并且只能使用平面随机数生成器 我能够根据高斯分布,通过将平坦的随机数通过逆高斯分布的CDF来生成。这是可行的,给了我期望的高斯距离。在python中,如下所示: def InverseCDF(x, mu, sigma): return mu + sigma * special.erfinv(2*x - 1) 现在,当我试图生成一个服从1-e^(-x^2)的分布时,我相

我试图生成一个随机分布,它遵循倒置的高斯分布,移动uo,使其仍然在范围内(0,1)。我需要用尽可能少的特殊函数来实现这一点,并且只能使用平面随机数生成器

我能够根据高斯分布,通过将平坦的随机数通过逆高斯分布的CDF来生成。这是可行的,给了我期望的高斯距离。在python中,如下所示:

def InverseCDF(x, mu, sigma):
  return mu + sigma * special.erfinv(2*x - 1)
现在,当我试图生成一个服从1-e^(-x^2)的分布时,我相信这个函数的逆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()实现了这一点,通过构造pdf并将其集成。绘制上面的表达式可以得到一幅合理的图

好的,当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()实现了这一点,通过构造pdf并将其集成。绘制上面的表达式可以得到一幅合理的图

有趣的问题,但我对pdf的定义有点困惑。设g(x)是均值为0,方差为1的普通正态pdf。我猜你看到的是max(g)-g(x),其中max(g)是凹凸的最大值(我猜是1/sqrt(2pi))。但是max(g)-g(x)在曲线下有无限大的面积——你以某种方式限制了x的范围吗?是的,我应该声明x上有一个限制。极限是由我的具体问题决定的,但对于这个玩具示例,我们可以将它设为(0,1)。你的截断法线是以范围为中心,还是模式为零?您是否愿意使用接受/拒绝技巧?这是否回答了您的问题?有趣的问题,但我对pdf的定义有点困惑。设g(x)是均值为0,方差为1的普通正态pdf。我猜你看到的是max(g)-g(x),其中max(g)是凹凸的最大值(我猜是1/sqrt(2pi))。但是max(g)-g(x)在曲线下有无限大的面积——你以某种方式限制了x的范围吗?是的,我应该声明x上有一个限制。极限是由我的具体问题决定的,但对于这个玩具示例,我们可以将它设为(0,1)。你的截断法线是以范围为中心,还是模式为零?您是否愿意使用接受/拒绝技巧?这是否回答了您的问题?这看起来很有希望,谢谢你的帮助。我不认为逆运算会太难,但现在有点太复杂/难读/难写。我们可以说mu=0,这将大大简化事情。在这种情况下,第二项在分子和分母中消失,μ=0,这给出:-(sqrt(π)(sqrt(2)σerf((sqrt(2)x)/(2σ))-2x)/(sqrt(π)×erf(-sqrt(2))/(2σ)+2)我看了几分钟,但我没有看到一个简单的解决方案。我认为一个数值根查找器(甚至只是二分法)是解决这个问题的可行方法。这适用于μ和sigma的任何值(我很确定,也适用于任何范围)。这看起来很有希望,谢谢你的帮助。我不认为逆运算会太难,但现在有点太复杂/难读/难写。我们可以说mu=0,这将大大简化事情。在这种情况下,第二项在分子和分母中消失,μ=0,这给出:-(sqrt(π)(sqrt(2)σerf((sqrt(2)x)/(2σ))-2x)/(sqrt(π)×erf(-sqrt(2))/(2σ)+2)我看了几分钟,但我没有看到一个简单的解决方案。我认为一个数值根查找器(甚至只是二分法)是解决这个问题的可行方法。这适用于μ和sigma的任何值(我很确定,也适用于任何范围)。