from scipy.optimize import minimize
import numpy as np
import math"""[0.5,0.3,0.2]
求解信道传递矩阵为P(Y|X)=[0.3,0.5,0.2]的非对称信道的信道容量C[0.1,0.2,0.7]
--------------------------------------------------------[0.5,0.3,0.2]
P(Y)=P(X)P(Y|X)=[p1,p2,p3][0.3,0.5,0.2]=[0.5p1+0.3p2+0.1p3,0.3p1+0.5p2+0.2p3,0.2p1+0.2p2+0.7p3][0.1,0.2,0.7]
-----------------------------------------------------------------------------------------------H(Y|X)=P(X)H(Y|X=x)=H(0.5,0.3,0.2)p1+H(0.3,0.5,0.2)p2+H(0.1,0.2,0.7)p3----------------------------------------------------------------------C=max{I(X;Y)}=H(Y)-H(Y|X)=H(0.5p1+0.3p2+0.1p3,0.3p1+0.5p2+0.2p3,0.2p1+0.2p2+0.7p3)-P(x)                    (H(0.5,0.3,0.2)p1+H(0.3,0.5,0.2)p2+H(0.1,0.2,0.7)p3)=f(p1,p2,p3)------------------------------------------------------------------------------------------
原问题等效为max f(p1,p2,p3)s.t.p1+p2+p3=10<pi<1 i=1,2,3
----------------------------
"""def entropy(x):return -x * math.log(x, 2)def fun(p):a = entropy((0.5*p[0]+0.3*p[1]+0.1*p[2]))b = entropy((0.3*p[0]+0.5*p[1]+0.2*p[2]))c = entropy((0.2*p[0]+0.2*p[1]+0.7*p[2]))d = entropy(0.5) + entropy(0.3) + entropy(0.2)e = entropy(0.1) + entropy(0.2) + entropy(0.7)return -(a + b + c - d * (p[0] + p[1]) - e * p[2])if __name__ == '__main__':p0 = np.array([1/3., 1/3., 1/3.])  # 初始信源分布I0 = -fun(p0)                      # 初始互信息# 约束条件 等式约束p1+p2+p3=1cons = ({'type': 'eq','fun': lambda p: np.array([p[0] + p[1] + p[2] - 1]),'jac': lambda p: np.array([1, 1, 1])})# 变量的界 0<pi<1bnd = ((0, 1), (0, 1), (0, 1))# 最优化方法Sequential Least SQuares Programming optimization algorithm 误差界10^-14res = minimize(fun, p0, method='SLSQP', constraints=cons, bounds=bnd, tol=1.e-14)print("初始信源分布为均匀分布", p0)print("初始互信息I(X;Y)=", I0)print(res.success)print("信道容量C=max{I(X;Y)}=", -res.fun)print("互信息达到最大时的信源分布为", res.x)

