% 定义并绘制一个圆,r为圆的半径
clc;clear;close all
r=5;                            % 圆的半径
f=@(x,y) x.^2/r^2+y.^2/r^2-1;   % 圆的隐函数方程
fimplicit(f,'LineWidth',2,'Color','r');     % 使用隐函数绘图命令绘制圆

set(gcf,'units','normalized','position',[0.2 0.2 0.6 0.6]);     % 设置 figure 窗口的位置和尺寸
grid on
axis equal
axis([-(r+0.5),(r+0.5),-(r+0.5),(r+0.5)])                       % 设置坐标轴刻度范围
pause(2)
hold on

% 绘制圆的包络矩形
rectangle('Position',[-r,-r,2*r,2*r],'EdgeColor','b','LineWidth',2) % 绘制圆的包络矩形
A=4*r*r;     % 计算包络矩形的面积
pause(2)
% 往矩形区域里, 投放 N 个均匀分布的随机点,N的值越大求得的圆周率的近似值精度越高
N=50000;
xk=-r+(r+r)*rand(1,N);    % 随机点的 x 坐标
yk=-r+(r+r)*rand(1,N);    % 随机点的 y 坐标
scatter(xk,yk,'g.');

% 统计落在圆里面的, 随机点的个数, 近似求圆周率
r2=xk.^2/r^2+yk.^2/r^2;     % 随机点是否落在圆里的判据
m=find(r2<=1);              % 找到落在圆里面的随机点
n=length(m);                % 统计落在圆里面的, 随机点的个数
S=((n/N)*A)/r^2             % 蒙特卡洛法, 近似求圆周率

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。