【问题标题】:Drawing random values from a Fisher Distribution从 Fisher 分布中抽取随机值
【发布时间】:2011-05-23 20:58:35
【问题描述】:

在我的研究中,我正在生成用于表示岩石裂缝的离散平面。断裂面的方向由其倾角和倾角方向指定。知道了这一点,我也知道了每个平面的法向量的分量。

到目前为止,我一直在独立于正态分布绘制倾角和倾角方向。这没关系,但我想添加从 Fisher 分布中提取的功能。

描述了费希尔分布 HERE

基本上,我希望能够指定平均倾角和倾角方向(或平均矢量)和“费希尔常数”或分散因子 k,并从该方向分布中随机抽取值。强>

附加信息:“Von Mises-Fisher 分布”似乎与我一直所说的“Fisher 分布”相同,或者在某种程度上相关。关于 Von Mises-Fisher 分布的一些信息:

如您所见,我对此进行了一些研究,但我承认我并不完全理解数学。我觉得我已经很接近了,但还不太明白......非常感谢任何帮助!

如果有帮助,我的程序是在 FORTRAN 中的。

【问题讨论】:

标签: math statistics geometry fortran computational-geometry


【解决方案1】:

该算法位于 N. I. Fisher、T. Lewis 和 B. J. J. Embleton 的“球形数据的统计分析”的第 59 页。我强烈推荐这本书——它将帮助你理解数学。

以下将生成以北极为中心的随机 Fisher 分布位置。如果您希望它们随机居中,则在球体上产生额外的均匀随机位置,并旋转这些位置以使这些位置居中。如果您不确定这些步骤,请参阅上述书籍。这个 Fortran 代码片段使用了一个随机数生成器,它产生从 0 到 1 的均匀偏差。

  lambda = exp (-2.0 * kappa)
  term1 = get_uniform_random () * (1.0 - lambda) + lambda
  CoLat = 2.0 * asin ( sqrt ( -log (term1) / (2.0 * kappa) ) )
  Long = 2.0 * PI * get_uniform_random ()

【讨论】:

  • 太棒了。谢谢,这个周末我会去拿那本书。
【解决方案2】:

我认为你可以手工计算

  • 将Fisher分布的密度函数积分得到累积分布函数

    F(theta)=exp(K cos(theta)))/(exp(k)-exp(-k))

  • 下一步是求逆累积分布函数函数,F^(-1)(y)。该功能满足

    F(theta)= y F^(-1)(y) =theta

  • 我认为你得到了以下内容。

    F^(-1)(y) = arccos(log((exp(k)-exp(-k))*y)/K)

  • 从区间 [0, 1] 上的均匀分布中画出 y1, y2, y3, y4...

  • 现在,数字 F^(-1)(y1)、F^(-1)(y2)、F^(-1)(y3)、F^(-1)(y4) 将根据Fisher分布进行分配..

【讨论】:

  • 感谢您的帮助,这实际上完全有道理。所以,现在我可以根据 Fisher 分布绘制 theta 的值,但这在 3D 中意味着什么?如果我有一些平均向量 ,绘制一个 theta 值似乎会围绕该向量定义一个圆圈。
  • 您必须使用第二个随机变量来找到圆上的随机点。您应该从 ]0;2*pi 上的均匀分布中绘制此变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多