蒙特卡洛(不规则面积和圆周率)

pull/2/head
盘荣博 4 months ago
parent 95f484af5c
commit 2a3a14b6d9

@ -0,0 +1,61 @@
%27页例题
clc; clear; close all;
n = 10000; % 使用较小的 n 值以便更容易可视化
x = unifrnd(0, 12, [1, n]);
y = unifrnd(0, 9, [1, n]);
ans=sum(y < x.^2 & x <= 3)+sum(y < 12 - x & x >= 3);
ans=ans/n;
% 找出满足条件的点
condition1 = y < x.^2 & x <= 3;
condition2 = y < 12 - x & x >= 3;
condition_met = condition1 | condition2; % 满足任一条件的点
condition_not_met = ~condition_met; % 不满足任何条件的点
% 创建图形窗口
figure;
hold on;%在同一张图上绘图
% 绘制不满足任何条件的点
scatter(x(condition_not_met), y(condition_not_met), 'k.'); % k----黑色 .----绘制样式
%scatter绘制散点图
%x(condition_not_met) 会返回一个新的向量,其中只包含 x 中对应 condition_not_met 为 true 的元素。
% 绘制满足第一个条件的点
scatter(x(condition1), y(condition1), 'r.'); % 红色
% 绘制满足第二个条件的点
scatter(x(condition2), y(condition2), 'b.'); % 蓝色
% 添加图例和标签
legend('不满足任何条件的点', '满足 y < x^2 且 x <= 3 的点', '满足 y < 12 - x 且 x >= 3 的点');
xlabel('x');
ylabel('y');
title('随机生成的点和满足条件的点');
hold off;
%蒙特卡洛法求圆周率qw
clc;clear;close all;
n=10^5;
x=unifrnd(-1,1,[1,n]);
y=unifrnd(-1,1,[1,n]);
con1=x.^2+y.^2<=1;
con2=~con1;
ans=sum(x.^2+y.^2<=1);
ans=ans/n*4;
figure ;
hold on;
scatter(x(con1),y(con1),'r.');
scatter(x(con2),y(con2),'k.');
hold off;
Loading…
Cancel
Save