excel怎么用monte carlo

excel怎么用monte carlo,第1张

蒙特卡罗方法(MC)

蒙特卡罗(Monte Carlo)方法:

蒙特卡罗(Monte

Carlo)方法,又称随机抽样或统计试验方法,属于计算数学的一个分支,它是在本世纪四十年代中期为了适应当时原子能事业的发展而发展起来的。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。这也是我们采用该方法的原因。

蒙特卡罗方法的基本原理及思想如下:

当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。可以把蒙特卡罗解题归结为三个主要步骤:构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。

蒙特卡罗解题三个主要步骤:

构造或描述概率过程:

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

实现从已知概率分布抽样:

构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经埋亏皮过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布弯差抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。

建立各种估计量:

一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏空腔估计。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。

1、定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。

2、基于计算机的蒙特卡洛模拟实现步骤:

(1)对每一项活动,输入最小、最大和最可能估计数据(注意这里不是三点估算),并根据提出的问题构造或选择一个简单、适用的概率分布模型,使问题的解对应于该模型中随机变量的某些特征(如概率、均值和方差等),这些特征都可以通过模拟出的概率分布图得到。

(2)根据模型中各个随机变量的分布,利用给定的某种规则,在计算机上快速实施充分大量的随机抽样。

(3)对随机抽样的数据进行必要的数学计算,统计分析模拟试验结果,给出问题的概率解以及解的精度估计,即最小值、最大值以及数学期望值和单位标准偏差。

(4)按照所建立的模型进行仿真试验、计算,求出问题的随机解。

(5)根据求出的统计学处理数据,让计算机自动生成概率分布图,通常为正态分布图。

(6)根据概率分布图读出所需信息,如某项目成本200万情况下的完工概率,或确保70%完工概率时需要的成本等。

3、基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

写一完整的比较费孝颂时,我给一个一次积分的求法,积分函数你可以任意写,一次积分就调用一次,两重积分就积分后再调用一次....

你如果matlab一点都不懂的话,下面程序你看不懂的。

其中,fun是exp(-x^2-y^2)你可巧做郑以单独写一个.m文件或者inline。

下面是随机点法:

clearclcformat long

syms x

a=0 b=sin(x)

n=10^2

k1=unifrnd(a,b,[1 n])

for i=1:n

c1(i)=fun(k1(i))

end

c=min(c1-c1(n/2))d=max(c1+c1(n/2))

k2=unifrnd(c,d,[1 n])

count=0

for i=1:n

x(i)=k1(i)y(i)=k2(i)

if 0<y(i)&0<fun(x(i))&y(i)<fun(x(i))

count=count+1

else if fun(x(i))<y(i)&fun(x(i))<0&y(i)<0

count=count+1

end

end

end

u=(count/n)*((b-a)*(d-c))

u是积分后的函数,你再使用上面的方法积分一次(只不过上限和胡弊下限改变)

mm=100

nn=mm^2

s=0

u=[37.46*1.16 384.8 20.73]%矩阵U第一列代表抗力R,第二列代表fy,第三列代表fc

p=[37.46*0.13 360*0.07 14.3*0.19]%矩阵p的三列分别为R,fy,fc的标准差

a=log(lognrnd(u(1,1),p(1,1),mm,mm))%对数正态分首纤布随机抽样

d=normrnd(u(1,2),p(1,2),mm,mm)%正者模仿态分布fy随机抽样

c=normrnd(u(1,3),p(1,3),mm,mm)%正态分布fc随机抽样

for i=1:nn

if d(i)*As*(h0-as)+c(i)*b*x*(h0-x/2)-n*(h/2-as)-a(i)*1e+6<0% 功能码迟函数

s=s+1

end

i=i+1

end

bb=norminv(1-s/nn)%可靠度指标

disp(s)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417798.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存