蒙特卡洛方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Байду номын сангаас
蒙特卡洛方法
• 平均分布
– 实现产生一个在一个区间之内的平均分布的随机 数,精度是4位小数。
double AverageRandom(double min,double max) { int minInteger = (int)(min*10000); int maxInteger = (int)(max*10000); int randInteger = rand()*rand(); int diffInteger = maxInteger - minInteger; int resultInteger = randInteger % diffInteger + minInteger; return resultInteger/10000.0; }
计算机辅助材料设计
蒙特卡洛方法
• 基本思想
– 统计实验计算法 – 人为地造出一种概率模型,使它的某些参 数恰好重合于所需计算的量;又可以通过 实验,用统计方法求出这些参数的估值; 把这些估值作为要求的量的近似值。
计算机辅助材料设计
蒙特卡洛方法
• 应用
– 实验次数越多,所得到的结果才越精确。 – 借助计算机 – 优点:一是简单,省却了繁复的数学报导和演算过 程,使得一般人也能够理解和掌握;二是快速。简 单和快速,是蒙特卡罗方法获得应用的技术基础。
– C库函数rand()来产生一个随机的整数。 – 该随机数是平均在0~RAND_MAX之间平均分布的 – RAND_MAX是一个常量,是这样定义的: #define RAND_MAX 0x7fff – 它是一个short型数据的最大值 – 如果要产生一个浮点型的随机数,可以将 rand()/1000.0这样就得到一个0~32.767之间平均 分布的随机浮点数。
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
– 随机的种子 – 计算机产生的随机数是通过递推的方法 – 每次程序运行时对随机种子进行初始化 – 如果给一个常量,则得到的随机序列就完全 相同了,因此可以使用系统的时间来作为随 机种子,因为系统时间可以保证它的随机性 – srand(GetTickCount())
计算机辅助材料设计
0.8
1.0
蒙特卡洛方法
• 几何直观面积法——正态分布
– 概率密度函数
1 f ( x) e 2 ( x )2 2 2
– 其中μ,σ(>0)为常数,它们分别为数学期望和 均方差
计算机辅助材料设计
蒙特卡洛方法
• 几何直观面积法——正态分布
– μ=0,σ=0.2
计算机辅助材料设计
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
– 产生-1000~1000之间的精度为四位小数的平均分 布的随机数可以这样来实现。先产生一个0到 10000之间的随机整数。方法如下:
– int a = rand()%10000;
• 保留四位小数产生0~1之间的随机小数:
– double b = (double)a/10000.0;
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
– 下面的代码产生了400个在-1~1之间的平均分布的 随机数。 double dValue[400]; srand(GetTickCount()); for(int i= 0;i < 400; i++) { double dValue[i] = AverageRandom(-1,1); }
计算机辅助材料设计
蒙特卡洛方法
• 产生随机数
1、C 2、Fortran 77
计算机辅助材料设计
蒙特卡洛方法
• C语言
#include <stdlib.h> #define RAND_MAX 0x7FFF 32767 #define random(num) (rand() % (num)) #define randomize() srand((unsigned)time(NULL)) int rand(void) 0-RAND_MAX int random(int num) 0-(num-1) void srand(unsigned seed) 初始化随机数发生器 void randomize(void) 用随机数初始化随机数发生器
计算机辅助材料设计
蒙特卡洛方法
• Fortran 77
CALL RANDOM(ranval) REAL *4 返回[0, 1)随机数 CALL SEED(seedval) INTEGER *2 改变伪随机数发生器 的起始点 GETTIM 选择时间为“种子”值
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
取μ=0,σ=0.05,范围是-1~1产生400个正态随机数分布图
计算机辅助材料设计
蒙特卡洛方法
• 先产生4000个在0到4之间的正态分布的随机数,取μ=0,σ=0.2,再把产 生的数据的数量做个统计,画成曲线
计算机辅助材料设计
先进复合材料设计与制备技术基础 ____计算机辅助材料设计
蒙特卡洛方法
蒙特卡洛方法
• 问题:
1、粒子随机移动 2、粒子随机沉积 3、粒子随机堆积
计算机辅助材料设计
蒙特卡洛方法
• 介绍
– – – – 一种随机模拟方法 欧洲著名赌城,摩纳哥的蒙特卡罗 赌博游戏与概率的内在联系 美国曼哈顿计划。第二次世界大战期间,美国 Los Alamos 实验室论证出了制造原子弹的可能性,但 要制出实际可用的核武器,逐项解决大量复杂的理 论和技术问题,如中子轨道和辐射轨道等等问题。 描述这些过程需要相当复杂的微分、积分的耦合方 程组。科学家们采用建立基础的物理模型,用随机 抽样法在计算机上进行模拟的方法。这种方法与数 学模拟法不同,不从物理模型建立数学模型(太复 杂),而是在计算机上进行试验,用随机抽样法解 决问题。
蒙特卡洛方法
double Normal(double x,double miu,double sigma) //概率密度函数 { return 1.0/sqrt(2*PI*sigma) * exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma)); } double NormalRandom(double miu,double sigma,double min,double max)//产生正态分布随 机数 { double x; double dScope; double y; do { x = AverageRandom(min,max); y = Normal(dResult, miu, sigma); dScope = AverageRandom(0, Normal(miu,miu,sigma)); }while( dScope > y); return x; }
• 通过线性组合实现任意范围内的随机数的产生 • 实现-1000~1000内的平均分布的随机数:
– double dValue = (rand()%10000)/10000.0*1000(rand()%10000)/10000.0*1000
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
– 上面的式子化简后就变为:
计算机辅助材料设计
蒙特卡洛方法
• 概率密度对应法——线性分布
– – – 0-1之间线性分布,概率密度函数y=2x [0,1]区间分为5份,0,0.2,0.4,0.6,0.8,1 区间内平均概率密度:0.2,0.6,1.0,1.4,1.8
2.0 1.8 1.6 1.4 1.2
Y
1.0 0.8 0.6 0.4 0.2 0.0 0.0 0.2 0.4 0.6
• • •
double miu:μ,正态函数的数学期望 double sigma:σ,正态函数的均方差 double min,double max,表明产生的随机数的范围
计算机辅助材料设计
蒙特卡洛方法
取 μ=0,σ=0.2,范围是-1~1产生400个正态随机数分布图
计算机辅助材料设计
蒙特卡洛方法
计算机辅助材料设计
蒙特卡洛方法
• 平均分布
double a = (rand()%10000) * (rand()%1000)/10000.0; double b = (rand()%10000) * (rand()%1000)/10000.0; double dValue = a-b;
计算机辅助材料设计
• double dValue = (rand()%10000)/10.0(rand()%10000)/10.0; • 精度不正确 • rand()产生的随机数分辨率为32767,两个就是65534, 而经过求余后分辨度还要减小为10000,两个就是 20000,而要求的分辨率为1000*10000*2=20000000
相关文档
最新文档