蒙特卡洛数值积分实验报告

蒙特卡洛数值积分实验报告
蒙特卡洛数值积分实验报告

蒙特卡洛数值积分实验报告

杨韧121180143

问题概述:

概率论中,一切关于大量随机现象之平均结果的稳定性的定理,通称为“大数定理”。大数定理可以用于定积分的近似求解。考察下面的定积分:

其中g(x)为连续函数。为求解这个定积分,向区间[a,b]上均匀接连投n个随机点,它的坐标为n个独立均匀分布的随机变量,显然

由大数定理

当n很大时

用计算机可模拟蒙特卡洛实验,进行积分的近似计算。

本实验程序采用C语言编写,实验代码如下:

#include "stdafx.h"

#include

#include

#include

#include

#include

int _tmain(int argc, _TCHAR* argv[])

{

double a,b,result,x;

unsigned int n,count;

short int contrl = 'Y'; //进行流程控制的变量

double g(double x); //声明被积函数g(x)

srand( (unsigned)time( NULL ) );

while(contrl == 'Y'){

result = 0;

contrl = 0;

printf_s("请输入实验次数\n");

scanf_s("%u",&n);

printf_s("请输入积分范围(a,b):a=?,b=?\n");

scanf_s("%lf %lf",&a,&b);

count = n;

while(count){

x = a + (b-a)*(double)rand() /(double)(RAND_MAX+1); //将unsigned int随机数转换成符合要求的x

result += g(x); //累加结果

--count; //控制循环次数

}

result *= (b-a)/n; //乘上系数

printf_s("积分结果为:%lf\n重新实验?Y/N\n",result);

getchar(); //吸收多余的回车

contrl = getchar();

}

return 0;

}

double g(double x)

{

return (x*exp(x));

}

实验程序中将g(x)独立成为一个被调用子函数,便于根据各种需要将其修改为各种不同的其他函数,可以对任何复杂的定积分进行近似的数值求解。

(部分参考杨润琦同学)

相关文档
最新文档