使用蒙特卡洛方法进行仿真
close all;
clear;
clc;
range = 5000;
% 一个矩形区域
area = [-3 3 -3 3];% 模拟区域范围 [xmin xmax ymin ymax]
% 中心点为0
center = [0,0];
%plot(center(1),center(2),'*r');
%hold on;
r=2;
theta=0:pi/100:2*pi;
x=r*cos(theta);
y=r*sin(theta);
figure(1);
plot(x,y,'-');
hold on;
plot([2,2,-2,-2,2]',[-2,2,2,-2,-2]','-k');
hold on;
axis(area);
axis equal;
show_pi = [];
show_i = [];
temp = 0;
a = [0,0];
for i = 1:range
a(1) = 2-4*rand(1);
a(2) = 2-4*rand(1);
% figure(1);
plot(a(1),a(2),'.r');
% 限制每一秒20帧的数据量显示,处理回调的功能
drawnow limitrate;
% 向量范数或者矩阵范数
if norm(a-center)<2
temp = temp+1;
end
PI = temp*16/i/4;
% 基础的数据格式
show_pi = [show_pi,PI];
show_i = [show_i,i];
end
figure(2);
plot(show_i,show_pi,'-k');
% 对应的坐标轴范围
area1 = [0 range 0 5];
axis(area1);
disp("π等于");
disp(PI);