首页 > 其他分享 >科普向-计算机如何生成随机数?(第二期)

科普向-计算机如何生成随机数?(第二期)

时间:2024-09-17 21:23:28浏览次数:11  
标签:第二期 7D% 均匀分布 生成 5C% 随机数 舍选法 正态分布 科普

一、引言

在上期中,我们介绍了LCG和逆变换法,了解了区间上的均匀分布,多点分布以及一些简单分布函数的生成。本期我们将把情况推向更为一般的情况,讲介绍正态分布的生成,以及舍选法生成一般概率分布函数的分布。

二、正态分布

对于正态分布 N(0,1) 的概率密度和分布函数:

p(x)d(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}

F(x)=\int_{-\infty}^{x}p(y)d(y)=\int_{-\infty}^{x}\frac{1}{\sqrt{2\pi}}e^{-\frac{y^2}{2}}dy

直接计算上述积分是不太容易的,因此利用在概率论中学习过的计算方法,我们考虑二维正态分布N(0,I_2),这个二维的正态分布的分布函数如下:

\int_{\mathbb{R}^2}\frac{1}{2\pi}e^{-\frac{x^2}{2}}e^{-\frac{y^2}{2}}dxdy

考虑极坐标变换:x=rcos\theta ,\,\,\,y=rsin\theta, \,\,\,\text{at the same time:}\,\,dxdy=rdrd\theta

可以得到:

\int_{\mathbb{R}^2}\frac{1}{2\pi}e^{-\frac{x^2}{2}}e^{-\frac{y^2}{2}}dxdy=\int_{0}^{+\infty}dr\int_{0}^{2\pi}d\theta\frac{1}{2\pi}e^{-r^2}r=1

受此启发, 就得到了Box-Muller变换原理:

X \sim N(0,1),\,\,Y \sim N(0,1) \Rightarrow (X,Y) \sim N(0,I_2)

做变换:

