matlab逆变换法产生随机数_逆变换采样

本文介绍了逆变换采样方法用于在Matlab中生成非均匀分布的随机数。通过解释概率密度函数(pdf)和累积分布函数(cdf),并举例说明如何生成线性分布、正态分布和指数分布的随机数,详细阐述了逆变换采样过程。
摘要由CSDN通过智能技术生成

0d425dbefba613374ab6e0d22a91d31e.png

逆变换采样

要懂逆变换采样(Inverse transform sampling), 要先懂 pdf 和 cdf。

probability density function(概率密度函数pdf)

一直以为pdf stands for probability distribution function.原来是 density(也差不多), 看几个例子:

ff95f9201d359161ee7c7366c3d83899.png

这个就是 drand48() 函数,产生的值在[0,1),概率是均匀(uniform)分布的。

还有最出名的就是正态(normal)分布:

7bf3cbceeedc5b36869472dc3cecd02c.png

再看一个例子,比如我们想要产生随机数r位于[0, 2)之间,但是概率跟数字r成正比:

3251a03f836458b0b81e9797c86e3774.png

pdf(r) = Cr,我们又知道数字必定在[0, 2) 之间,所以积分也好,三角形面积也好,我们会容易知道其实 pdf(r) = r/2.

我们现在只有d = drand48(),如果我们想要非均匀分布,可以 e = d*d,这样会靠近0的概率更大,比如(0.1 * 0.1 = 0.01,会有更多的这种)。还可以比如 e = sqrt(d)...

Cumulative distribution function(累积分布函数cdf)

cdf(x) = Area(pdf, -infinity, x) 也就是从-∞累积到x发生的概率。

对于我们的 pdf(r) = r/2 来说:

  • cdf(x) = 0 : x < 0
  • cdf(x) =
    : 0 < x < 2 // 当然用面积看也ok
  • cdf(x) = 1 : x > 2

它的 cdf 长这样:

e4667ab5c9bf7275d6d5429e99deccc1.png

cdf(1) = 1/4 = 0.25,也就是我们随机产生一个数r:

  • r < 1 : 25% 的概率小于1
  • r > 1 : 75% 的概率大于1

这就是一个明显的不均匀分布。此时我们手上只有一个 drand48(), 如果我们想要用drand48()来产生上述的pdf需要怎么做呢?

逆变换采样

这时候我们就需要逆变换采样,它的原理是这样的:

u ~ uniform distribution
T(u) = X
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值