生成随机的颠倒高斯分布。

问题描述 投票:0回答:1

我试图生成一个随机分布,它遵循一个倒置的高斯分布,将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. 我试过缩放这个函数和用各种方法翻转它 几乎在所有能放负数的地方放负数 但我似乎永远无法生成一个遵循倒置高斯的直方图. 在大多数情况下,我实际上得到的是一个常规的高斯分布。

知道我做错了什么吗,或者有什么提示可以告诉我如何生成这种倒置的高斯分布吗?先谢谢你的帮助。

random probability gaussian
1个回答
0
投票

好的,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并对其进行积分。绘制上面的表达式,可以得到一幅可信的画面。

© www.soinside.com 2019 - 2024. All rights reserved.