假设我们有个y=x^2的表达式,如何用MC方法求得函数在[0,1]区间的定积分呢?
定积分可以用面积来求解,也就是通过求箭头下的面积
x=0:0.01:1;y=x.^2;plot(x,y); % 绘图
staus=10;
for i=1:4 % 4次模拟 % 为观察随数据量的增加,蒙特卡洛求出的正确性是否增加
point=staus.^i; % 模拟的随机点数
RandData=rand(2,point); % 根据随机点数,产生随机的(x,y)散点,不明白可以试试 % scatter(RandData(1,:),RandData(2,:))
Below=find(RandData(1,:).^2>RandData(2,:)); % 寻找位于曲线下的散点
Outcome(i)=length(Below)/length(RandData); % 最终结果的表示
end
结果如下:
Outcome =
0.200000000000000 0.280000000000000 0.329000000000000 0.337900000000000
从结果看来,通过不断增加随即点数,结果越与真实值相符。
当数据规模达到1e5时,定积分结果趋于稳定:
point=100000; %模拟的规模
RandData=rand(2,point);
Below=find(RandData(1,:).^2>RandData(2,:));
Outcome=length(Below)/length(RandData);
% 绘图
BelowData=RandData(:,Below);
hold on
scatter(BelowData(1,:),BelowData(2,:))
题目: y = x 2 y=x^2 y=x2,, y = 12 − x y=12-x y=12−x与4x$轴在第一象限围成一个曲边三角形。设计一个随机实验,求该图形面积的近似值。
解析:在矩形区域[0,12]×[0,9]上产生服从均匀分布的1e7个随机点,统计随机点落在曲边三角形的频数,则曲边三角形的面积近似为上述矩形的面积乘以频率。
x=unifrnd(0,12,[1,10000000]);
y=unifrnd(0,9,[1,10000000]);
pinshu=sum(y
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?