基于Java语言计算PI(π)

基于Java语言计算PI(π)

关于作者

  • 作者介绍

🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。

划分网格计算π

1.转换扩展法。如果是曲面,而且形状比较规则,可以用转化扩展法。转化扩展法是由节点开始,扩展成线单元,然后扩展成平面的二维单元,然后扩展成三维单元。这样生成的网格质量比较高、速度比较快,不仅可以生成三维网格,也可以生成一维网格和二维网格,还可以进行移动、镜像、拉升、旋转等操作;扫描三维实体的扩展方式、扩展系数和扩展方向,具有灵活、可多方面调整的优势。

2.Delaunay三角形法。如果是由一条封闭曲线围成的连通领域(单连通领域或多连通领域),可以采用Delaunay三角形法。这种方法用等边三角形进行离散,既能照顾到计算对象的细微几何特征,又能照顾到仅需稀疏单元网格之处。Delaunay三角形法适合做局部最优化处理。

3.覆盖法。如果计算对象是完整裁切曲面,且边界为裁剪曲线,可以采用覆盖法。覆盖法主要采用四边形单元进行网格划分。

4.前沿法。前沿法适合划分曲面,四边形单元和三角形单元都可以采用。主要通过把曲面等参变换到二维空间,然后把二维空间映射到三维空间来实现。


circle2

该方法类似著名的蒙特卡罗法,不同的是将正方形分成n2个小正方形,统计落在内接圆内的小正方形个数占所有正方形的比例,利用四分之一个圆来研究,看落入其中的小正方形有多少个,并计算概率,再用概率反推π的值,即π=4N/n2 (N表示落入单位圆内小正方形的个数)。

代码部分

package com.zmz.countPI;

/**
 * @ProjectName: PI
 * @Package: com.zmz.countPI
 * @ClassName: RandomPI
 * @Author: 张晟睿
 * @Date: 2021/10/20 10:24
 * @Version: 1.0
 */
public class RandomPI {
    public static double rand_pi(int n) {
        int numInCircle = 0;
        double x, y;
        double pi;
        for(int i=0;i < n; i++){
            x = Math.random();
            y = Math.random();
            if(x * x + y * y < 1)
                numInCircle++;
        }
        pi = (4.0 * numInCircle) / n;
        return pi;
    }

    public static void main(String[] args) {
        System.out.println(rand_pi(10));  //改变参数值
        System.out.println(rand_pi(100));  //改变参数值
        System.out.println(rand_pi(1000));  //改变参数值
        System.out.println(rand_pi(10000));  //改变参数值
        System.out.println(rand_pi(100000));  //改变参数值
        System.out.println(rand_pi(1000000));  //改变参数值
        System.out.println(rand_pi(10000000));  //改变参数值
        System.out.println(rand_pi(100000000));  //改变参数值
        System.out.println(rand_pi(1000000000));  //改变参数值
    }
}

测试结果:

次数10102103104105106107108109
估计值3.163.14160000000000043.1415483.14159052000000033.14159254559999963.14159264962399963.141592653505883.14159265358680353.141592654036897

可以看出来,该方法投入点的个数越大,越接近真实值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值