随机模拟算法求解圆周率

本文介绍了使用蒙特卡洛算法来求解圆周率的近似值,通过在正方形区域内生成随机点并计算落在圆内的点数来估算圆的面积。借助Java Swing进行可视化分析,展示了一个小数据集的例子,并展示了如何通过增加数据量提高估算精度。文章总结了使用蒙特卡洛算法和MVC设计模式的优势。

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

圆周率(π)这个东西是从小学开始一直陪伴我们的,这里使用使用蒙特卡洛算法来产生大量的随机数求解π的近似值。

计算方式

首先我们知道 正方形的面积公式是S1 = a * a,圆形的面积S2 = π * r * r;
所以以圆的直径为正方形边长,可以得出π的表达式。

π = 4 * S2 / S1 

这样一来,重点就是求解正方形和圆形的面积,这里使用在一正方形区域内圆内产生相应的随机点,
为了便于可视化分析,在圆内和圆外的点分别用不同的颜色来表示,最后圆内产生的点数就近似记作圆的面积,区域内的点数记作正方形的面积。

可视化分析-小数据集

这里用Java swing来求解。

首先看看Circle的model类

public class Circle {
   

    private int x, y, r;

    public Circle(int x, int y, int r){
        this.x = x;
        this.y = y;
        this.r = r;
    }

    public int getX(){ return x; }
    public int getY(){ return y; }
    public int getR(){ return r; }
  // 判断点是否包含在圆内
    public boolean contain(Point p){
        return Math.pow(p.x - x, 2) + Math.pow(p.y - y, 2) <= r*r;
    }
}

这里定义了圆的坐标,以及圆的半径。
然后看看点的model类

public class MonteCarloPiData {
   

    private Circle circle;
    private LinkedList<Point> points;
    private int insideCircle = 0;

    public MonteCarloPiData(Circle circle){
        this.circle = circle;
        points = new LinkedList<Point>();
    }

    public Circle getCircle(){
        return circle;
    }
    // 得到点的数量
    public int getPointsNumber(){
        return points.size();
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值