信道容量的数值解法(非对称信道)相关推荐

  1. 通用求根算法zeroin_Modern Robotics运动学数值解法及SVD算法(C matlab)

    前言 原著之前CSDN已经注销,新CSDN Galaxy_Robot的博客_CSDN博客-机器人,C语言,我是谁?领域博主​blog.csdn.net 这半个月的业余时间研究了机器人逆运动学的解析解法 ...

  2. 【数理知识】《数值分析》李庆扬老师-第9章-常微分方程初值问题数值解法

    第8章 回到目录 无 第9章-常微分方程初值问题数值解法 9.1 引言 利普希茨 (Lipschitz) 条件 / 利普希茨常数 定理1 解的存在唯一性定理 定理2 解对初值依赖的敏感性 9.2 简单 ...

  3. 【数理知识】《数值分析》李庆扬老师-第7章-非线性方程与方程组的数值解法

    第6章 回到目录 第8章 第7章-非线性方程与方程组的数值解法 7.1 方程求根与二分法 7.2 不动点迭代法及其收敛性 7.3 迭代收敛的加速方法 7.4 牛顿法 7.5 弦截法与抛物线法 7.6 ...

  4. c语言求解热传导方程,二维稳态导热问题的数值解法.docx

    核科学与技术学院 <传热学> 二维稳态导热问题的 数值解法作业 姓名:罗晓 学号: 2014151214 班级:任课教师:李磊,张智刚 哈尔滨工程大学 核科学与技术学院 2016 年 11 ...

  5. 偏微分方程数值解法python_Python数值计算----------求解简单的偏微分方程

    很多物理现象的都可以用方程来描述,比如热传导与物质扩散可以用扩散方程来描述,流体的流动可以用NS方程描述等等.如果能够将这些偏微分方程求解出来,就可以来对很多物理现象进行仿真,现在工程中的仿真软件都是 ...

  6. [常微分方程的数值解法系列五] 龙格-库塔(RK4)法

    龙格-库塔法 简介 基本思想 具体方法 一阶 二阶 求解参数 特殊二阶 三阶 高阶 步长选择 例子 在惯性导航以及VIO等实际问题中利用IMU求解位姿需要对IMU测量值进行积分得到需要的位置和姿态,其 ...

  7. python计算机器人运动学分析_V-rep学习笔记:机器人逆运动学数值解法(The Jacobian Transpose Method)...

    机器人运动学逆解的问题经常出现在动画仿真和工业机器人的轨迹规划中:We want to know how the upper joints of the hierarchy would rotate ...

  8. 二阶边值问题的数值解matlab,《二阶常微分方程边值问题的数值解法》-毕业论文.doc...

    w 摘 要 本文主要研究二阶常微分方程边值问题的数值解法.对线性边值问题,我们总结了两类常用的数值方法,即打靶法和有限差分方法,对每种方法都列出了详细的计算步骤和Matlab程序代码,通过具体的算例对 ...

  9. 二阶常微分方程的数值解法(中心差分法和有限体积法)

    二阶常微分方程的数值解法(中心差分法和有限体积法) 这里我们介绍中心差分法和有限体积法求解方程. 题目: 用差分法的中心差分格式和有限体积法求解两点边值问题 u′′−α(2x−1)u′−2αu=0,0 ...

最新文章

  1. 内存 : DDR2与DDR
  2. Nginx在mvvm模式中的使用
  3. tableView下沉
  4. 【2016.12.04】JavaScript笔记
  5. 关于ORACLE 10g中“ORA-12541:TNS:no listener”的问题解决方案
  6. 人机协作机器人发展趋势_移动机器人:人机协作是未来的发展趋势
  7. Struts2+JFreeChart
  8. Docker教程(二) Docker环境安装
  9. Visual Studio 2012 实用快捷键
  10. Drupal是如何避免页面缓存保存Message信息的
  11. Java-重复性代码统计第一篇
  12. PHP-文件下载功能总结
  13. Android 开源无线投屏,用树莓派Raspberry Pi 4B制作一个无线投屏器(20200803)
  14. C++制作植物大战僵尸
  15. 【QT C++ TCP通信调试助手】
  16. 【道高一尺,魔高一丈】Python爬虫之如何应对网站反爬虫策略
  17. 申论文章观点的打造技巧
  18. 城市轨道交通信号系统学习笔记(三)继电器
  19. mysql 1062_mysql #1062 报错
  20. 【运行报错】Centos 6 无法使用 yum

热门文章

  1. 奥斯汀页眉怎么设置_word红头文件怎么制作
  2. Word生成图表(柱状图、线形图等,并附带表格展示数值)
  3. 超市商品管理系统(课程设计)
  4. [C#] 内存占用释放
  5. fets去除回车符号
  6. 软件对计算机有配置要求吗,软件设计所需配置,你的电脑够格了吗
  7. Oracle exp导出
  8. 现在java开发用什么工具
  9. Docker怎么样拉取镜像?怎样删除镜像?
  10. 关于innerHTML的用法,以及数据覆盖问题