基于Java语言计算PI(π)

简介: 基于Java语言计算PI(π)

基于Java语言计算PI(π)

划分网格计算π

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

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

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

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


image.png

该方法类似著名的蒙特卡罗法,不同的是将正方形分成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));  //改变参数值
    }
}

测试结果:

次数 10 102 103 104 105 106 107 108 109
估计值 3.16 3.1416000000000004 3.141548 3.1415905200000003 3.1415925455999996 3.1415926496239996 3.14159265350588 3.1415926535868035 3.141592654036897

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

           


目录
相关文章
|
1月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
22天前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
34 3
|
12天前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
1月前
|
算法 Java 编译器
透视Java语言的究极优化:探索性能的深度
在Java程序员的日常工作中,优化代码性能是一项至关重要的任务。然而,除了传统的性能调优方法外,本文将探讨一些更为深奥的技术,如JIT编译器的内部工作机制、GC算法的进阶应用以及多线程并发模型的优化策略。通过深入了解这些技术背后的原理和实现,我们可以更好地理解如何在Java平台上实现最高效的代码运行。 【7月更文挑战第11天】
49 4
|
1月前
|
搜索推荐 Java 大数据
Java中的数据流处理与流式计算实现
Java中的数据流处理与流式计算实现
|
1月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
1月前
|
Java 大数据 API
Java语言的核心知识点与特性
Java 是一种广泛使用的编程语言,自 1995 年发布以来,它已经成为了企业级应用开发、移动应用开发、大数据处理和云计算等领域的主流技术。
29 0
|
1月前
|
设计模式 算法 Oracle
Java语言学习路径及学习资源推荐
Java语言学习路径及学习资源推荐
|
1月前
|
JavaScript 前端开发 Java
Java语言+前后端分离 数字化产科管理平台 产科电子病历系统源码
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
34 0
|
1月前
|
并行计算 监控 Java
Java中的并行计算与任务分发策略
Java中的并行计算与任务分发策略