如何在给定标准偏差(sigma)的 PHP 中创建正态分布的随机数?
Posted
技术标签:
【中文标题】如何在给定标准偏差(sigma)的 PHP 中创建正态分布的随机数?【英文标题】:How to create normally distributed random numbers in PHP with given standard deviation(sigma)? 【发布时间】:2014-04-12 12:29:49 【问题描述】:我需要正态分布的随机数。因此,我实现了这里提到的 Polar 方法:
Polar Method
效果很好。但我的问题是它只给了我标准的正态分布随机数。但我还需要一些具有另一个标准偏差(sigma)的数据。
所以我需要这个生成器来生成具有给定标准偏差 (sigma) 的正态分布随机数。
目前我只能创建类似蓝色的东西(标准): Graphics
这可能吗?
【问题讨论】:
【参考方案1】:标准正态分布随机数的标准差等于 1。如果您只是将这些随机数乘以 X,其中 X 是一个正数,那么您将创建标准差等于 X 的正态分布数 :-) .
【讨论】:
效果很好,而且非常简单。谢谢你。这是线性变换吗? @user1851634 我猜你可以称之为线性变换。【参考方案2】:您可能想查看inverse transform sampling。它允许您创建任何分布的随机数。
基本思想是获取所需分布的密度函数并将其整合。这为您提供了 CDF(累积分布函数)。水平 x 轴显示值,垂直 y 轴显示随机值小于或等于其对应 x 值的概率,范围介于 0 和 1 之间。
然后,您获取一个均匀分布在 0 和 1 之间的随机数流,将它们用作 y 值并查找相应的 x 值。然后,x 值流将按照您的意愿分发。这意味着您实际上需要 CDF 的倒数来查找 x 值。因此是“逆”变换采样。
计算具有给定 sigma 的正态分布的 ICDF 并非易事,但您可以查一下。
【讨论】:
也感谢您快速详细的回答。以上是关于如何在给定标准偏差(sigma)的 PHP 中创建正态分布的随机数?的主要内容,如果未能解决你的问题,请参考以下文章