(一)连续随机量的生成-基于分布函数

连续随机量的生成-基于分布函数

  • [1. 概率积分变换方法(分布函数)](#1. 概率积分变换方法(分布函数))
  • [2. Python编程实现指数分布的采样](#2. Python编程实现指数分布的采样)

1. 概率积分变换方法(分布函数)

Consider drawing a random quantity X X X from a continuous probability distribution with the distribution function F F F. We know F F F is a continues nondecreasing function if F F F has an inverse F − 1 F^{-1} F−1, then Z = F − 1 ( U ) Z=F^{-1}(U) Z=F−1(U), where U U U is a random quantity drawn from U ( [ 0 , 1 ] ) U([0,1]) U([0,1]), is a random quantity as desired. Indeed,
P ( X ⩽ z ) = P ( F − 1 ( U ) ⩽ z ) = P ( U ⩽ F ( z ) ) = F ( z ) , ∀ z ∈ R P(X \leqslant z)=P\left(F^{-1}(U) \leqslant z\right)=P(U \leqslant F(z))=F(z), \forall z \in \mathbb{R} P(X⩽z)=P(F−1(U)⩽z)=P(U⩽F(z))=F(z),∀z∈R

Example : Exponential distribution Exp ⁡ ( 1 ) \operatorname{Exp} (1) Exp(1).

Exp (1) has a probability density function: f ( z ) = { e − z , z ⩾ 0 , 0 , z < 0. f(z)= \begin{cases}e^{-z}, & z \geqslant 0, \\ 0, & z<0 .\end{cases} f(z)={e−z,0,z⩾0,z<0.

Its distribution function is F ( z ) = { 1 − e − z , z ⩾ 0 , 0 , z < 0. F(z)= \begin{cases}1-e^{-z}, & z \geqslant 0, \\ 0, & z<0 .\end{cases} F(z)={1−e−z,0,z⩾0,z<0.

We only need to concentrate on F ( z ) F(z) F(z) on [ 0 , ∞ ) [0, \infty) [0,∞), and have
F − 1 ( z ) = − log ⁡ ( 1 − z ) . F^{-1}(z)=-\log (1-z). F−1(z)=−log(1−z).

So F − 1 ( U ) = − log ⁡ ( 1 − U ) F^{-1}(U)=-\log (1-U) F−1(U)=−log(1−U) has a probability distribution Exp ( 1 ) (1) (1). Because 1 − U ∼ U ( [ 0 , 1 ] ) 1-U \sim U([0,1]) 1−U∼U([0,1]), we have − log ⁡ U ∼ Exp ⁡ ( 1 ) -\log U \sim \operatorname{Exp}(1) −logU∼Exp(1).

For a distribution function which does not have an inverse, we define a generalized inverse as the following:
F − ( z ) = inf ⁡ { x ∈ R : F ( x ) ⩾ z } . F^{-}(z)=\inf \{x \in \mathbb{R}: F(x) \geqslant z\} . F−(z)=inf{x∈R:F(x)⩾z}.

2. Python编程实现指数分布的采样

Assignment: Sample a random quantity Z ∼ Exp ⁡ ( λ ) Z \sim \operatorname{Exp}(\lambda) Z∼Exp(λ) for some λ > 0 \lambda>0 λ>0.

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# Parameter for the exponential distribution
lambda_value = 0.5

# Generate random quantity using CDF method
u = np.random.rand(1000)  # Uniform random numbers between 0 and 1
Z = -np.log(1 - u) / lambda_value

# Plot histogram
plt.hist(Z, bins=30, density=True, alpha=0.6, color='b', label='Sampled Data')
plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Histogram of Exponential Distribution (Generated using CDF)')
plt.legend()
plt.grid(True)
plt.show()
相关推荐
Learn-Python8 小时前
MongoDB-only方法
python·sql
小途软件9 小时前
用于机器人电池电量预测的Sarsa强化学习混合集成方法
java·人工智能·pytorch·python·深度学习·语言模型
扫地的小何尚10 小时前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
wanglei20070810 小时前
生产者消费者
开发语言·python
清水白石00811 小时前
《从零到进阶:Pydantic v1 与 v2 的核心差异与零成本校验实现原理》
数据库·python
昵称已被吞噬~‘(*@﹏@*)’~11 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
2501_9418779811 小时前
从配置热更新到运行时自适应的互联网工程语法演进与多语言实践随笔分享
开发语言·前端·python
酩酊仙人11 小时前
fastmcp构建mcp server和client
python·ai·mcp
且去填词12 小时前
DeepSeek API 深度解析:从流式输出、Function Calling 到构建拥有“手脚”的 AI 应用
人工智能·python·语言模型·llm·agent·deepseek
rgeshfgreh12 小时前
Python条件与循环实战指南
python