基于matlab实现蒲丰投针【附源码】

本文介绍了一种使用MATLAB编程实现的投针法来估算数学常数π的方法。通过模拟随机投掷一定长度的针到有平行线的平面上,并统计针与线相交的次数,最终计算出π的近似值。文中详细展示了整个模拟过程的代码及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clc,clear,close all

a=1; %平行线间距
l=a/2; %针长
x=repmat([-0.5;8.5],1,9);
y=repmat(linspace(0,8,9),2,1);
line(x,y)
hold on %固定图像框
n=1e3; %投针次数
countNeedle=0; %记录针与线相交次数,初始值为0

% 预分配内存,加快程序运行速度
needleXL=zeros(1,n);
needleYL=zeros(1,n);
theta=zeros(1,n);
needleXR=zeros(1,n);
needleYR=zeros(1,n);
my_pi=zeros(1,n);

for i=1:n
    needleXL(i)=8*rand; %随机生成投针的起始点横坐标
    needleYL(i)=8*rand; %随机生成投针的起始点纵坐标
    theta(i)=pi*rand; %随机生成针与线的夹角
    needleXR(i)=needleXL(i)+l*cos(theta(i)); %计算投针的另一端点横坐标
    needleYR(i)=needleYL(i)+l*sin(theta(i)); %计算投针的另一端点纵坐标
    plot([needleXL(i),needleXR(i)],[needleYL(i),needleYR(i)],'b') %画出投针的位置
    if fix(needleYL(i))~=fix(needleYR(i)) %判断针与线是否相交 
        countNeedle=countNeedle+1; %记录针与线相交次数
    end
    my_pi(i)=i/countNeedle;
end
piEst=n/countNeedle; %计算pi的近似值
disp(['共投针',num2str(n),'次, ','其中与平行线相交',num2str(countNeedle),'次, ','Pi的估计值为',num2str(piEst),'.'])
figure
plot(my_pi)
line([0,n],[pi,pi],'LineWidth',2,'LineStyle','--','color','r')

在这里插入图片描述


2021年3月10日17:21:42


2022年3月22日14:00:07 有少许改动


哪里不懂可以在评论区留言

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值