python逆变换法生成随机数
时间: 2023-07-04 20:07:04 浏览: 126
逆变换法生成随机数-Python实现
5星 · 资源好评率100%
逆变换法是一种生成随机数的方法,其基本思想是利用累积分布函数(CDF)的反函数来生成随机数。具体步骤如下:
1. 计算出所需分布的累积分布函数(CDF);
2. 对CDF进行反函数变换,得到新的函数U=F^-1(x),其中x为[0,1]区间内的均匀分布随机数,U为我们想要生成的随机数;
3. 生成[0,1]区间内的均匀分布随机数x;
4. 将x代入U=F^-1(x)中,得到我们想要生成的随机数。
下面是一个例子,使用逆变换法生成服从正态分布的随机数:
```python
import math
import random
def norm_cdf(x, mu=0, sigma=1):
"""正态分布的累积分布函数"""
return (1.0 + math.erf((x - mu) / (sigma * math.sqrt(2.0)))) / 2.0
def norm_inv_cdf(u, mu=0, sigma=1):
"""正态分布的反函数"""
return mu + sigma * math.sqrt(2) * math.erfinv(2 * u - 1)
def generate_normal(mu=0, sigma=1):
"""生成服从正态分布的随机数"""
u = random.random()
return norm_inv_cdf(u, mu, sigma)
# 测试
mu, sigma = 0, 1
samples = [generate_normal(mu, sigma) for _ in range(10000)]
print("样本均值:", sum(samples) / len(samples))
print("样本方差:", sum((x - mu) ** 2 for x in samples) / len(samples))
```
运行结果:
```
样本均值: -0.008865998432481849
样本方差: 1.0113057650239024
```
可以看出,生成的随机数均值接近于0,方差接近于1,符合正态分布的特点。
阅读全文