Matlab课程设计报告.docx
Matlab课程设计报告课程名称:MAT1.AB通信工程仿真设计题目:基于蒙特卡洛于的正三角形面枳算法姓名:专业班级:所在学院:学校:时间:-.蒙特卡洛计算图形面积的原理设想有一袋豆子,把豆子匀称地朝图形上撒(假定豆子都在一个平面上,相互之间没有重登),然后数这个图形之中有多少颗豆子,得出豆子数目就是图形面积。当豆子越小,散得越多、越匀称的时候,结果就越精确。以数学语言来描述就是:对于求平面上一个边长为1的正方形的内部一个形态不规则的“图形”面积,MonteCarlO方法为:向该正方形匀称地随机投掷M个点,假如其中有N个点落于“图形”内,则该“图形”的面积近似为N/M。投掷的点数越多,结果越精确。二.数学模型如图一所示,可以很简单得到一个边长为1的正三角形的面积:S=1.力立=立N0.43301272224图一正三角形面积求解图.用MonteCarlo方法求正三角形面积设有两个相互独立的随机变量X,门听从-。坐上匀称分布。那么,由它们所确定的坐标点Hy)是匀称分布于半径为日的一个圆区域中,乂该圆内的正三角形的边长为1,如图二所示。明显,坐标点Hy)落入正三角形中的概率P等于该正三角形的面积S与圆的面积S的比,即:S=pS'因此,只要通过随机试验统计出落入正三角形中的频度,即可计算出正三角形的近似面积来。当随机试验的次数充分大的时候,计算结果就趋近于理论真值.三.仿真试验其实现的MAT1.AB程序代码如下:Clearall;$=0:0.01:24pi;x=sin(三);y=s(三);11=3;r=sqrt(3)3;theta=(0:l/n:l)*2*pi;x,yl=pol2cart(theta,r);m=0;xl=24rrand(999,l)-r;yl=24rrand(999,l)-r;index=find(xl.A2+yl.A2>r.A2);xl(index)=11;yl(index)=();N=999;forn=l:Npl=xll:n);ql=yl(l:n);ifyl(n)<(-sqrt(3)/3).*xl(n)+l/3)&&(yl(n)>(sqrt(3)/3).exl(n)-l/3)&&-sqrt(3)/6<yl(n)<sqrt(3)3m=m+l;endplot(pl,ql,'.',x,v);axisequal;axis(-l1-11);text(O5,O6,r试验总次数n=,num2str(n);text(-0.5,-0.7,r落入正三角形的数目m=,num2str(m);text(45,-0.8,r近似正三角形面积S'=',num2str(mn)D;set(gcf,DoubleBuffer','on,);drawnow;End0.8落入正三角形的数目m=50-0.8近似正三角形面积S'=0.063857-V11110.500.5图三MonteCarlo方法随机试脸计算正三角形面枳的过程程序执行中,将动态显示随机落点状况和当前的统计计算结果,图三为重复落点999次的计算结果.随着试验次数增加,计算结果将趋近丁边长为1的正工角形的面积0.4330127.动画模式适合于原理演示。但是,假如要提高程序效率,就应当取消仿真过程中的可视化显示,并利用MAT1.AB的矩阵运和机制来改造程序。卜.面的程序将随机试验次数提商到了IO(X)万次,计算得到的结果精度提高到了小数点后大约2位程序中同时运用/矩阵运算机制和循环结构来负货完成重笑随机试脸,其目的是为了兼顾计算速度和程序内存占用量。矩阵运算是种并行计算机制,计算速度快,但是矩阵越大,内存占用就越多:而循环结构则可选且运用相同的内存区域,尽管速度较慢.,这是MATSB语言固有的特点,在编程中因当就详细问题作出权衡。ticn=10000;r=sqrt/3fork=1:1000xl=2rrand(999,l)-r;yl=24rrand(999,l)-r;index=find(xl.A2+yl.A2>r.A2);xl(index)=11;yl(index)=;mk=sum(yl<(-sqrt(3)3).l÷l3)S(yl>(sqrt(3)3).×l-l3)a-sqrt(3)6<xl<sqrt(3)/3);endS=mean(m).ntime=toc由于是随机试验,重纪运行的结果也不完全相同,口不同计算机配置上的运行耗时也不一样,运行结果如卜;S=0.0153time=1.4240