📜  Python中的sympy.stats.Nakagami()(1)

📅  最后修改于: 2023-12-03 15:19:27.824000             🧑  作者: Mango

Python 中的 sympy.stats.Nakagami()

sympy.stats.Nakagami() 是 sympy.stats 中的一个概率分布函数,表示为 Nakagami 分布。Nakagami 分布是概率论与数理统计中一种连续概率分布,常用于描述无线电信道中的多径衰落特性。

简介

Nakagami 分布也叫做 Nakagami-m 分布,其概率密度函数为:

formula1

在这个式子中,m 是 Nakagami 分布的形状参数,$\Gamma(m)$ 是 gamma 函数,表示为:

formula2

同时,这个分布的平均值和方差为:

formula3

使用方法

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

Nakagami分布图像

我们可以看到,当形状参数较小时,这个分布近似于 Rayleigh 分布。在形状参数不断增加的情况下,分布将逐渐变得尖峰且分布的中心会向右移动。