[关闭]
@TangWill 2019-06-28T11:33:09.000000Z 字数 1408 阅读 802

用蒙特卡罗方法计算定积分

概率论


为计算积分


可采用下面的方法实现。任取一列相互独立的随机变量,它们都服从上的均匀分布,则也是一列相互独立、同分布的随机变量列且

所以,而有大数定律有

因此,只要能生成随机列就能求出 的近似值,可以在计算机上首先生成服从均匀分布的随机数 ,然后通过上面两式得出近似值,也就是

其中, 是计算机上生成的伪随机数。

用蒙特卡洛方法积分

首先选定一个区间 ,然后抽取4000个随机点的坐标 ,他们服从区间上的均匀分布。

利用MATLAB生成区间随机掷点效果图

  1. random = unifrnd(0,1,1,4000);%生成4000个区间[0,1]上服从均匀分布的随机数
  2. x=0.00025:0.00025:1;
  3. y=x.^3; subplot(2,1,1),plot(x,y,'k',x,random,'.');
  4. xlabel('x轴'),ylabel('y轴')
  5. for n=1:4000 sumset(n)=0; end
  6. sum=0;
  7. for n=1:4000 sum=sum+random(n).^3; sumset(n)=sum/n;
  8. end subplot(2,1,2),plot(x,sumset);
  9. sum/4000

结果如图

image_1dee1v39l16a419ip1uj7dji72e9.png-9.9kB
image_1dee1vffe1non18mm1eak1hn47km.png-210.2kB

图可知,结果稳定在0.25附近。
有牛顿-莱布尼茨公式可知

模拟值与精确值的误差率为0.129%

用蒙特卡罗方法积分

首先选定一个区间 ,然后抽取4000个随机点的坐标 ,他们服从区间上的均匀分布。

利用MATLAB生成区间随机掷点效果图

  1. random = unifrnd(0,1,1,4000);%生成4000个区间[0,1]上服从均匀分布的随机数
  2. x=0.00025:0.00025:1;
  3. y=sin(x); subplot(2,1,1),plot(x,y,'k',x,random,'.');
  4. xlabel('x轴'),ylabel('y轴')
  5. for n=1:4000 sumset(n)=0; end
  6. sum=0;
  7. for n=1:4000 sum=sum+sin(random(n)); sumset(n)=sum/n;
  8. end subplot(2,1,2),plot(x,sumset);
  9. sum/4000

结果如图
image_1dee26barhu21sui12j61pald8613.png-9.6kB

image_1dee26lf216c79meam1bsr1ois1t.png-210.7kB

由图可知,结果稳定在0.46附近。

有牛顿-莱布尼茨公式可知

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注