挑战matlab积分极限
我遇到一个积分,是被引用较多的一个误码率公式,但用matlab积分,怎么也得不到图中曲线,我到现在没解决,请教高手在Matlab积分仿真极限1中主要是对以前发的作补充。纵轴是求出的值,采用log为底画得<br>调用的函数为semilogy。
个人觉得matlab在求高阶指数积分有缺陷?
提示:纵坐标为对数时,一般用semilogy,详见help。但也要注意,它给出的横坐标也是对数的。是不是在代入横坐标时先处理为对数值?欢迎大家讨论
经过一段时间,还是自己解决。其实只要看清楚它问的就行,问题是我们常常忽略一些细节。到这个论坛不错,给我提供许多有价值的东东 <P>看来它的确困难?版主能给建议?</P>
回复:(xianuser)挑战matlab积分极限
纵坐标是什么?还有erfc表示什么意思?[此贴子已经被作者于2006-6-11 19:45:52编辑过]
纵坐标是误码率,它是以10为底的坐标轴。<BR>erfc是互补误差函数 在matlab中用 help erfc 它会给出详细解释,这儿反而不好用文字表示
请教新版主
我遇到的积分真的没解? 大致这个意思,但是结果与你的不一样,没细查,没时间了。思路应该一样<br>function ddddd<br>clc<br>k=3;<br>L=255;<br>A=(1+L)/L;<br>gamma=;<br>M=8;<br>y1=[-sqrt(15)/5,0,sqrt(15)/5];<br>for i=1:length(gamma)<br> f1=inline(['1-','(.5*(erfc(y*200/sqrt(2)))).^(',num2str(M),'-1',')'],'y');<br> fva=f1(y1);<br> f21=inline(['200*',num2str(fva(1)),'.*exp(-(200*y+',num2str(A),'*',num2str(gamma(i)),')','.^2/2)/sqrt(2*3.1416)'],'y');<br> f21=f21(y1(1));<br> f22=inline(['200*',num2str(fva(2)),'.*exp(-(200*y+',num2str(A),'*',num2str(gamma(i)),')','.^2/2)/sqrt(2*3.1416)'],'y');<br> f22=f22(y1(2));<br> f23=inline(['200*',num2str(fva(3)),'.*exp(-(200*y+',num2str(A),'*',num2str(gamma(i)),')','.^2/2)/sqrt(2*3.1416)'],'y');<br> f23=f23(y1(3));<br> f(i)=(5*f21+8*f22+5*f23)/9;%三点gauss积分公式<br>end<br>format long g<br>plot(f)<br>[此贴子已经被作者于2006-6-16 1:01:58编辑过]
谢谢,虽然还有一段距离,但有点模样 <P>经检查,发现六楼在计算<BR>f21=inline(['200*',num2str(fva(1)),'.*exp(-(200*y+',num2str(A),'*',num2str(gamma(i)),')','.^2/2)/sqrt(2*3.1416)'],'y');<BR> f21=f21(y1(1));<BR>时,对sqrt(2×k×Eb/N0)的公式表达有错。<BR>并且积分有限,得出结果有误。<BR>希望有更好地解决方法<BR></P> function ddddd<br>clc<br>k=3;<br>L=255;<br>A=(1+L)/L;<br>gamma=;<br>M=8;<br>y1=[-sqrt(15)/5,0,sqrt(15)/5];<br>for i=1:length(gamma)<br> fq1=inline(['(1-','(.5*(erfc(y./sqrt(2)))).^(',num2str(M),'-1','))','.*exp(-(y+',num2str(A),'*',num2str(sqrt(2*gamma(i))),')','.^2/2)/sqrt(2*3.1416)'],'y');<br> fg1=inline(['1000*','(1-','(.5*(erfc(1000*y./sqrt(2)))).^(',num2str(M),'-1','))','.*exp(-(1000*y+',num2str(A),'*',num2str(sqrt(2*gamma(i))),')','.^2/2)/sqrt(2*3.1416)'],'y');<br> fg2=fg1(y1);<br> fgauss(i)=(5*fg2(1)+8*fg2(2)+5*fg2(3))/9;<br> fq2(i)=quadl(fq1,-1000,1000);<br>end<br>format long g<br>disp(['高斯三点积分公式的求解结果fgauss=[',num2str(fgauss),']'])<br>disp(['数值积分quadl命令的求解结果fq2=[',num2str(fq2),']'])<br>plot(gamma./k,fq2,'o',gamma./k,fq2,'r')<br>hold on<br>plot(gamma./k,fgauss,'o',gamma./k,fgauss,'r')<br>===========================================================================================<br>高斯三点积分公式的求解结果fgauss=<br>数值积分quadl命令的求解结果fq2=<br>============================================================================================<br>上述为用gauss三点积分公式和quadl高精度积分所得的计算结果,可以看出:两者在同一数量级,我没有仔细检查公式我是否抄对,但是如果公式我没抄错,计算结果应该就是这个,至于你所提出的“积分有限”我个人认为是你自己对数值积分的理解有偏差,在数值积分中没有“无穷大”的概念,只有收敛趋势和逼近误差。在上述题目中我取积分上下限为[-1000,1000],计算结果和100、10000都在一个数量级上,应该是向某个数值收敛的(这个数值应该是0)。<br>btw:前面我所给的程序只是给个意思,不是确切的求解方法,否则应该对主要步骤加while的循环扩大积分的上下限保证计算精度。
[此贴子已经被作者于2006-6-17 12:31:02编辑过]
谢谢 bainhome
这里先谢谢 <STRONG><FONT face=Verdana color=#61b713>bainhome。虽然离最终值还有一段距离<br>我<FONT color=#000000>引出这个问题不是说怎么计算,主要是如何验证与公式对应的图。<br>在仿真中,可能由于精度不够,迟迟得不到图中曲线。但如果只是简单的用定步长来求,它的运算量就有点大。<br>我想也许一些人也遇到与我类似问题吧。在这里,再次谢谢<FONT color=#61b713>bainhome </FONT></FONT><FONT color=#000000>并希望高手们不吝赐教,给出圆满答案,谢谢<br></FONT></FONT></STRONG>[此贴子已经被作者于2006-6-18 9:10:48编辑过]
回复:(xianuser)挑战matlab积分极限
<P><FONT color=#ff0000>bainhome加威望3点,xianuser加威望2点,suffer加威望1点</FONT></P><P>多情清秋<BR>2006年6月19日</P>
页:
[1]