求教:蒙特卡罗算法模型?

cruxsky 2008-10-29 04:30:27
数学基础不好,请教一下蒙特卡罗算法?
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuker511 2010-02-11
  • 打赏
  • 举报
回复
同样受益,谢谢!!!
cruxsky 2008-10-30
  • 打赏
  • 举报
回复
谢谢ls
gtiroy 2008-10-29
  • 打赏
  • 举报
回复
根据我的理解简单的说就是以部分估计整体,利用随机数来解决问题的方法称为蒙特卡罗算法,记得课本上讲了个例题:

在数值积分法中,我们利用求单位圆的1/4的面积来求得Pi/4从而得到Pi。单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分(若能画图就好了!)只要能求出扇行面积S1在正方形面积S中占的比例K=S1/S就立即能得到S1,从而得到Pi的值.

怎样求出扇形面积在正方形面积中占的比例K呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数m与所投点的总数n的比m/n作为k的近似值。

怎样实现这样的随机投点呢?任何一款计算机语言都有这种功能,能够产生在区间[0,1]内均匀分布的随机数,在mathematica中,产生区间[0,1]内均匀分布随机数的语句是
Random[ ]
产生两个这样的随机数x,y,则以(x,y)为坐标的点就是单位正方形内的一点P,它落在正方形内每个位置的机会均等,P落在扇形内的充要条件是x^2+y^2<=1.

蒙特卡罗算法计算Pi
n=10000;p=();
Do[m=0;Do[x=Random[];y=Random[];If[x^2+y^2<=1,m++],{k,1,n}];
AppendTo[p,N[4m/n]],{t,1,10}];
Print[p];
Sum[p[[t]],{t,1,10}]/10

注:以上语句的功能是:n=10000,每次投10000个点得出Pi的近似值存放到数组p中;一共做10次得到10个近似值,通过语句Print[p]将这10个近似值全部显示出来观察。最后再求这10个近似值的平均值,相当于随机投点100000次得到的近似值。


以上是用Mathenatica编写的程序,方法就是这样,具体只能你自己体会了。



http://zhidao.baidu.com/question/33294955.html

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