从费舍尔分布中抽取随机值
在我的研究中,我正在生成离散平面,旨在代表岩石中的裂缝。断裂面的方向由其倾角和倾角方向指定。知道了这一点,我还知道了每个平面的法向量的分量。
到目前为止,我一直在独立于正态分布绘制倾角和倾角方向。这没问题,但我想添加从费舍尔分布中提取的功能。
描述了渔民分布 此处
基本上,我希望能够指定一个平均倾角和倾角方向(或平均向量)和“费希尔常数”或色散因子 k,并从该方向分布中随机绘制值。
附加信息:看起来像“Von Mises-Fisher 分布”要么与我所说的“费舍尔分布”相同,要么以某种方式相关。有关 Von Mises-Fisher 分布的一些信息:
如您所见,我对此进行了一些研究,但我承认我并不完全理解数学。我觉得我很接近,但还不太明白......非常感谢任何帮助!
如果有帮助的话,我的编程是用 FORTRAN 语言进行的。
In my research, I am generating discrete planes that are intended to represent fractures in rock. The orientation of a fracture plane is specified by its dip and dip direction. Knowing this, I also know the components of the normal vector for each plane.
So far, I have been drawing dip and dip direction independently from normal distributions. This is OK, but I would like to add the ability to draw from the Fisher distribution.
The fisher distribution is described
HERE
Basically, I want to be able to specify an average dip and dip direction (or a mean vector) and a "fisher constant" or dispersion factor, k, and draw values randomly from that orientation distribution.
Additional Info: It seems like the "Von Mises-Fisher distribution" is either the same as what I've been calling the "Fisher distribution" or is somehow related. Some info on the Von Mises-Fisher distribution:
As you can see, I've done some looking into this, but I admit that I don't fully understand the mathematics. I feel like I'm close, but am not quite getting it... Any help is much appreciated!
If it helps, my programming is in FORTRAN.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该算法位于 NI Fisher、T. Lewis 和 BJJ Embleton 所著的“球面数据统计分析”的第 59 页。我强烈推荐这本书——它将帮助你理解数学。
以下将产生以北极为中心的随机费舍尔分布位置。如果您希望它们随机居中,那么您可以在球体上生成额外的均匀随机位置,并旋转这些位置以使其以这些位置为中心。如果您不确定这些步骤,请参阅上述书籍。此 Fortran 代码片段使用随机数生成器,生成从 0 到 1 的均匀偏差。
The algorithm is on page 59 of "Statistical analysis of spherical data" by N. I. Fisher, T. Lewis and B. J. J. Embleton. I highly recommend that book -- it will help you understand the mathematics.
The following will produce random Fisher distribution locations centered on the North pole. If you want them randomly centered, then you produce additional uniform random locations on the sphere and rotate these locations to be centered on those locations. If you are not sure of those steps, consult the aforementioned book. This Fortran code fragment uses a random number generator that produces uniform deviates from 0 to 1.
我认为你可以手工计算
对费舍尔分布的密度函数进行积分以获得累积分布函数
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)
从均匀分布中绘制 y1, y2, y3, y4...在区间 [0, 1] 上
现在,数字 F^(-1)(y1 ), F^(-1)(y2), F^(-1)(y3), F^(-1)(y4) 将根据 Fisher 分布进行分布。
I think that you can do the math by hand
Integrate the density function of the Fisher Distribution to get the cumulative distribution function
F(theta)=exp(K cos(theta)))/(exp(k)-exp(-k))
The next step is to find the inverse cumulative distribution function function, F^(-1)(y). This function fulfills
F(theta)= y <=> F^(-1)(y) =theta
I think that you get the following.
F^(-1)(y) = arccos(log((exp(k)-exp(-k))*y)/K)
Draw y1, y2, y3, y4... from a uniform distribution on the interval [0, 1]
Now, the numbers F^(-1)(y1), F^(-1)(y2), F^(-1)(y3), F^(-1)(y4) will be distributed according to the Fisher distribution..