正态分布概率密度函数(PDF)

1. 一元正态分布

对于随机变量\(X \sim \mathcal{N}(\mu, \sigma^2)\),其概率密度函数为:\(f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left( -\frac{(x-\mu)^2}{2\sigma^2} \right)\)

下面的代码计算了\(X \sim \mathcal{N}(0, 1)\)(标准正态分布)在\(x=1.5\) 处的概率密度值:

import numpy as np

# 参数设置
mu = 0      # 均值
sigma = 1   # 标准差
x = 1.5     # 待计算的点

# 计算概率密度函数值
pdf_value = (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x - mu) ** 2) / (2 * sigma ** 2))

print(f"标准正态分布在 x={x} 处的概率密度值为: {pdf_value:.6f}")
# 输出: 标准正态分布在 x=1.5 处的概率密度值为: 0.129518

2. 二元正态分布

对于随机变量\((X, Y) \sim \mathcal{N}(\mu_X, \mu_Y, \sigma_X^2, \sigma_Y^2, \rho)\),其概率密度函数为:\(f(x,y) = \frac{1}{2\pi\sigma_X\sigma_Y\sqrt{1-\rho^2}} \exp\left( -\frac{1}{2(1-\rho^2)} \left[ \left(\frac{x-\mu_X}{\sigma_X}\right)^2 - 2\rho\left(\frac{x-\mu_X}{\sigma_X}\right)\left(\frac{y-\mu_Y}{\sigma_Y}\right) + \left(\frac{y-\mu_Y}{\sigma_Y}\right)^2 \right] \right)\)

下面的代码计算了\((X, Y) \sim \mathcal{N}(0, 0, 1, 1, 0.6)\)\((x=1, y=2)\) 处的概率密度值:

import numpy as np

# 参数设置
mu_x = 0       # X 的均值
mu_y = 0       # Y 的均值
sigma_x = 1    # X 的标准差
sigma_y = 1    # Y 的标准差
rho = 0.6      # 相关系数
x = 1          # 待计算的 X 坐标
y = 2          # 待计算的 Y 坐标

# 计算概率密度函数值
denominator = 2 * np.pi * sigma_x * sigma_y * np.sqrt(1 - rho ** 2)
exponent = -1 / (2 * (1 - rho ** 2)) * (
    ((x - mu_x) / sigma_x) ** 2 - 
    2 * rho * ((x - mu_x) / sigma_x) * ((y - mu_y) / sigma_y) + 
    ((y - mu_y) / sigma_y) ** 2
)
pdf_value = (1 / denominator) * np.exp(exponent)

print(f"二元正态分布在 (x={x}, y={y}) 处的概率密度值为: {pdf_value:.6f}")
# 输出: 二元正态分布在 (x=1, y=2) 处的概率密度值为: 0.031375

3. 使用 SciPy 库简化计算

实际上,Python 的 scipy.stats 库提供了内置函数来计算正态分布的概率密度,代码会更简洁:

from scipy.stats import norm, multivariate_normal
import numpy as np

# 一元正态分布
mu = 0
sigma = 1
x = 1.5
pdf_univariate = norm.pdf(x, loc=mu, scale=sigma)
print(f"一元正态分布在 x={x} 处的概率密度值为: {pdf_univariate:.6f}")

# 二元正态分布
mu = [0, 0]                      # 均值向量
cov = [[1, 0.6], [0.6, 1]]       # 协方差矩阵(对角线上是方差,非对角线是协方差)
x = [1, 2]                       # 待计算的点
pdf_bivariate = multivariate_normal.pdf(x, mean=mu, cov=cov)
print(f"二元正态分布在 (x={x[0]}, y={x[1]}) 处的概率密度值为: {pdf_bivariate:.6f}")

# 输出:
# 一元正态分布在 x=1.5 处的概率密度值为: 0.129518
# 二元正态分布在 (x=1, y=2) 处的概率密度值为: 0.031375
posted @ 2025-06-30 07:59  华小电  阅读(248)  评论(0)    收藏  举报