当前位置:文档之家› matlab 信道容量的迭代计算

matlab 信道容量的迭代计算

matlab 信道容量的迭代计算
matlab 信道容量的迭代计算

《信息论基础》课程实验报告(四)

matlab实验十七__牛顿迭代法(可打印修改)

实验十七牛顿迭代法 【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习、掌握MATLAB软件的有关命令。 【实验内容】 用牛顿迭代法求方程的近似根,误差不超过。 3210 ++-=3 10- x x x 【实验准备】 1.牛顿迭代法原理 2.牛顿迭代法的几何解析 3.牛顿迭代法的收敛性 4.牛顿迭代法的收敛速度 5.迭代过程的加速 6.迭代的MATLAB命令 MATLAB中主要用for,while等控制流命令实现迭代。 【实验重点】 1.牛顿迭代法的算法实现 2.牛顿迭代法收敛性和收敛速度 【实验难点】 1.牛顿迭代法收敛性和收敛速度 【实验方法与步骤】 练习1用牛顿迭代法求方程在x=0.5附近的近似 3210 ++-= x x x

根,误差不超过。 310-牛顿迭代法的迭代函数为 322()1()()321 f x x x x g x x x f x x x ++-=-=-'++相应的MATLAB 代码为 >>clear; >>x=0.5; >>for i=1:3 >>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1) >>end 可算的迭代数列的前3项0.5455,0.5437,0.5437。经三次迭代,就大大超过了精度要求。 练习2 用牛顿迭代法求方程的近似正实根,由此建2(0)x a a =>立一种求平方根的计算方法。 由计算可知,迭代格式为,在实验12的练习4中1()()2a g x x x =+已经进行了讨论。 【练习与思考】 1.用牛顿迭代法求方程的近似根。 ln 1x x =2.为求出方程的根,在区间[1,2]内使用迭代函数进行310x x --=迭代,纪录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果。 3.使用在不动点的泰勒公式,证明牛顿迭代法收敛原理。*x

信道容量的计算

§4.2信道容量的计算 这里,我们介绍一般离散信道的信道容量计算方法,根据信道容量的定义,就是在固定信道的条件下,对所有可能的输入概率分布)(x P 求平均互信息的极大值。前面已知()Y X I ;是输入概率分布的上凸函数,所以极大值一定存在。而);(Y X I 是r 个变量 )}(),(),({21r x p x p x p 的多元函数。并且满足1)(1 =∑=r i i x p 。所以可用拉格朗日乘子法来 计算这个条件极值。引入一个函数:∑-=i i x p Y X I )();(λ φ解方程组 0) (] )();([) (=∑?-???i i i i x p x p Y X I x p λ φ 1)(=∑i i x p (4.2.1) 可以先解出达到极值的概率分布和拉格朗日乘子λ的值,然后在解出信道容量C 。因为 ) () (log )()();(11 i i i i i r i s j i y p x y Q x y Q x p Y X I ∑∑=== 而)()()(1 i i r i i i x y Q x p y p ∑== ,所以 e e y p y p i i i i i y p x y Q i x p i x p l o g l o g ))(ln ()(log ) ()()() (==????。 解(4.2.1)式有 0log )()()()()()(log )(111=--∑∑∑===λe y p x y Q x y Q x p y p x y Q x y Q i i i i i r i s j i i i i s j i i (对r i ,,2,1 =都成立) 又因为 )()()(1j k k r k k y p x y Q x p =∑= r i x y Q s j i j ,,2,1,1)(1 ==∑= 所以(4.2.1)式方程组可以转化为 ),,2,1(log ) ()(log )(1r i e y p x y Q x y Q j i j s j i j =+=∑=λ 1)(1 =∑=r i i x p

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

DMC信道容量迭代计算的matlab实现

DMC 信道容量迭代计算的matlab 实现--通信与信息系统 一、用了matlab 实现DMC 容量迭代的算法如下: 1. 初始化信源分布:.0det a 10,1,0,1)(>>=?==,选置,,k r i r P k i 一般我选deta=0.000001。 2. }{,)()()()(k ij i ji k i ji k i k ij t p p p p t 得反向转移概率矩阵由式∑=。 3. ()()()()(){}111]log exp[] log exp[+++==∑∑∑k i k i j ij k ji j ij k ji k i p P t p t p p 计算由式。 4. ()()()()()()。C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++????????????????==∑∑计算由式 5. 若a C C C k k k det )1() ()1(>-++,则k=k+1,转第2步 6.输出迭代次数k 和()1+k C 和1+k P ,终止。 二、了解了信道容量的定义和DMC 信道容量迭代计算方法,我用了matlab 来进行编程进行迭代计算得出信道容量。不足之处在于每迭代一次就输出一次迭代次数直到最后一次迭代。 1)输入:输入信源个数、信宿个数和信道容量的精度,程序能任意生成随机的 信道转移概率矩阵,也可以自己输入信道转移矩阵。 2)输出:输出最佳信源分布和信道容量。将附件里的dmc.m 文件直接run 运行 可以自主输入信道转移概率矩阵,按照程序中提示将那两句代替判 断输入矩阵是否正确的那部分,dmc1.m 运行可以随机生成信道转移 概率矩阵。 三、检验程序 之一: 输入信源个数:2 输入信宿个数:3 输入信道容量的精度: 0.000001 输入信道转移矩阵P :[0.5000 0.3000 0.2000;0.3000 0.5000 0.2000] 之二:P :[0.4000 0.3000 0.2000;0.3000 0.5000 0.2000] 之三:P :[1.1000 -0.3000 0.2000;0.3000 0.5000 0.2000] 之四:P:[0.6 0.4;0.01 0.99] 之五:自动生成信道转移矩阵

