- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大数定律的应用
蒙特卡罗积分法
一、概述
(―)、大数定律:
设X], X2,.…是相互独立的,服从同一分布的随机变量序列,且具有数学期望
E (Xk ) =u(k二1,2,…).作前n个变量的算术平均值丄则对于任意£0,有
lin
〃 T 8
等式①表明,当nToo时这个事件当概率趋于1.即对于任意正数e ,当n充分大时,不
1 H
等式丨一工力-川〈£成立的概率很大,通俗地说,辛钦大数定理是说,对于独立同分布 n铝
1吕
且具有均值“,的随机变量X],…,Xn ,当n很大时他们的算术平均 -工Xk
很可能接 n k={
近于
、蒙特卡罗法
蒙特学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类 非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的 方法,与它对应的是确定性算法。
定积分的计算是Monte Carlo方法引入计算数学的开端,在实际中,许多需要计算多 重积分的复杂问题,用Monte Carl。方法一般都能够很有效地予以解决,尽管Monte Carlo 方法给出的计算结果的精确度不是非常高,但它能很快地提供出一个低精度的模拟结果也是 很有价值的。在多重积分计算屮,由于Monte Carlo方法的误差与积分重数无关,所以它 比常用的均匀网格求积公式要优越。
二、基本原理
根据数学期望的定义,当x在(a,b)上满足均匀分布时,
?b
g(x)dx = (b-a)E[g(x)] ②
我们在(a,b)之间取n个随机数,n的值非常大,当n的值大到一定程度时我们可以用
1 n
—工g(竝)近似g(x)在(a,b)上的数学期望E[g(x)],由此我们再利用公式②,即可得到g(x) n気
在区间(a,b)上的积分的近似值。
三、实例分析
(-)sin函数的积分 首先计算一个比较简单的可以直接进行手算积分的函数的积分
71
12 sinuuZx
Jo
1)、基本思路
1 H
在(0,龙⑵之间取10000个随机数,然后计算出它们的平均值一Yg(Xk)f由
n k=i
于10000个数据已经足够大,在要求不是非常高的情况下我们可以近似得认为它们的平均值
1 ?
-YgM 就等于g(x)在(0,龙/2)之间的数学期望Elg(x)Jo最后利用公式②可得
n结
兀
£2 sinxix= ( 7l /2-0) E[g(x)J
、c程序实现
#include stdio.h
#include time.h
#include math.h
#include dos.h”
#define PI 3.1415926 void main()
{ double t,x,y,sum=0;
long i;
char end;
printf(nwait..u); srand((int)time(0));
printf(nwait..u); srand((int)time(0));
for(i=0;i= 100000;i++)
x=rand()% 10000;
x=x/10000*PI/2;
/*设置随机数种子,保证每次运行程序的结果不一样*/
t=sin(x);
sum=sum+t;
/*取一个在0到10000范围内的整数*/
/*将随机数转换为(0,龙/2)上的随机数*/
/*计算sin函数,即求每个随机数对应的函数值*/
/*对随机数的函数值进行求和*/
printf(n\n%f -PI/2 *sum/—i);
/*计算出g(x)的数学期望乘以龙/2求出积分的*/
/*似值并输出*/
scanf(n%cn,end);
严使程序停在输出完结果的画面, 引
3)理论计算
由于sin函数的积分是比较简单的,我们可以直接对其进行积分,求得精确结果
£1
£
12 sirLvd^=(-cosx
Jo
4)蒙特卡罗法估算结果分析
多次运行程序得到运行结果如下
0. 983056
0. 981828
0. 982811
0. 982450
0. 981573
0. 981261
0.981746
0.981057
0.982819
0.082183
从上面10次运行程序输出的结果可以看到用蒙特卡罗积分法得到的估计值基本稳定在 0.982附近,首先这个值己经比较精确,已经基本达到估算的要求。但令一方面,这个值并 不是在准确值1附近浮动,而是普遍偏小一点点。
误差的来源应该是多方而的但主要在于以下儿点
1、在c程序中产生的随机数并不是真正意义上的完美的随机数,我们利用 x=rand()% 10000;
产生令从0到9999之间的整数,然后令
x=x/10000*PI/2;
从而得到(0,龙/2)区间上的随机数,很显然用这种方法得到的随机数是一些特定的离 散的值,着必然会带来一定的误差。
2、在c程序中当数值的长度超过变量
原创力文档


文档评论(0)