使用SymPy定义并绘制连续均匀分布的PDF与CDF
使用SymPy处理连续均匀分布的PDF、CDF及可视化
没问题,我来一步步教你用SymPy搞定连续均匀分布的PDF、CDF定义和可视化——这在统计分析里是很基础但实用的操作:
1. 先装必要的依赖
首先得确保你有SymPy(符号计算库)和Matplotlib(绘图库),如果还没装,直接用pip安装:
pip install sympy matplotlib
2. 导入所需的库
打开Python脚本或者Notebook,导入需要的模块:
import sympy as sp import matplotlib.pyplot as plt from sympy.stats import Uniform, density, cdf
3. 定义连续均匀分布
我们先设定一个具体的区间,比如**[2, 8]**(你可以换成任意你需要的a和b,只要a < b就行),然后用SymPy的Uniform函数定义分布:
# 定义符号变量 x = sp.symbols('x') # 定义区间[a, b]上的连续均匀分布,这里a=2,b=8 u_dist = Uniform('U', 2, 8)
4. 获取PDF和CDF表达式
SymPy可以直接帮我们生成概率密度函数(PDF)和累积分布函数(CDF)的符号表达式:
# 获取PDF pdf_expr = density(u_dist)(x) print("连续均匀分布的PDF表达式:") sp.pprint(pdf_expr) # 获取CDF cdf_expr = cdf(u_dist)(x) print("\n连续均匀分布的CDF表达式:") sp.pprint(cdf_expr)
运行这段代码后,你会看到:
- PDF在区间[2,8]内是常数
1/6(因为1/(b-a)=1/(8-2)),区间外为0; - CDF在x<2时为0,2≤x≤8时是
(x-2)/6,x>8时为1,完全符合连续均匀分布的特性。
5. 可视化PDF和CDF
为了更直观地看到它们的形状,我们把符号表达式转换成可计算的数值函数,然后用Matplotlib绘图:
# 将符号表达式转换为数值函数 pdf_func = sp.lambdify(x, pdf_expr, 'numpy') cdf_func = sp.lambdify(x, cdf_expr, 'numpy') # 生成x轴数据,覆盖分布区间内外(比如从0到10) x_vals = sp.numpy.linspace(0, 10, 1000) # 计算对应的PDF和CDF值 pdf_vals = pdf_func(x_vals) cdf_vals = cdf_func(x_vals) # 绘制子图 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 绘制PDF ax1.plot(x_vals, pdf_vals, color='#1f77b4', linewidth=2) ax1.fill_between(x_vals, pdf_vals, alpha=0.3) ax1.set_title('连续均匀分布的概率密度函数(PDF)') ax1.set_xlabel('x') ax1.set_ylabel('概率密度') ax1.grid(True, alpha=0.3) ax1.set_ylim(0, 0.2) # 绘制CDF ax2.plot(x_vals, cdf_vals, color='#ff7f0e', linewidth=2) ax2.fill_between(x_vals, cdf_vals, alpha=0.3) ax2.set_title('连续均匀分布的累积分布函数(CDF)') ax2.set_xlabel('x') ax2.set_ylabel('累积概率') ax2.grid(True, alpha=0.3) ax2.set_ylim(0, 1.1) plt.tight_layout() plt.show()
运行这段代码后,你会看到两个子图:
- 左边的PDF是一个矩形,在[2,8]区间内高度恒定,区间外为0;
- 右边的CDF是一条从0线性增长到1的折线,在区间[2,8]内平稳上升,超过8后保持在1。
这样就能清晰地看到连续均匀分布的核心特征啦!
内容的提问来源于stack exchange,提问作者Sander van den Oord
相关产品推荐
相关产品推荐