实验三 信道容量计算

实验三信道容量计算 一、实验目的: 了解对称信道与非对称信道容量的计算方法。 二、实验原理: 信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。本实验利用信道容量的算法,使用计算机完成信道容量的计算。 实验采用迭代算法计算信道容量,即:设DMC的转移概率pyx(i,j),p(i)是任意给定的一组初始给定输入分布,开始为等概率分布,以后逐次迭代更新p(i)的取值。其所有分量P (i)均不为0。按照如下方法进行操作: 具体方法: 1、计算q(j)=∑ i j i pyx i p) ,( *)(,pyx(i,j)为信道转移概率 2、计算a(i) 先算中间变量d(i)=∑ j j q j i pyx j i pyx) ( /) ,( log( *) ,( 然后,a(i)=exp(d(i)) 3、计算中间变量U=∑ i i p i a)( *)( 4、计算IL=log2(u) 5、计算IU=log2(max(a(i)) 6、当IU-IL>ε(ε为设定的迭代精度)时,进入以下循环,否则输出迭代次数n,信道容量C=IU计算结果,最佳分布p(i)。 ①重新计算p(i)=p(i)*a(i)/U ②计算q(j),方法同1 ③计算a(i),方法同2 ④计算中间变量U=∑ i i p i a)( *)( ⑤计算IL=log2(u) ⑥计算IU=log2(max(a(i)) ⑦计次变量n=n+1

返回6判断循环条件是否满足。 四、实验内容: 假设离散无记忆二元信道如图所示,编程,完成下列信道容量的计算 2e 1. 令120.1e e p p ==和120.01e e p p ==,先计算出信道转移矩阵,分别计算该对称信道的信道容量和最佳分布,将用程序计算的结果与用对称信道容量计算公式的结果进行比较,并贴到实验报告上。 2. 令10.15e p =,20.1e p =和10.075e p =20.01e p =,分别计算该信道的信道容量和最佳分布; 四、实验要求: 在实验报告中给出源代码,写出信道对应的条件转移矩阵,计算出相应结果。并定性讨论信道容量与信道参数之间的关系。

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形') M=5 %每行的方格数,改变M可以方便地改变剖分的点数 u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵 disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。') disp('对边界内的点赋初值并使用边界条件对边界赋值:') for j=1:M-1 for i=1:M-1 u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值 end end for i=1:M+1 u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值 u(1,M+1)=0; end u tic %获取运行时间的起点 disp('迭代次数为N') N=6 %迭代次数,改变N可以方便地改变迭代次数 disp('n为当前迭代次数,u为当前值,结果如下:') for n=1:N for p=2:M i=M+2-p; for j=2:M u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法 end end n %输出n u %输出u end disp('所用的时间:') t=toc %获取算法运行需要的时间 [x,y]=meshgrid(0:1/M:1,0:1/M:1); z=u(1,:); for a=2:M+1 z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值 end mesh(x,y,z)%绘制三维视图以便清楚地显示结果 mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。 (2)学会用Matlab 编写各种方法求解线性方程组的程序。 1.2 实验题目: 1. 用列主元消去法解方程组: 1241234 123412343421233234x x x x x x x x x x x x x x x ++=??+-+=??--+=-??-++-=? 2. 用LU 分解法解方程组,Ax b =其中 4824012242412120620266216A --?? ?- ?= ? ?-??,4422b ?? ? ?= ?- ?-?? 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组: 123234 1231234102118311210631125x x x x x x x x x x x x x -+=-??-+=-??-+=??-+-+ =? 二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 1111221122222n n n n nn n n b x b x b x g b x b x g b x g +++=??++=????= ? 这个过程就是消元,然后再回代就好了。具体过程如下: 对于1,2, ,1k n =-,若() 0,k kk a ≠依次计算

()() (1)()()(1)()()/,,1, ,k k ik ik kk k k k ij ij ik kj k k k i i ik k m a a a a m a b b m b i j k n ++==-=-=+ 然后将其回代得到: ()() ()()()1/()/,1,2,,1 n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+?=??=-=--? ? ∑ 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现() 0k kk a =的情况,这时消元就无法进行了,即使主元数() 0,k kk a ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU 分解)的原理 先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 1111111 11 1,1,2,,/,2,,,,,1,,,2,3, ()/,1,2, ,i i i i k kj kj km mj m k ik ik im mk kk m u a i n l a u i n u a l u j k k n k n l a l u u i k k n k n -=-===?? ==?? =-=+??=??=-=++≠?? ∑∑且 由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为 11 111,2,3,/()/,1,2, ,1 i i i ij j j n n nn n i i ij j ii j i y b y b l y i n x y u x y u x u i n n -==+=??? =-=?? =??? =-=--?? ∑∑ 以上为LU 分解法。

信道容量实验报告

湖南大学 信息科学与工程学院 实验报告 实验名称信道容量的迭代算法课程名称信息论与编码 第1页共9页

1.实验目的 (1)进一步熟悉信道容量的迭代算法; (2)学习如何将复杂的公式转化为程序; (3)掌握C 语言数值计算程序的设计和调试技术。 2、实验方法 硬件:pc 机 开发平台:visual c++软件 编程语言:c 语言 3、实验要求 (1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。 (2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每 个具体的转移概率在运行时从键盘输入。 (3)输出:最佳信源分布P*,信道容量C 。 4.算法分析 1:procedure CHANNEL CAPACITY(r,s,(ji p )) 2:initialize:信源分布i p =1/r ,相对误差门限σ,C=—∞ 3:repeat 4: 5: 6: C 221 1 log [exp(log )] r s ji ij r j p φ==∑∑ 7:until C C σ ?≤ 8:output P*= ()i r p ,C 9:end procedure 21 21 1 exp(log ) exp(log ) s ji ij j r s ji ij r j p p φφ===∑∑∑i p 1 i ji r i ji i p p p p =∑ij φ

5.程序调试 1、头文件引入出错 f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory ————#include 纠错://#include f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory ————#include 纠错://#include 2、变量赋值错误 f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifier f:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast ————float **phi_ij=ij=NULL; 纠错:float **phi_ij=NULL; 3、常量定义错误 f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;iDELTA) f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' ' ————if(fabs(p_j)>=DELTA) f:\visualc++\channel\Cpp1.cpp(100) : error C2021: expected exponent value, not ' ' ————if(fabs(phi_ij[i][j])>=DELTA) f:\visualc++\channel\Cpp1.cpp(116) : error C2021: expected exponent value, not ' ' ————while(fabs(C-C_pre)/C>DELTA); 纠错:#define DELTA 0.000001; F:\visualc++\channel\Cpp1.cpp(68) : error C2065: 'MAXFLOAT' : undeclared identifier F:\visualc++\channel\Cpp1.cpp(68) : warning C4244: '=' : conversion from 'int' to 'float', possible loss of data ————C=-MAXFLOAT; 纠错:#define MAXFLOAT 1000000; 3、引用中文逗号 f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1' f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1' f:\visualc++\channel\cpp1.cpp(60) : error C2065: 'Starting' : undeclared identifier f:\visualc++\channel\cpp1.cpp(60) : error C2059: syntax error : '.'

MATLAB样例之雅克比迭代法

要求: 下面分别使用雅克比迭代法和高斯-赛德尔迭代法求一个方程组的近似解用的线性方程组是按实验要求给的: 7*x1+x2+2*x3=10 x1+8*x2+2*x3=8 2*x1+2*x2+9*x3=6 雅克比迭代法的matlab代码:(老师写的) A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(any(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); while 1 x1=B*x0+f K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end 高斯-赛德尔迭代法matlab代码:(自己改的)

A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(all(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); x00=x0; while 1 x11=B*x0+f; x00(1,1)=x11(1,1); x12=B*x00+f; x00(2,1)=x12(2,1); x13=B*x00+f; x00(3,1)=x13(3,1); x1=x00 K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end

正式实验报告二—信道容量的计算

一、实验目的 1.掌握离散信道的信道容量的计算方法; 2.理解不同类型信道的不同特点与不同的计算方法; 二、实验内容 1.进一步熟悉一般离散信道的信道容量计算方法; 2.进一步复习巩信道性质与实际应用; 3.学习如何将复杂的公式转化为程序。 三、实验仪器、设备 1、计算机-系统最低配置256M内存、P4 CPU; 2、MATLAB编程软件。 四、实现原理 信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。本实验利用信道容量的算法,使用计算机完成信道容量的计算。 实验采用迭代算法计算信道容量,即:设DMC的转移概率pyx(i,j),p(i)是任意给定的一组初始给定输入分布,开始为等概率分布,以后逐次迭代更新p(i)的取值。其所有分量P (i)均不为0。按照如下方法进行操作: 具体方法: 1、计算q(j)= i j i pyx i p) ,( *)(,pyx(i,j)为信道转移概率 2、计算a(i)

先算中间变量d(i)=∑ j j q j i pyx j i pyx) ( /) ,( log( *) ,( 然后,a(i)=exp(d(i)) 3、计算中间变量U=∑ i i p i a)( *)( 4、计算IL=log2(u) 5、计算IU=log2(max(a(i)) 6、当IU-IL>ε(ε为设定的迭代精度)时,进入以下循环,否则输出迭代次数n,信道容量C=IU计算结果,最佳分布p(i)。 ①重新计算p(i)=p(i)*a(i)/U ②计算q(j),方法同1 ③计算a(i),方法同2 ④计算中间变量U=∑ i i p i a)( *)( ⑤计算IL=log2(u) ⑥计算IU=log2(max(a(i)) ⑦计次变量n=n+1 返回6判断循环条件是否满足。 五、实验步骤 1、计算非对称信道的信道容量 运行程序

迭代求信道容量

迭代法求(非对称)信道容量 前言:对于给定的信道,除了对称信道之外,信道容量的计算是比较复杂的,但可以用迭代算法实现近似的信道容量。 具体细节:1..设输入变量为A (ai ),输出为B(bi),对于给定的信道,信道转移矩阵一般都为定值,设为已知,用矩阵Pa2b 表示。 2.为了提高计算效率,将累加求和等运算尽量用矩阵运算而不是循环运算。 实验数据分析:实验发现,当输入的信道转移矩阵为对称信道时,输入分布很快收敛于等概分布,然后很快的退出迭代运算而输出结果,当然这时候的结果是经检验不正确的。具体分析原因如下: 当迭代至输入分布赋值为等概(或接近等概)时,事实上我们一开始就初始化输入分布P (ai )为等概分布,由 ])|()()|(ln )|(exp[∑∑=j i i j i i j i j i a b P a P a b P a b P α 其中)(j b P =)|()(i j i i a b P a P ∑,当)(i a P 等概分布且信道为准对称时易得)(j b P 等概记为P (b0)。所以])()|(log )|(exp[0b P a b P a b P i j i j j i ∑=α,由对称矩阵性质易得每行求和后数值相等。故得到i α是相等的(记为0α)。所以: C(n ,n)=)ln())(ln())(ln())(ln( 000αααα===∑∑∑i i i i i i i a P a P a P 而另一变量: C '(n+1,n)=)ln()max ln(0αα=i i 可见C=C ',则C-C '<ε恒成立,故退出整个迭代过程,而得不到正确的结果。 具体实现代码(matlab )如下: %通过迭代算法求某信道的信道容量% %设输入变量为A (ai ),输出为B(bi),对于给定的信道,信道转移矩阵一般都为定值,设为已知,用矩阵Pa2b 表示% %为了提高计算效率,讲累加求和等运算尽量用矩阵运算而不是循环运算% %最后为了方便调用,将其封装成一个函数。 %输入参数:信道转移矩阵:Pa2b (r*s 矩阵);误差容限:Error_Tor ,误差容限缺省值为1*10^(-2)% %输出参数:为信道误差容限下的信道容量:Channel_Cap_Extreme ; %和对应的最佳输入分布:Pa_opti% %BY :独孤败% %AT:NUPT 2010-11-18% function [Channel_Cap_Extreme,Pa_opti]=CapChannel_DieDai(Pa2b,Error_Tor)

二分法、简单迭代法的matlab代码实现

实验一非线性方程的数值解法(一) 信息与计算科学金融崔振威201002034031一、实验目的: 熟悉二分法和简单迭代法的算法实现。 二、实验内容: 教材P40 2.1.5 三、实验要求 1根据实验内容编写二分法和简单迭代法的算法实现 2简单比较分析两种算法的误差 3试构造不同的迭代格式,分析比较其收敛性 (一)、二分法程序: function ef=bisect(fx,xa,xb ,n, delta) % fx是由方程转化的关于x的函数,有fx=0。 % xa解区间上限 % xb解区间下限 % n最多循环步数,防止死循环。 %delta为允许误差 x=xa;fa=eval(fx); x=xb;fb=eval(fx); disp(' [ n xa xb xc fc ]'); for i=1: n xc=(xa+xb)/2;x=xc;fc=eval(fx); X=[i,xa,xb,xc,fc]; disp(X), if fc*fa<0 xb=xc; else xa=xc; end if (xb-xa)

k=0; while abs(x-xO)>eps & k> fplot('[x A5-3*x A3-2*x A2+2]',[-3,3]);grid 得下图: 由上图可得知:方程在[-3,3]区间有根。 (2 )、二分法输出结果 >> f='xA5-3*xA3-2*xA2+2' f = X A5-3*X A3-2*X A2+2 >> bisect(f,-3,3,20,10A(-12)) 2.0000 - 3.0000 0 -1.5000 0.0313

信道容量及其一般计算方法

实验一信道容量及其一般计算方法 1.实验目的 一般离散信道容量的迭代运算 2.实验要求 (1)理解和掌握信道容量的概念和物理意义 (2)理解一般离散信道容量的迭代算法 (3)采用Matlab编程实现迭代算法 (4)认真填写实验报告。 3.源代码 clc;clear all; //清屏 N = input('输入信源符号X的个数N='); //输入行数 M = input('输出信源符号Y的个数M='); //输入列数 p_yx=zeros(N,M); //程序设计需要信道矩阵初始化为零 fprintf('输入信道矩阵概率\n') for i=1:N //从第一行第一列开始输入 for j=1:M p_yx(i,j)=input('p_yx='); //输入信道矩阵概率 if p_yx(i)<0 //若输出概率小于0则不符合概率分布 error('不符合概率分布') end end end for i=1:N //各行概率累加求和 s(i)=0; for j=1:M s(i)=s(i)+p_yx(i,j); end end for i=1:N //判断是否符合概率分布 if (s(i)<=0.999999||s(i)>=1.000001) //若行相加小于等于0.9999999或者大于等于1.000001 Error //('不符合概率分布') end end b=input('输入迭代精度:'); //输入迭代精度 for i=1:N p(i)=1.0/N; //取初始概率为均匀分布(每行值分别为1/N,)end for j=1:M //计算q(j) q(j)=0; for i=1:N q(j)=q(j)+p(i)*p_yx(i,j); //均匀分布的值乘上矩阵值后+q(j),然后赋值给q(j)实现求和

matlab 迭代法[精品]

matlab 迭代法[精品] 1. 矩阵 122,211,,,,,,,,,A,111A,222, 11,,,,,,,,221,,112,,,, 证明:求解以为系数矩阵线性方程组的Jacobi迭代式收敛的,而A1 Gauss-Seidel方法是发散的;求解以为系数矩阵线性方程组的A2实验名称Gauss-Seidel是收敛的,而Jacobi方法是发散的. 2. 矩阵 1aa,,,,Aaa,1 ,,,,aa1,, (a) 参数取什么值时,矩阵是正定的. a (b) 取什么值时,求以为系数矩阵线性方程组的Jacobi迭代式收aa 敛的. 1、根据迭代收敛性的充分必要条件来判断Jacobi迭代式与Gauss-Seide 迭代式的收敛性,迭代收敛性仅与方程组系数矩阵有关,与右端无关;而且不依赖于初值的选取。实验目的 2、根据矩阵的判断定理求得矩阵元素a的取值,同时根据矩阵线性方程组的Jacobi迭代式收敛的充分条件(严格对角占优)来求a得取值。 1、(1)检验线性方程组的Jacobi迭代式的收敛性: function jacobi(A) D=zeros(3); for i=1:3 D(i,i)=A(i,i); 实验内容end (算法、程B=D^(-1)*(D-A); 序、步骤和k=max(abs(eig(B))) 方法) if k<1

'该线性方程组的Jacobi迭代式是收敛的' else k>=1 '该线性方程组的Jacobi迭代式是发散的' end (2)检验线性方程组的Gauss-Seide迭代式的收敛性: function Gauss(A) D=zeros(3); L=zeros(3); U=zeros(3); for i=1:3 D(i,i)=A(i,i); end L(2:3,1)=A(2:3,1); L(3,2)=A(3,2); U(1,2:3)=A(1,2:3); U(2,3)=A(2,3); B=-(D+L)^(-1)*U; k=max(abs(eig(B))) if k<1 '该线性方程组的Gauss-Seidel迭代式是收敛的' else k>=1 '该线性方程组的Gauss-Seidel迭代式是发散的' end 2、(1)参数取什么值时,矩阵是正定的.(矩阵的特征值全为正) a >> syms a >> A=[1 a a;a 1 a;a a 1]; >> eig(A) ans = 2*a+1 1-a

信道容量实验报告

w .. . .. 湖南大学 信息科学与工程学院 实验报告 实验名称信道容量的迭代算法 课程名称信息论与编码

1.实验目的 (1)进一步熟悉信道容量的迭代算法; (2)学习如何将复杂的公式转化为程序; (3)掌握C 语言数值计算程序的设计和调试技术。 2、实验方法 硬件:pc 机 开发平台:visual c++软件 编程语言:c 语言 3、实验要求 (1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。 (2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每 个具体的转移概率在运行时从键盘输入。 (3)输出:最佳信源分布P*,信道容量C 。 4.算法分析 1:procedure CHANNEL CAPACITY(r,s,( ji p )) 2:initialize:信源分布 i p =1/r ,相对误差门限σ,C=—∞ 3:repeat 4: 5: 1i ji r i ji i p p p p =∑ij φ

6: C 2211log [exp(log )] r s ji ij r j p φ==∑∑ 7:until C C σ ?≤ 8:output P*= ()i r p ,C 9:end procedure 5.程序调试 1、头文件引入出错 f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory ————#include 纠错://#include f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory ————#include 纠错://#include 2、变量赋值错误 f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifier f:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast ————float **phi_ij=ij=NULL; 纠错:float **phi_ij=NULL; 3、常量定义错误 f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;iDELTA) f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' ' 21 211exp(log )exp(log )s ji ij j r s ji ij r j p p φφ===∑∑∑i p

matlab迭代法代码

matlab 迭代法代码 1、%用不动点迭代法求方程x-e A x+4=0的正根与负根,误差限是 10A-6% disp(' 不动点迭代法 '); n0=100; p0=-5; for i=1:n0 p=exp(p0)-4; if abs(p-p0)<=10(6) if p<0 disp('|p-p0|=') disp(abs(p-p0)) disp(' 不动点迭代法求得方程的负根为 :') disp(p); break; else disp(' 不动点迭代法无法求出方程的负根 .') end else p0=p; end end

if i==n0 disp(n0) disp(' 次不动点迭代后无法求出方程的负根') end p1=1.7; for i=1:n0 pp=exp(p1)-4; if abs(pp-p1)<=10(6) if pp>0 disp('|p-p1|=') disp(abs(pp-p1)) disp(' 用不动点迭代法求得方程的正根为 ') disp(pp); else disp(' 用不动点迭代法无法求出方程的正根 '); end break; else p1=pp; end end if i==n0

disp(n0) disp(' 次不动点迭代后无法求出方程的正根 ') end 2、%用牛顿法求方程x-e A x+4=0的正根与负根,误差限是disp(' 牛顿法') n0=80; p0=1; for i=1:n0 p=p0-(p0-exp(p0)+4)/(1-exp(p0)); if abs(p-p0)<=10(6) disp('|p-p0|=') disp(abs(p-p0)) disp(' 用牛顿法求得方程的正根为 ') disp(p); break; else p0=p; end end if i==n0 disp(n0) disp(' 次牛顿迭代后无法求出方程的解 p1=-3; for i=1:n0 p=p1-(p1-exp(p1)+4)/(1-exp(p1)); 10A-6 ') end

大学信息论_信道容量的迭代算法

陕西科技大学实验报告 班级: XXXX 学号:XXXXXXXXX 姓名:XXX 实验组别: 实验日期: 报告日期: 成绩: 报告内容:(目的和要求、原理、步骤、数据、计算、小结等) 实验名称:信道容量的迭代算法 一、实验目的 (1) 进一步熟悉信道容量的迭代算法。 (2) 学习如何将复杂的公式转化为程序。 (3) 掌握高级语言数值计算程序的设计和调试技术。 二、实验要求 (1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。 (2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每 个具体的转移概率在运行时从键盘输入。 (3)输出:信道容量C 。 三、实验原理(流程图): 1: procedure ChannelCapacity(r, s, (ji p )) 2: initialize: 信源分布1i p r = ,相对误差门限δ,C =-∞ 3: repeat 4: 1i ji ij r i ji i p p p p φ=←∑ 5: 111exp log exp log s ji ij j i r s ji ij i j p p p φφ===?? ???←?? ??? ∑∑∑ 6: 11log exp log r s ji ij i j C p φ==????←?? ?????? ?∑∑ 7: until C C δ?≤ 8: output C 9: end procedure

四、实验数据(源代码): #include #include #define MAX 100 double Calculate_a(int k,double pa[]); double Calculate_C1(double pa[],double a[]); double Calculate_C2(double a[]); int r,s; double pba[3][3]; void main() { int i,j; double C1,C2,E; double a[MAX],pa[3];

相关主题
文本预览
相关文档 最新文档