题目蒙特卡洛算法的设计和实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:蒙特卡洛算法的设计和实现

班别:12accp2班

组员姓名:蔡添来杨善挺

时间:2013.6.28

应用数学二期末考核

项目设计说明书

项目名称:蒙特卡洛算法的设计和实现

人员情况

(注:写上组员的姓名、学号)

蔡添来-010*******

杨善挺-010*******

人员分工情况

(注:写上每个组员完成那个部分的详细情况)

N-S图和代码蔡添来负责编写,杨善挺参与讨论,杨善挺负责写摘要问题分析、问题总结以及饼状图的代码编写及处理等等,主要结果及其分析讨论部分由蔡添来写,该部分一些问题杨善挺参与讨论。

蒙特卡洛算法的设计和实现

摘要

(注:请写上你对本项目题目的基本认识和介绍,解决该问题用的的方法和算法的基本思想和原理,以及本问题的主要结论及对结论的简单总结和分析)

本文根据蒙特卡洛算法以实验为基础阐述其算法的设计思路和实现过程,可以通过反复多次的实验,利用数学的的N-S算法,以及MATLAB编程等,并联系实际生活情况,分析蒙特卡洛算法给现实世界带来的各种好处,并提出合理的的建议。

针对本项目问题,首先从抽奖的本质出发,分析该问题到底能让哪方获益,估算抽奖者得到各种结果的概率,以及设奖者受益情况。首先从硬币的分值来分析,列出抽取10枚硬币的总和,再计算每种情况出现的概率,再给予一定的奖罚,这样才能即吸引抽奖者,又可以让设奖者盈利,让抽奖者的损失尽可能少。既可以达到娱乐的效果,又可以得到大家都认可。

最后总结蒙特卡洛算法在数学方面的运用以及对现代社会的经济等方面的推动作用,并给出一些建议。

关键词:模拟概率大量统计

蒙特•卡罗的背景介绍和发展

(注:请介绍你对本项目的背景和发展历史等相关内容)

蒙特•卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。

蒙特卡洛算法对于本身就具有随机性质的问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。

蒙特卡罗方法的验证需要次数较多的实验和多次的验证。实验越接近理想状态,所得到的实验结果才越精确。所谓理想的实验次数,就是实验次数尽可能的多和用同样的验证方法验证多次,并取他们的平均值,以便减少误差。而且蒙特卡罗方法每次得到的结果具有随机性,因此,现实生活中该算法又可以为人们的生活娱乐带来乐趣,又可以为商家带来赚钱对的好机会。

当实验对象是某种随机事件出现的概率时,或者是某个随机变量的期望值时,可以进行反复“实验”,以这种事件出现的频率估计这一随机事件的概率,并计算全部概率的均值,或者得到这个随机变量的某些数字特征,并将其作为问题的解。以便减少实验误差。

对于本项目的实验对象,利用蒙特卡罗方法以同样的方法反复实验,方便快捷可以得到我们想要的结果,,这是典型的蒙特卡罗方法的运用,而近代也有不少科学家解决同样的问题。例如:1777年,法国数学家布丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π。而这被认为是蒙特卡罗方法的起源。

利用蒙特.卡罗方法对该抽签将活动模拟问题分析和数学模型

(注:请介绍你对本项目的解决方法的思路和方法,要求:必须具有对问题解决方法的数学模型(数学模型:数学表达式或算法)的介绍和为什么使用该模型?若问题能求出理论解,在此地方必须给出理论解)

利用N-S图分析思路,再利用MATLAB程序代码运行得到具体结果,结合高中数学的组合运算,因涉及概率等等问题,以及局限于我们的知识,我们只有利用高中的组合运算和大学一年级的N-S图来分析问题,并且利用这几个经典的数学方法,我们可以轻松的解决这个抽奖问题。

利用以上数学模型的组合知识分析得到理论值为:100元的概率为2/184756=1/92378,不奖不罚的概率32850/184756 约为 0.1778,得10元的概率为200/184756约为 1.0825e-005,罚一元的概率为151704/184756约为0.821。奖金的期望约为:-0.8092元。

我们利用蒙特.卡罗的思想利用编写的MATLAB代码在MATLAB中进行大量的模拟抽奖,在进行统计得到的结果与理论值是否拟合

利用蒙特.卡罗方法对该抽签将活动模拟的算法实现和代码

(注:请介绍你对本项目的算法和MATLAB程序代码。要求:算法必须用伪代码或N-S图表示,代码必须附上完整代码,如果具有图片的话,必须使用PS等作图软件制作的图,不能是QQ截图。)

N-S图:

h=55?或h=95?

Yes NO

h=70或h=75?或h=80?

No yes

n1=n1+1 n2=n2+1 n3=n3+1 n4=n4+1

p1=n1/n, p2=n2/n,p3=n3/n,p4=n4/n,

E=p1*100+p2*10+p3*0+p4*(-1)

输出p1,p2,p3,p4,E

n是进行模拟的次数,p1为奖金为100元的概率,p2为奖金为10元的概率,p3为奖金为不奖不罚的概率,p4为奖金为罚1元的概率,n1—n4分别代表进行n次模拟出现奖100元、奖10元、不奖不罚、罚一元的次数;Q是装签的数组,E是获得奖金的期望,h是抽到10枚签的总分值。

代码:

n=10000; %%执行n次

n1=0;n2=0;n3=0;n4=0;%% h 为抽签分值的总数

for i=1:n

h=0;

Q=[10 10 10 10 10 10 10 10 10 10 5 5 5 5 5 5 5 5 5 5]; %%模拟装10枚

%%分值为10的签和10枚分值为5的签的签简

for j=1:10

m=randint(1,1,[1,20-j+1]); %%执行随机抽签

k=Q(m);

Q(m)=[]; %%删除已抽的签

h=h+k; %%累加得到10次硬币的总和end

if h==50|h==100

n1=n1+1; %%n1为执行n次中出现中100块的次数elseif h==55|h==95

n2=n2+1; %%n2为执行n次中出现中10块的次数elseif h==70|h==75|h==80

n4=n4+1; %%%n3为执行n次中出现没有中也不用赔即0元的情况

elseif h==65|h==60|h==85|h==90

n3=n3+1; %%n4为执行n次中出现罚1元的情况

相关文档
最新文档