简介
随机取样法(别名),基于大量事件的统计结果来实现一些确定性问题的计算。
其实很简单哦
QU
求 \(y=x^2\) \(y=12-x\) \(y = 0\) 围成的区域面积
面积如下图所示
感觉matlab对于这种程序真的很方面,如果用C++看来没有50+行是写不完了
code
clc,clear
x = unifrnd(0,12,[1,10000000]); % doc unifrnd
y = unifrnd(0,9,[1,10000000]);
pinshu = sum(y < x.^2 & x <=3 ) + sum (y<12-x & x>=3);
area_appr = 12 * 9 * pinshu / 10^7
hold on;
lx = [0:0.01:12];
ly1 = lx.^2; %注意这里必须使用点乘。
plot(lx, ly1);
ly2 = 12 - lx;
ly3 = 0;
plot(lx,ly2);
plot(lx,ly3);
TIPS
unifrnd 函数是什么意思呢?
returns an array R of random numbers generated from the continuous uniform distributions with lower and upper endpoints specified by A and B, respectively. If A and B are arrays, R(i,j) is generated from the distribution specified by the corresponding elements of A and B. If either A or B is a scalar, it is expanded to the size of the other input.
生成一个数组R连续均匀分布于最低值和最高值。
R = unifrnd(A,B,m,n,...) or R = unifrnd(A,B,[m,n,...]) returns an m-by-n-by-... array. If A and B are scalars, all elements of R are generated from the same distribution. If either A or B is an array, they must be m-by-n-by-... .
总而言之 生成了 \(10^7\) 个数据点,x和y
sum 统计这些数据点 的分布个数。
感觉这个算法简单又实在。过于优秀。
美的总是简单又好用的。
Result
area_appr =
49.5029