蒙特卡罗法(Monte Carlo method)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 删除当前行