\left\{\begin{matrix} X=Rcos\Theta \\ Y=Rsin\Theta \end{matrix}\right.\,\,\Rightarrow \Theta\sim \mathcal{U}[0,2\pi],\,\,R\sim Rayleigh

p(x,y)dxdy=\frac{1}{2\pi}d\theta \, e^{-\frac{r^2}{2}}rdr

其中:

\theta\sim \mathcal{U}[0,2\pi]\Rightarrow \int_{0}^{2\pi}d\theta=1\\\\\ F(r)=\int_{0}^{r}e^{-\frac{s^2}{2}}sdr=-e^{-\frac{s^2}{2}}|_0^r=1-e^{-\frac{r^2}{2}}\Rightarrow \,\,\int_{0}^{+\infty}e^{-\frac{s^2}{2}}sdr=1

我们设  1-e^{-\frac{r^2}{2}}=t,可以反解出:

1-e^{-\frac{r^2}{2}}=t \,\,\,\Rightarrow \,\,\,1-t=e^{-\frac{r^2}{2}}\,\,\,\Rightarrow \,\,\,r=\sqrt{-2logt}

因此我们只需生成两个均匀分布:\Theta_n \sim \mathcal{U}[0,2\pi]\quad T_n\sim \mathcal{U}[0,1], 就可以得到R_n以及X_n

R_n=\sqrt{-2logT_n},\,\,\,X_n=R_ncos\Theta_n

这样就生成了一维正态分布,事实上可以看成二维正态分布的一个切片。

所以我们利用这种方法其实是得到了一个二维正态分布:

R_n=\sqrt{-2logT_n},\,\,\,X_n=R_ncos\Theta_n,\,\,\,Y_n=R_nsin\Theta_n

三、舍选法

1、舍选法介绍

舍选法的直观理解如下:

我们在[a,b]\times[0,c]这个区域上生成均匀分布,之后只保留其中y \in [0,p(x)]中的点,这样我们就生成了以p(x)为概率密度的分布。

那么为什么上面的这个“去掉一个部分”的操作可以保证分布还是均匀的呢?换句话说p(x)围成的区域中的点对于 x 应该还是均匀的,这样才可以保证生成的是以p(x)为概率密度的分布。下面的定理保证了这一点:

Thm 3,1 

\text{If} \,\,(X,Y) \sim \mathcal{X}_A(x,y)dxdy,\,\,\text{then}\,\,X\sim p(x)dx\\\\ \text{where }\mathcal{X}_A \,\,\text{is a Indicator function}\\\\p.f.\quad \text {Consider a marginal distribution} \,\,p(x) \\\\p(x)=\int_{\mathbb{R}}p(x,y)dy=\int_{0}^{p(x)}1dy=p(x) _{\quad \square }

2、舍选法的操作过程

Step 1:生成均匀分布

生成区间[a,b]\times[0,c]上的均匀分布(X,Y)\sim \mathcal{U}([a,b]\times[0,c])

Step 2: 做出取舍

\text{If}\,\,\left\{\begin{matrix} Y>p(x)&\text{Reject }\\ Y\leq p(x)&\text{Accept} \end{matrix}\right.

3.如何选取“覆盖”函数

事实上,选取均匀分布作为概率密度函数的覆盖是有局限性的。比如像指数分布的概率密度函数或者下图所示概率密度函数就没法完全覆盖住,因为会涉及到 p(x)\rightarrow 0\quad (x\rightarrow +\infty\,\, \text{or}\, -\infty )

对于这种情况,我们一般选取rescaled Cauchy function(类似上图中的红线),这是一个关于 x_0对称,并且最高点在 x_0 处取到 a_0:

f(x)=\frac{c_0}{1+(x-x_0)^2/a_0^2}=c_0p(\frac{x-x_0}{a_0})

事实上,我们可以调整x_0,\,\,a_0,\,\,\text{and} \,\,c_0的大小,使这个函数处处比p(x)要大,即可以很好的覆盖住p(x),具体的证明这里就不详细证明了。

而上述f(x)的生成我们很容易利用逆变换法生成:

f(x)=\frac{c_0}{1+(x-x_0)^2/a_0^2}=y \Rightarrow x=\sqrt{\frac{c_0a_0}{y}-a_0}+x_0

这样我们只需要生成 Y\sim\mathcal{U}[0,c_0] 就可以得到 f(x) 所覆盖区域下的分布,在利用舍取法就可以筛选出以 p(x) 为概率密度的分布。

四、结语

到此我们就讲了从特殊到一般的随机数生成方法,希望可以对大家有所启发。如果有别的方法没有提及的也可以分享给我!感谢大家看到这里,在这里祝各位中秋快乐!如果有不严谨以及错误的地方欢迎各位大佬指出!

标签:第二期,7D%,均匀分布,生成,5C%,随机数,舍选法,正态分布,科普
From: https://blog.csdn.net/weixin_63470844/article/details/142317926

相关文章

  • 科普文:软件架构数据库系列之【MySQL的sql_mode参数】
    概叙科普文:软件架构数据库系列之【MySQL解析器和优化器】-CSDN博客科普文:软件架构数据库系列之【MySQL查询优化器中的优化策略optimizer_switch】-CSDN博客科普文:软件架构数据库系列之【MySQL执行计划Extra梳理】-CSDN博客科普文:软件架构数据库系列之【MySQL控制查询优化器......
  • Windows10解决“远程计算机或设备将不接受连接检测到该设备或资源(Web 代理)未设置为
    问题表述:远程计算机或设备将不接受连接检测到检测到 该设备或资源(Web代理)未设置为接受端口“7897”上的连接。 在教室上课,因为各种原因改了网络设置,以致无法Web联网。但是微信和钉钉收发消息自如。网络诊断后报错这是我遇到的报错。解决方法:左下角“开始”“设置”......
  • 随机数生成工具,且偏差值累计和等于0【工程内业】
    随机数生成工具1、需求:工程内页,尤其是盖板钢筋、桩基钢筋的主筋间距,偏差值累加最好要解决0,这样才能保证资料的准确性。2、实现:暂时以VB和MFC实现,添加导出excel功能。3、界面截图:4、验证:4、下载地址:......
  • 00 概念科普|大模型是什么
    AI大模型全套学习资料“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,......
  • 科普文:软件架构数据库系列之【MySQL5.7和MySQL 8.0的差异】
    引言MySQL作为最常用的开源关系型数据库管理系统之一,一直在不断发展和改进。随着时间的推移,MySQL也经历了多个版本的演进,每个版本都带来了一系列重要的更新和改进。其中,MySQL5.7和MySQL8是两个备受关注的版本,它们之间存在一些关键的差异。本文将深入探讨这两个版本之间的主......
  • 科普文:软件架构数据库系列之【MySQL5.7的系统表梳理】
    概叙MySQL5.7的系统中包含了多个重要的系统表,这些表分布在不同的数据库中,提供了关于数据库结构、权限、性能等关键信息的访问。mysql>\s;--------------mysqlVer14.14Distrib5.7.21,forWin64(x86_64)Connectionid:3Currentdatabase:Currentuser:......
  • uniapp微信小程序的老年防诈科普及交流平台设计和实现 f254d可视化分析系统
    目录技术介绍具体实现截图微信开发者工具HBuilderXuniapp系统设计java类核心代码部分展示登录的业务流程的顺序是:可行性论证详细视频演示技术可行性系统测试系统安全性数据完整性实现思路系统实现源码获取技术介绍如今微信小程序有以下发展优势(1)无须下载,无须注......
  • 安装应用教程的科普
    正常来说我们拿到的电脑都是windows的系统,对于一线品牌比如联想,惠普都有自带的应用商店,很方便,不用动手这么多但是,一般我们的电脑都是纯净版,不带应用市场,就一个微软应用商店,这个微软应用商店网络时好时不好的,也不能改安装位置跟创建快捷键,这时候就用我们自带的Edge浏览器打开浏览......
  • 探索Go语言中的随机数生成、矩阵运算与数独验证
    1.Go中的随机数生成在许多编程任务中,随机数的生成是不可或缺的。Go语言通过math/rand包提供了伪随机数生成方式。伪随机数由种子(seed)决定,如果种子相同,生成的数列也会相同。为了确保每次程序运行时产生不同的随机数,我们通常使用当前时间作为种子。示例1:简单的随机数生......
  • 【AI学习】AI科普:专有名词介绍
    这里是阿川的博客,祝您变得更强✨个人主页:在线OJ的阿川......