【问题标题】:How to create normally distributed random numbers in PHP with given standard deviation(sigma)?如何在给定标准偏差(sigma)的 PHP 中创建正态分布的随机数?
【发布时间】:2023-12-29 05:35:01
【问题描述】:

我需要正态分布的随机数。因此,我实现了这里提到的 Polar 方法:

Polar Method

效果很好。但我的问题是它只给了我标准的正态分布随机数。但我还需要一些具有另一个标准偏差(sigma)的数据。

所以我需要这个生成器来生成具有给定标准偏差 (sigma) 的正态分布随机数。

目前我只能创建类似蓝色的东西(标准): Graphics

这可能吗?

【问题讨论】:

    标签: php math random


    【解决方案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 并非易事,但您可以查一下。

    【讨论】:

    • 也感谢您快速详细的回答。