验证双随机矩阵(doubly stochastic matrix) 满足C(P)=C(P^T)

devtools/2024/11/17 14:35:22/

验证双随机矩阵(doubly stochastic matrix) 满足C( P P P)=C(P T ^T T)

双随机矩阵:

在数学中,一个双随机矩阵doubly stochastic matrix)是一个满足以下条件的矩阵:

  1. 非负矩阵:矩阵中的每个元素都是非负的。
  2. 行和为 1:矩阵的每一行的元素之和都等于1。
  3. 列和为 1:矩阵的每一列的元素之和也等于1。

因此,双随机矩阵是一个同时满足“每一行的元素和为1”和“每一列的元素和为1”的矩阵。


验证程序:

python">import numpy as np
from scipy.optimize import minimizedef mutual_information(p, P):# 计算输出分布py = p @ P# 计算H(Y|X)hyx = 0for i in range(len(P)):for j in range(len(P[0])):if P[i,j] > 0:hyx -= p[i] * P[i,j] * np.log2(P[i,j])# 计算H(Y)hy = -sum(py[j] * np.log2(py[j]) if py[j] > 0 else 0 for j in range(len(py)))return hy - hyxdef channel_capacity(P):n = len(P)# 定义约束:概率和为1constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})# 定义边界:概率在[0,1]之间bounds = [(0,1) for _ in range(n)]# 初始猜测:均匀分布x0 = np.ones(n)/n# 最大化互信息result = minimize(lambda x: -mutual_information(x, P), x0,constraints=constraints, bounds=bounds)return -result.fun# 定义双随机矩阵# 对称信道
# P = np.array([[0.5,0.3,0.2],
#               [0.2,0.5,0.3],
#               [0.3,0.2,0.5]])# 不满足对称信道
P = np.array([[0.5,0.4,0.1],[0.3,0.3,0.4],[0.2,0.3,0.5]])# 计算P的信道容量
cap_P = channel_capacity(P)
# 计算P^T的信道容量
cap_PT = channel_capacity(P.T)print(f"C(P) = {cap_P:.6f} bits")
print(f"C(P^T) = {cap_PT:.6f} bits")

验证结果:

1. 满足双随机且是对称信道:

python">#对称信道
P = np.array([[0.5,0.3,0.2],[0.2,0.5,0.3],[0.3,0.2,0.5]])

计算结果:

在这里插入图片描述

对于对称信道:

C( P P P) = log(m) - H(Y|ai) =log3 - H(0.5, 0.3, 0.2)

C(P T ^T T) = log(m) - H(Y|ai) =log3 - H(0.5, 0.3, 0.2)

直接可以看出C( P P P)=C(P T ^T T)

2. 满足双随机但不是对称信道:

python"># 不满足对称信道
P = np.array([[0.5,0.4,0.1],[0.3,0.3,0.4],[0.2,0.3,0.5]])

计算结果:
在这里插入图片描述

3. 结论:

由此可见:对于转移概率满足双随机矩阵的信道,满足C( P P P) = C(P T ^T T)。


http://www.ppmy.cn/devtools/134716.html

相关文章

spark 设置hive.exec.max.dynamic.partition不生效

spark脚本和程序中设置ive.exec.max.dynamic.partition不生效 正确写法: spark-submit \ --master yarn \ --deploy-mode client \ --driver-memory 1G \ --executor-memory 12G \ --num-executors 8 \ --executor-cores 4 \--conf spark.hadoop.hive.exec.max.dyna…

高鑫零售实现扭亏为盈,逆市增长的高鑫零售未来何在?

大润发母公司高鑫零售发布截至9月30日的2025财年中期业绩报告:营收347.08亿元人民币,税后溢利1.86亿元,同比增加5.64亿元,实现扭亏为盈,高鑫零售的成绩单我们该如何分析? 首先,整体来看&#x…

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令,生成自签名证书和私钥文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509:生成自签名证书。…

从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改

在 sophpi 中,默认网卡 eth0 的 MAC 地址未配置,是随机生成的。这样就会导致每次重启之后,MAC 地址会改变,从而导致通过 DHCP 获取 IP 地址每次也都在变化。 查看 MAC 地址 前文提到 eth0 自动使能并通过 DHCP 获取 IP 地址&…

【前端知识】Javascript前端框架Vue入门

前端框架VUE入门 概述基础语法介绍组件特性组件注册Props 属性声明事件组件 v-model(双向绑定)插槽Slots内容与出口 组件生命周期样式文件使用1. 直接在<style>标签中写CSS2. 引入外部CSS文件3. 使用CSS预处理器4. 在main.js中全局引入CSS文件5. 使用CSS Modules6. 使用P…

shell编程--传参与数学运算

探讨一下如何向shell脚本传递参数。 脚本传参 首先用vim创建一个脚本。 vim 脚本.sh 可以理解为其他编程语言的标准输出&#xff0c;例如C语言的输出%d,表标准输出数字。 用echo 执行文件名称是&#xff1a;$0 echo 第一个参数是&#xff1a;$1 echo 传递参数作为字符串显…

Spring Batch :高效处理海量数据的利器

Spring Batch 是 Spring 框架中一个功能强大的批处理框架&#xff0c;旨在帮助开发人员轻松处理大量数据的批量操作&#xff0c;比如数据的导入、导出、转换以及定期的数据清理等任务。它提供了一套完善且灵活的机制&#xff0c;使得原本复杂繁琐的数据批处理工作变得条理清晰、…

Excel根据条件动态索引单元格范围

假如我是一个老板&#xff0c;下面有数不胜数的员工&#xff0c;我要检查他们每周的工作产出&#xff0c;列一个排行榜&#xff0c;提高员工积极性&#xff0c;毕竟多劳多得嘛。 每天去手动统计&#xff0c;未免显得不太聪明&#xff0c;我们可以利用公式来解决这个问题。 我们…