标题:蒙特卡罗思想求圆周率pi,这个有人听过么?
只看楼主
叫我vitamin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-11-29
结帖率:33.33%
已结贴  问题点数:20 回复次数:8 
蒙特卡罗思想求圆周率pi,这个有人听过么?
有一个边长为a的正方形,这个正方形里面有一个半径为a/2的内切圆,随机取这个正方形范围内的一点,则这个点落入内切圆的概率为PI/4。请根据蒙特卡罗的思想求得圆周率PI ? 这是要用C来写,但是没有思路!!
搜索更多相关主题的帖子: 蒙特卡罗 圆周率 内切圆 正方形 
2013-12-04 12:47
叫我vitamin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-11-29
得分:0 
2013-12-04 12:48
叫我vitamin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-11-29
得分:0 
毫无思路怎么破!!
2013-12-04 12:48
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 
本篇文章介绍计算圆周率的几种算法,都是应用蒙特卡罗思想:或称计算机随机模拟方法,是一种基于“随机数”的计算方法。

方法一:蒙特卡罗方法,内切圆
1.1思想

         有一个以(0,0)为中心的2*2的正方形,及这个正方形的半径为1的内接圆,取这个正方形范围内的一点,则这个点落入内接圆的概率为PI/4。

1.2程序

程序分为两部分:(1)随机生成正方形内的一点(2)计算落入内接圆的概率,从而求得PI。

[java] view plaincopy
import java.util.Random;  
  
public class MonteCarlo  {  
    int m = 0;//落入内接圆的次数  
    int n = 10000000;//试验进行次数  
    float x;//点的x坐标值  
    float y;//点的y坐标值  
    double result = 0;//结果,即为PI  
    Random r = new Random();//Random对象,用于生成随机数  
    public static void main(String[] args){  
        MonteCarlo c = new MonteCarlo();  
        c.calculatePI();  
    }  
    public float getNum(){  
        float tmp = 1-r.nextFloat()*2;//nextFloat生成[0,1]的浮点数  
        return tmp;  
    }  
    public void calculatePI(){  
        for(int i = 0; i<n;i++){//进行n次试验  
            x=getNum();  
            y=getNum();  
            float tmp = (float) java.lang.Math.sqrt(x*x+y*y);//开根号  
            if(tmp<=1)  
                m++;//落入内接圆的次数  
        }  
        result = (4*(float)m)/n;//PI  
        System.out.println("m: "+m);  
        System.out.println("n: "+n);  
        System.out.println("pi: "+result);  
    }  
}

DO IT YOURSELF !
2013-12-04 13:30
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:7 
回复 4楼 wp231957
为毛要用java写...

三十年河东,三十年河西,莫欺少年穷!
2013-12-04 13:43
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用韶志在2013-12-4 13:43:52的发言:

为毛要用java写...



答: 我是度娘直接转过来的 我既不会什么蒙特卡罗也不会什么java

DO IT YOURSELF !
2013-12-04 13:56
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 
回复 6楼 wp231957
呵呵  我也不知道那个蒙什么的...
 了解一下

三十年河东,三十年河西,莫欺少年穷!
2013-12-04 14:00
叫我vitamin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-11-29
得分:0 
回复 7楼 韶志
对我一个大一的来说 多难啊~
2013-12-04 18:44
vivalatom
Rank: 2
等 级:论坛游民
帖 子:23
专家分:39
注 册:2013-12-2
得分:7 
原理是一样的。。。但是我srand不是很弄得懂,就不给代码了。。。
2013-12-04 19:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424686-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018085 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved