📅  最后修改于: 2023-12-03 15:19:27.824000             🧑  作者: Mango
sympy.stats.Nakagami()
是 sympy.stats 中的一个概率分布函数,表示为 Nakagami 分布。Nakagami 分布是概率论与数理统计中一种连续概率分布,常用于描述无线电信道中的多径衰落特性。
Nakagami 分布也叫做 Nakagami-m 分布,其概率密度函数为:
在这个式子中,m 是 Nakagami 分布的形状参数,$\Gamma(m)$ 是 gamma 函数,表示为:
同时,这个分布的平均值和方差为:
sympy.stats.Nakagami
类实例化时需要传入一个形状参数 m
,并可选地传入一个变量 x
表示要求的随机变量。如果不传入 x
,则默认随机变量为 x
。
import sympy.stats as stats
from sympy import Symbol
m = Symbol('m', positive=True)
x = Symbol('x')
Nakagami_dist = stats.Nakagami('Nakagami', m, x)
我们可以调用一些常用的函数,如概率密度函数 pdf
,累积分布函数 cdf
,反函数 inversecdf
等:
pdf = Nakagami_dist.pdf(x) # 概率密度函数
cdf = Nakagami_dist.cdf(x) # 累积分布函数
icdf = Nakagami_dist.inversecdf(x) # 反函数
当需要调用这些函数时,需要指定参数。
下面是对 Nakagami 分布的一些示例:
# 导入必要的 package
import matplotlib.pyplot as plt
import numpy as np
from sympy import symbols, lambdify
# 定义随机变量
m = symbols('m')
x = symbols('x')
Nakagami_dist = stats.Nakagami('Nakagami', m, x)
# 确定参数
args = {m: 0.5}
# 定义 pdf 和 cdf,并转换为可调用函数
pdf = Nakagami_dist.pdf(x).subs(args)
cdf = Nakagami_dist.cdf(x).subs(args)
pdf_func = lambdify(x, pdf, modules=['numpy'])
cdf_func = lambdify(x, cdf, modules=['numpy'])
# 求解期望值和方差
EX = Nakagami_dist.mean().subs(args)
VAR = Nakagami_dist.variance().subs(args)
# 打印期望值和方差
print('期望值为:', EX)
print('方差为:', VAR)
# 绘制概率密度函数和累积分布函数的图像
x_values = np.linspace(0, 5, 1000)
pdf_values = pdf_func(x_values)
cdf_values = cdf_func(x_values)
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 3.5))
axs[0].plot(x_values, pdf_values, label='pdf')
axs[0].set_xlabel('$x$')
axs[0].set_ylabel('$f(x)$')
axs[0].legend()
axs[1].plot(x_values, cdf_values, label='cdf')
axs[1].set_xlabel('$x$')
axs[1].set_ylabel('$F(x)$')
axs[1].legend()
plt.show()
这段代码将会输出期望值和方差的值,同时绘制了概率密度函数和累积分布函数的图像:
期望值为: 0.883883476483184
方差为: 0.187236375793935
我们可以看到,当形状参数较小时,这个分布近似于 Rayleigh 分布。在形状参数不断增加的情况下,分布将逐渐变得尖峰且分布的中心会向右移动。