蒙特卡罗法(Monte Carlo method)

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

实验十二

计算机仿真实验

实验目的:

1. 掌握全概率公式与贝叶斯公式;

2. 了解计算机仿真方法;

3. 了解蒙特卡罗法(Monte Carlo method), 具有初级编程能力.

实验原理:

全概率公式: 设A 1, A 2, …, A n 为两两互斥事件,B 是A 1 + A 2 + … + A n 的子事件,则P(B )=P(A 1)P(B |A 1) + P(A 2)P(B |A 2) + … + P(A n )P(B |A n ).

贝叶斯公式: P(A k |B )= P(A k )P(B | A k )/P(B ).

计算机仿真: 就是在计算机上模拟各种实际系统的运行过程. 计算机仿真通常用来产生规定分布的随机变量.

对于任意随机变量ξ ,其分布函数为F (x ),设 η = F (ξ )的分布函数为G (y ),则G (y ) = P{η ≤y }= P{F (ξ ) ≤y }= P{ξ ≤F -1( y )}= y ,这说明η 服从[0,1]的均匀分布.一般的编程语言都提供了均匀分布随机数发生器.

应用随机数模拟试验的方法通常称为蒙特卡罗法(Monte Carlo method). 蒙特卡罗法不仅适用于处理随机性问题, 如存贮、排队、质量检验、市场营销、社会救急、生态竞争和传染病等问题;也可处理定性问题, 如计算多重积分、解积分方程及微分方程、解整数规划(特别是非线性整数规划)等.

应用蒙特卡罗法解规划问题的基本思想是:先估计各个变量的大致取值范围,每次试验从中随机取出一个样本点,然后判断它是否为可行点. 若是则将其目标函数值与上一次的目标函数值相比较,记录下较优目标函数值与其样本点;否则重新抽样。直到试验次数达到指定值或可行点数达到指定值为止.

实验内容:

1. 设有两个口袋,甲袋中盛有两个白球,一个黑球,乙袋中盛有一个白球,两个黑球.由甲袋任取一个球放入乙袋,再从乙袋中取出一个球.若从乙袋中取出的球是白球,那么从甲袋中取出放入乙袋的球是白球还是黑球? 用计算机模拟上述过程1000次,问理论判断是正确的有多少次?

2. 用计算机模拟随机变量ξ ~ϕ (x ) =⎩

⎨⎧≤>-0,0,0,e 55x x 的取值200次. 3. 用计算机模拟随机变量ξ ~N (120,102 )的取值800次,并画出统计直方图.

4. 应用蒙特卡罗法解非线性规划问题:

max z = - 2x 2 - y 2 + xy + 8x + 3y

s.t. 3 x + y = 10

x ≥0, y ≥0.

C 语言简介(仅介绍本实验所用到的)

1.标识符

标识符是由程序员定义的单词,如函数名、变量名等. 标识符是由大小写字母、数字和下划线组成的,并以字母和下划线开始.

2.关键字

void (无值型) char (字符型) int (整数型) long (长整数型) float (浮点型) double (双精度浮点型)

if (如果) else (或者)

for (循环) while (循环) break (满足一定的条件终止循环)

return (返回函数值)

3.函数形式

类型函数名(参数)

{

}

4.库函数简介

double sin(double x) double cos(double x) double exp(double x) double log(double x) double sqrt(double x) double pow(double x, double y)

double fabs(double x) int abs(int x)

int printf(const char *format, ...); 屏幕格式化输出函数

FILE *fopen(const char *filename, const char *mode); 文件打开

int fprintf(FILE *fp, const char *format, ...); 文件格式化输出函数

int fgetc(FILE *fp); 从文件中读出一字符

int fclose(FILE *fp); 文件关闭

void far setcolor(int color); 设置输出颜色

void far line(int x1, int y1, int x2, int y2); 画直线

void far rectangle(int left, int top, int right, int bottom); 画矩形

unsigned far getpixel(int x, int y); 读出点(x, y)的颜色

void far putpixel(int x, int y, int pixelcolor); 画点

int random(int Num), 均匀产生0到Num-1中的一个随机数

5.示例

计算9!

#include

void main(void)

{

int i;

long n;

n=1;

for(i=1;i<=9;i++)n*=i;

printf("\n9!=%ld\n",n);

getch();

}

6. Turbo C(2.0) 编辑命令

F3 录入文件

F9 编译

Ctrl+F9 运行

Ctrl+KB 定义块首

Ctrl+KK 定义块尾

Ctrl+KC 块粘贴

Ctrl+KV 块移动

Ctrl+Y 删除当前行

相关文档
最新文档